DistroAV / DistroAV

DistroAV (formerly OBS-NDI): NewTek NDI integration for OBS Studio

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Apple M1 CPU

ReallyBigEthan opened this issue · comments

Hello,

I have been using NDI for Windows for a while. I decided to get the new MacBook with M1 since it seems to be a really powerful computer. However, I cannot get the NDI runtime/plugin to work with OBS. OBS works perfectly fine, but it cannot detect the NDI plugin/runtime. I suspect this is because of Rosetta, but I am not experience with this at all. Is there anything I can do to make this work, or is there plans to support the Apple Silicon?

Thanks!

Edit: Dug into it a little further. It appears the only issue may be that the CPU is "unsupported". So I don't know if there is anything I can do to bypass that, or if we can include the Apple M1 CPU in the next version.

22:06:04.066: CPU Name: VirtualApple @ 2.50GHz processor
22:06:04.066: CPU Speed: 2400MHz
22:06:04.066: Physical Cores: 8, Logical Cores: 8
22:06:04.066: Physical Memory: 8192MB Total
22:06:04.067: OS Name: Mac OS X (NSMACHOperatingSystem)
22:06:04.067: OS Version: Version 10.16 (Build 20B29)
22:06:04.067: Kernel Version: 20.1.0
22:06:04.097: hotkeys-cocoa: Using layout 'com.apple.keylayout.US'
22:06:04.098: Portable mode: false
22:06:04.322: OBS 26.0.2 (mac)
22:06:04.322: ---------------------------------
22:06:04.324: ---------------------------------
22:06:04.324: audio settings reset:
22:06:04.324: samples per sec: 48000
22:06:04.324: speakers: 2
22:06:04.377: ---------------------------------
22:06:04.377: Initializing OpenGL...
22:06:05.045: Loading up OpenGL on adapter Apple Apple M1
22:06:05.045: OpenGL loaded successfully, version 4.1 Metal - 70.12.7, shading language 4.10
22:06:05.126: ---------------------------------
22:06:05.126: video settings reset:
22:06:05.126: base resolution: 1920x1080
22:06:05.126: output resolution: 1280x720
22:06:05.126: downscale filter: Bicubic
22:06:05.126: fps: 60/1
22:06:05.126: format: NV12
22:06:05.126: YUV mode: 709/Partial
22:06:05.126: NV12 texture support not available
22:06:05.140: Audio monitoring device:
22:06:05.140: name: Default
22:06:05.140: id: default
22:06:05.140: ---------------------------------
22:06:05.186: Failed to load 'en-US' text for module: 'decklink-ouput-ui.so'
22:06:06.959: A DeckLink iterator could not be created. The DeckLink drivers may not be installed
22:06:06.959: No blackmagic support
22:06:07.148: [VideoToolbox encoder]: Adding VideoToolbox H264 encoders
22:06:08.400: [obs-browser]: Version 2.8.7
22:06:08.637: Failed to load 'en-US' text for module: 'obs-ndi.so'
22:06:08.638: [obs-ndi] hello ! (version 4.9.0)
22:06:08.638: [obs-ndi] Trying ''
22:06:08.638: [obs-ndi] Trying '/usr/lib'
22:06:08.638: [obs-ndi] Trying '/usr/local/lib'
22:06:08.638: [obs-ndi] Found NDI library at '/usr/local/lib/libndi.4.dylib'
22:06:08.700: [obs-ndi] NDI runtime loaded successfully
22:06:08.700: [obs-ndi] CPU unsupported by NDI library. Module won't load.
22:06:08.700: Failed to initialize module 'obs-ndi.so'
22:06:08.892: os_dlopen(/Applications/VLC.app/Contents/MacOS/lib/libvlccore.dylib->/Applications/VLC.app/Contents/MacOS/lib/libvlccore.dylib): dlopen(/Applications/VLC.app/Contents/MacOS/lib/libvlccore.dylib, 257): image not found
22:06:08.892:
22:06:08.892: Couldn't find VLC installation, VLC video source disabled
22:06:08.914: [obs-ndi] hello ! (version 4.9.0)
22:06:08.914: [obs-ndi] Trying ''
22:06:08.914: [obs-ndi] Trying '/usr/lib'
22:06:08.914: [obs-ndi] Trying '/usr/local/lib'
22:06:08.914: [obs-ndi] Found NDI library at '/usr/local/lib/libndi.4.dylib'
22:06:08.914: [obs-ndi] NDI runtime loaded successfully
22:06:08.914: [obs-ndi] CPU unsupported by NDI library. Module won't load.
22:06:08.914: Failed to initialize module 'obs-ndi.so'

Had this same issue. OBS seems to work just fine but while the NDI plugin and runtime will install successfully NDI sources will not show up as a selectable item. Looking forward to an update for M1 processors!

I am having the same issue. I can't even get the plugin to show up in OBS.

Apple M1 CPU seems not comaptible with required instruction to have a workin NDI function.

This might work at some point as there are content for ARM instruction set in the SDK. and some folks managed to get decoding working on RaspberryPi.

This is an excerpt of the NDI SDK Documentation :
"11 CPU REQUIREMENTS
NDI Lib is heavily optimized (much of it is written in assembly). While it detects available architecture and uses the best path it can, the minimum required SIMD level is SSSE3 (introduced by Intel in 2005). Hardware acceleration of streams uses GPU-based fixed function pipelines for decompression to the degree possible; however this is not required, and we will always fall back to software-based compression and decompression.
Current codecs detect the CPU type at run-time and select the best codec implementation based on the system’s capabilities. Current software paths include SSSE3, SSE4, AVX and AVX2 (with and without VEX instructions). Hardware acceleration for certain codecs is now present on Windows and Mac OS, and is supported on Intel, AMD and nVidia based systems."

Apple M1 is not x86 and does NOT carry SSE3 natively (IIRC)

Another discussion about this on Reddit : https://www.reddit.com/r/VIDEOENGINEERING/comments/k0exne/ndi_support_for_m1_chip/

According to Newtek, Rosetta allows full functionality with NDI minus one little bug in their Scan Converter tool.

Source: https://forums.newtek.com/showthread.php/163559-Apple-M1-Chip-Compatability

I've also experienced other platforms and software providers still functioning properly even with the M1 Chip.

It seems as if the plugin should be debugged first to sort out why OBS cannot even see the plugin after installation before determining if it works or not.

same issue here. Took a while to discover this problem.

If that is the case then this would explain :
[obs-ndi] CPU unsupported by NDI library. Module won't load.
Failed to initialize module 'obs-ndi.so'

Result : This will prevent the plugin from loading.

Where to look ?
The error is triggered when initializing the library (!ndilib->initialize) which down the drain call for : NDIlib_is_supported_CPU

In the NDI lib it is shown : https://github.com/Palakis/obs-ndi/blob/adcf4f09acd02cf355c7f9a2541232adbb480d1a/lib/ndi/Processing.NDI.Lib.h#L107-L113
"In general it is more "correct" to call these although it is not required."
"This will return false if the CPU is not sufficiently capable to run NDILib"

Easy fix ?
Skip this call on M1 based system. but would need to update the plugin once the official support is added by the Newtek folks.

Doing so, it should be fine according to the NDI SDK Documentation (Section 14.)

"STARTUP AND SHUTDOWN
The commands NDIlib_initialize() and NDIlib_destroy()can be called to initialize or de-initialize the library. Although never absolutely required, it is recommended that you call these. (Internally all objects are reference-counted; the libraries are initialized on the first object creation and destroyed on the last, so these calls are invoked implicitly.)

The only negative side-effect of this behavior is that – if you repeatedly create and destroy a single object – more work is done each time than is required. These calls allow that to be avoided.

There is no scenario under which these calls can cause a problem, even if you call NDIlib_destroy() while you still have active objects. NDIlib_initialize() will return false on an unsupported CPU."

Proper Fix ?

At module load > Alert the user that the CPU used is not supported by the NDI SDK, prompt the user 2 choices:

  1. Continue without OBS-NDI plugin
  2. "I still want to activate this plugin." with a disclaimer "Running plugin on unsupported CPU might create unstability and no support is provided" > Add a line in the log to keep track of this.

Any way to make it work? We upgraded to the new MacBooks last week and this is the only thing making us hold the old computers

Any way to make it work? We upgraded to the new MacBooks last week and this is the only thing making us hold the old computers

It's not ideal BUT you can download the NDISyphon plugin which will be able to find your NDI sources and then converts them to Syphon clients. In OBS you would just pull these in using the Syphon source option.

I do plenty of testing with this before utilizing it in a stream but it should work. Hope this helps.

Does anybody find the solution of this problem?

Any idea when this will be fixed?

Still can’t make it work. I’m thinking about using another streaming app that works ok on Rosetta and whenever we get an answer on how to make NDI work on M1, move back to OBS :(

On Sat, Dec 5, 2020 at 12:05 PM Boonzen @.***> wrote: Dose any body find the solution of this problem? — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#590 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AMGZN4N4QNJRVXU5SRVDTI3STJR4VANCNFSM4T35VORQ .

Can you tell us what are you using to temporarily replace OBS?

Same issue here! So frustrating.. :(

Waiting for the update!

At some point someone may have to fork this plugin. Just taking a look at the issues posted here it's very apparent that they aren't being addressed.

Please fix this. I am about to return my macbook m1. :( I dont think they will fix it.

So frustrating. OBS is useless to me on the m1 Mac air.

This is an issue with newtek not returning that the cpu is supported with rosetta and not this library specifically. When newtek fixes that issue, this lib should work fine.

This is an issue with newtek not returning that the cpu is supported with rosetta and not this library specifically. When newtek fixes that issue, this lib should work fine.

Have you talked to Newtek directly about this? I have and they are indicating that NDI is working with Rosetta but some developers are having to make some adjustments to get it working properly.

The problem is this:
Any developer using the PROPER ORIGINAL recommendation from the SDK (section 14 of the NDI SDK Doc) will not initialize on M1 CPU.

Any developer that bypass the recommended way of initializing will have a working set on seemingly "unsupported" CPUs.

They have recently updated their NDI SDK documents to reflect this. It's now up to developers to make the fix.

Another day no solution. Feel bad for the new mac owners with M1.

would this have some delay on the stream?

””” My wife and I are using a temporary solution. We both bought the new macbook air and we do a daily live streaming where she need her computer to read news and send her screen to my computer. On my mba I have 2 camera inputs via a $15 dollar HDMI adapter and we used to use NDI to get her screen. As we had a apple tv 3rd gen not being used at the moment, I bought another HDMI adapter and connected the apple tv to my macbook. Now she just needs to mirror her screen to the apple tv. I have to say that for our livestream this new solution works flawlessly. Of course it’s not ideal, as we need to use more equipment… but we might continue using it even if NDI plugin comes back to the M1 processors.
”””

Another day no solution. Feel bad for the new mac owners with M1.

Please understand that this plugin is a volunteer-based developement. And this is the typical problem that you can run into when being a "early-adopter" (in this case jumping the gun on a new product with a new architecture and expecting the world to adapt to it).

A fix has been proposed here : #590 (comment)

But unless someone pick it up and implement it or you pay someone to develop and implement it. There is no guarantee this is gonna be implemented nor when it will be implemented.

It can be frustrating when things are not fully working but there is no point in commenting every week about the issue and fact it is "not yet fixed", rather than complaining to apple that theey switched architecture.

commented

The thought of #590 (comment) gets past the first roadblock. Another snag soon follows.

https://github.com/Palakis/obs-ndi/blob/adcf4f09acd02cf355c7f9a2541232adbb480d1a/src/obs-ndi.cpp#L141-L147

Line 142 when it tries to create OutputSettings we get an actual crash.

The bug is absolutely in the NDI SDK. If the m1 is supported then NDIlib_is_supported_CPU should return true for the m1. It's unreasonable to require that the 100s of libraries that use this SDK work around this issue, particularly at the sake of causing more issues and headaches elsewhere. And I highly doubt that it is Newtek's intentions to ignore this issue entirely despite some random dude "talking with them" and quoting something he saw on an ndi forum.

It might be worth getting ahead of a newtek patch to work around this issue. FWIW though it looks like Newtek released 4.6 less than a month ago NDI 2020-12-01 r119642 v4.6.0, but I don't see anything specific about the m1. So perhaps it's possible an m1 fix made this release, but it's also likely a 4.6.1 would be in the near future. FWIW this lib ships with 4.5.1 and there's been multiple versions since then.. has anyone tried this with 4.6 or 4.5.2-5?

In any case, if you want to complain about this lib specifically, you should probably be listed on this page: https://github.com/sponsors/Palakis

The thought of #590 (comment) gets past the first roadblock. Another snag soon follows.

https://github.com/Palakis/obs-ndi/blob/adcf4f09acd02cf355c7f9a2541232adbb480d1a/src/obs-ndi.cpp#L141-L147

Line 142 when it tries to create OutputSettings we get an actual crash.

Thanks for testing it out :)

After speaking with Andrew at newtek he said, "I can confirm that we do plan on supporting the M1 platform soon. We had hoped that it would be this year, but it looks more like it is going to be early next ... but regardless we do expect to have it."

On that schedule it's probably easier to assume an update to 4.7 rather than chasing down supporting rosetta here. That said, I've only ever downloaded the runtime from this repo. Is there an easy place to direct people to download a new runtime? Is it part of the tools or will someone need to compile it? We could at least test 4.6 for compatibility. I don't know if newtek is following semver?

No updates yet I have look in every website and have found nothing.

Any news on this?

commented

+1 same issue

UPDATE: I was able to get NDI functionality to work within another streaming platform (not OBS) by replaced the NDI Dynamic Library with the Dynamic Library file of Newtek's Video Monitor program.

I am curious to know if the same approach could be taken with this plugin. Anyone familiar enough with this plugin they can take a look at it?

UPDATE: I was able to get NDI functionality to work within another streaming platform (not OBS) by replaced the NDI Dynamic Library with the Dynamic Library file of Newtek's Video Monitor program.

I am curious to know if the same approach could be taken with this plugin. Anyone familiar enough with this plugin they can take a look at it?

Which streaming platform?

commented

UPDATE: I was able to get NDI functionality to work within another streaming platform (not OBS) by replaced the NDI Dynamic Library with the Dynamic Library file of Newtek's Video Monitor program.

I am curious to know if the same approach could be taken with this plugin. Anyone familiar enough with this plugin they can take a look at it?

@mdg4486 Would you mind detailing your steps with links so others can attempt your workaround?

commented

UPDATE: I was able to get NDI functionality to work within another streaming platform (not OBS) by replaced the NDI Dynamic Library with the Dynamic Library file of Newtek's Video Monitor program.

I am curious to know if the same approach could be taken with this plugin. Anyone familiar enough with this plugin they can take a look at it?

I have tested this and it does work. Taking the libndi.4.dylib from Newtek's Video Monitor 4.5 and replacing the .dylib OBS-NDI attempts to use fully works. No errors are thrown, full access to OBS-NDI Settings. Am able to capture NDI source from a W10 PC running OBS-NDI.

==Using==
Apple M1 MacBook Air (Big Sur 11.1)
OBS 26.1.0
OBS-NDI 4.90
Using libndi.4.dylib from Newtek's Video Monitor 4.5
(/Applications/NewTek NDI Video Monitor.app/Contents/Frameworks/libndi.4.dylib)

UPDATE: I was able to get NDI functionality to work within another streaming platform (not OBS) by replaced the NDI Dynamic Library with the Dynamic Library file of Newtek's Video Monitor program.
I am curious to know if the same approach could be taken with this plugin. Anyone familiar enough with this plugin they can take a look at it?

I have tested this and it does work. Taking the libndi.4.dylib from Newtek's Video Monitor 4.5 and replacing the .dylib OBS-NDI attempts to use fully works. No errors are thrown, full access to OBS-NDI Settings. Am able to capture NDI source from a W10 PC running OBS-NDI.

==Using==
Apple M1 MacBook Air (Big Sur 11.1)
OBS 26.1.0
OBS-NDI 4.90
Using libndi.4.dylib from Newtek's Video Monitor 4.5

Where is the libndi.4.dylib file located in the NDI plugin? I looked everywhere and couldn't find it. This was the only thing keeping me from getting it to work on my end.

commented

UPDATE: I was able to get NDI functionality to work within another streaming platform (not OBS) by replaced the NDI Dynamic Library with the Dynamic Library file of Newtek's Video Monitor program.
I am curious to know if the same approach could be taken with this plugin. Anyone familiar enough with this plugin they can take a look at it?

I have tested this and it does work. Taking the libndi.4.dylib from Newtek's Video Monitor 4.5 and replacing the .dylib OBS-NDI attempts to use fully works. No errors are thrown, full access to OBS-NDI Settings. Am able to capture NDI source from a W10 PC running OBS-NDI.
==Using==
Apple M1 MacBook Air (Big Sur 11.1)
OBS 26.1.0
OBS-NDI 4.90
Using libndi.4.dylib from Newtek's Video Monitor 4.5

Where is the libndi.4.dylib file located in the NDI plugin? I looked everywhere and couldn't find it. This was the only thing keeping me from getting it to work on my end.

NewTek NDI Video Monitor.app/Contents/Frameworks/libndi.4.dylib

UPDATE: I was able to get NDI functionality to work within another streaming platform (not OBS) by replaced the NDI Dynamic Library with the Dynamic Library file of Newtek's Video Monitor program.
I am curious to know if the same approach could be taken with this plugin. Anyone familiar enough with this plugin they can take a look at it?

I have tested this and it does work. Taking the libndi.4.dylib from Newtek's Video Monitor 4.5 and replacing the .dylib OBS-NDI attempts to use fully works. No errors are thrown, full access to OBS-NDI Settings. Am able to capture NDI source from a W10 PC running OBS-NDI.
==Using==
Apple M1 MacBook Air (Big Sur 11.1)
OBS 26.1.0
OBS-NDI 4.90
Using libndi.4.dylib from Newtek's Video Monitor 4.5

Where is the libndi.4.dylib file located in the NDI plugin? I looked everywhere and couldn't find it. This was the only thing keeping me from getting it to work on my end.

NewTek NDI Video Monitor.app/Contents/Frameworks/libndi.4.dylib

Yes I was able to get that one - I meant which .dylib file did you replace with the Video Monitor .dylib file?

commented

Yes I was able to get that one - I meant which .dylib file did you replace with the Video Monitor .dylib file?

Ah Gotcha, verify in your OBS logs where it is. Mine was in /usr/local/lib/

Yes I was able to get that one - I meant which .dylib file did you replace with the Video Monitor .dylib file?

Ah Gotcha, verify in your OBS logs where it is. Mine was in /usr/local/lib/

That did it!

FIX INSTRUCTIONS
To fix this issue you'll need to download the OBS-NDI plugin and Newtek's NDI Studio Monitor program (https://ndi.tv/tools/).

You'll need to move the libndi.4.dylib file from /Applications/NewTek NDI Video Monitor.app/Contents/Frameworks TO /usr/local/lib/. You may need to hold down the "cmd" key while dragging this file so that it moves the file instead of creating an alias. Then restart your computer and open OBS. You should now see the NDI plugin in the source list.

If you are having troubles finding the correct folders just use the "Go To Folder" option in your Finder Window and search for the directories I posted above.

Good Luck!

Confirming this works. Thanks Guys!

FIX INSTRUCTIONS
To fix this issue you'll need to download the OBS-NDI plugin and Newtek's NDI Studio Monitor program (https://ndi.tv/tools/).

You'll need to move the libndi.4.dylib file from /Applications/NewTek NDI Video Monitor.app/Contents/Frameworks TO /usr/local/lib/. You may need to hold down the "cmd" key while dragging this file so that it moves the file instead of creating an alias. Then restart your computer and open OBS. You should now see the NDI plugin in the source list.

If you are having troubles finding the correct folders just use the "Go To Folder" option in your Finder Window and search for the directories I posted above.

Good Luck!

libndi.4.dylib 파일을 / Applications / NewTek NDI Video Monitor.app/Contents/Frameworks에서 / usr / local / lib /로 이동해야합니다. 별칭을 만드는 대신 파일을 이동하려면이 파일을 드래그하는 동안 "cmd"키를 누르고 있어야합니다. 그런 다음 컴퓨터를 다시 시작하고 OBS를 엽니 다. 이제 소스 목록에 NDI 플러그인이 표시됩니다.
자세히 설명이 가능한가요?
libndi.4.dylib 파일을 / Applications / NewTek NDI Video Monitor.app/Contents/Frameworks에서 막혔습니다

How's everyone's audio over NDI with this? Struggling to find any other solution to network audio between PC and my M1 mb pro.

My OBS gets stuck at screen Searching for signal.......

FIX INSTRUCTIONS
To fix this issue you'll need to download the OBS-NDI plugin and Newtek's NDI Studio Monitor program (https://ndi.tv/tools/).

You'll need to move the libndi.4.dylib file from /Applications/NewTek NDI Video Monitor.app/Contents/Frameworks TO /usr/local/lib/. You may need to hold down the "cmd" key while dragging this file so that it moves the file instead of creating an alias. Then restart your computer and open OBS. You should now see the NDI plugin in the source list.

If you are having troubles finding the correct folders just use the "Go To Folder" option in your Finder Window and search for the directories I posted above.

Good Luck!

Also confirming that this works on a M1 Mac Mini. Thank you!

commented

Hi, I can't add the libndi.4.dylib in /usr/local/lib; " I don't have permission". I'll try again tomorrow.

Try using sudo copy from the terminal?

commented

I try it but it doesn't work, can you tell me what I have to do in the terminal?

sudo cp /Applications/NewTek NDI Video Monitor.app/Contents/Frameworks/libndi.4.dylib /usr/local/lib/libndi.4.dylib

commented

I wrote the command but after entering the password it does nothing

paoli@MacBook-del-Paoli ~ % sudo cp /Applications/NewTek NDI Video Monitor.app/Contents/Frameworks/libndi.4.dylib
/usr/local/lib/libndi.4.dylib
Password:
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory

I can't the method to work. M1 .Mac air

I downloaded NDI TOOLS 4.5 and installed but can not find /Applications/NewTek NDI Video Monitor.app

I wrote the command but after entering the password it does nothing

paoli@MacBook-del-Paoli ~ % sudo cp /Applications/NewTek NDI Video Monitor.app/Contents/Frameworks/libndi.4.dylib
/usr/local/lib/libndi.4.dylib
Password:
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory

@P4ol1 it seems you forgot to quote the source tree as it contains spaces. it should look like

sudo cp "/Applications/NewTek NDI Video Monitor.app/Contents/Frameworks/libndi.4.dylib" /usr/local/lib/libndi.4.dylib

I wrote the command but after entering the password it does nothing

paoli@MacBook-del-Paoli ~ % sudo cp /Applications/NewTek NDI Video Monitor.app/Contents/Frameworks/libndi.4.dylib
/usr/local/lib/libndi.4.dylib
Password:
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory

If you are doing it at the terminal, you have to escape the spaces with a backslash. So like this:

sudo cp /Applications/NewTek\ NDI\ Video\ Monitor.app/Contents/Frameworks/libndi.4.dylib /usr/local/lib/libndi.4.dylib

Or you can try putting quotes around it:

sudo cp "/Applications/NewTek NDI Video Monitor.app/Contents/Frameworks/libndi.4.dylib" /usr/local/lib/libndi.4.dylib

commented

I tried, now it works !! Thank you very much!

Can anyone explain to me why I can’t find the app are we supposed to install something other than the ndi tools?

Can anyone explain to me why I can’t find the app are we supposed to install something other than the ndi tools?

Once you install this, when you add a new source in OBS, in the list of sources will now be one for NDI. No app needed for OBS with this.

Can anyone explain to me why I can’t find the app are we supposed to install something other than the ndi tools?

Once you install this, when you add a new source in OBS, in the list of sources will now be one for NDI. No app needed for OBS with this.

No what I am saying is
I downloaded NDI TOOLS 4.5 and installed but can not find /Applications/NewTek NDI Video Monitor.app. There’s is no NewTek NDI Video Monitor.app in my applications folder.

in your application you can right-click on the NewTek NDI Video Monitor and do "Show Package Contents"

FWIW I sent this issue to Newtek and they were positive it would be easy to fix the SDK, but it turns out it already is fixed. So if the runtime that was packaged with this library was packaged with one built off of the newest SDK we wouldn't need to do this copy/paste stuff.

@Palakis 👀

in your application you can right-click on the NewTek NDI Video Monitor and do "Show Package Contents"

FWIW I sent this issue to Newtek and they were positive it would be easy to fix the SDK, but it turns out it already is fixed. So if the runtime that was packaged with this library was packaged with one built off of the newest SDK we wouldn't need to do this copy/paste stuff.

@Palakis 👀

Palakis

If your response is for me I am sorry I bait being clear even when I instal the ndi too’s there is no NewTek NDI Video Monitor.app for me to right click on. I guess I am trying to make the connection about what I am doing wrong in install that I don’t get the app.

My other question is will this “fix” work to add ndi to the list of available device in Streamlabs obs?

This is great! NDI working again on Macbook pro M1 - perfect! Thank you so much!

My OBS gets stuck at screen Searching for signal.......

Same for me.
@haroonjameel could you fix this?

My OBS gets stuck at screen Searching for signal.......

Same for me.

@haroonjameel could you fix this?

Same here

Can anyone help with getting stuck at screen Searching for signal in OBS after the plugin is set and found in OBS?.......

in your application you can right-click on the NewTek NDI Video Monitor and do "Show Package Contents"
FWIW I sent this issue to Newtek and they were positive it would be easy to fix the SDK, but it turns out it already is fixed. So if the runtime that was packaged with this library was packaged with one built off of the newest SDK we wouldn't need to do this copy/paste stuff.
@Palakis 👀

Palakis

If your response is for me I am sorry I bait being clear even when I instal the ndi too’s there is no NewTek NDI Video Monitor.app for me to right click on. I guess I am trying to make the connection about what I am doing wrong in install that I don’t get the app.

My other question is will this “fix” work to add ndi to the list of available device in Streamlabs obs?

Other commenters are skipping a step, your confusion is reasonable:

  1. Download the NewTek NDI Tools
  2. Open the package "NewTekNDIVideoMonitor.pkg" which will install the "NewTek NDI Video Monitor" app in your Applications folder
  3. Right-click on it and select "Show Package Contents", then navigate to /Contents/Frameworks/libndi.4.dylib

FIX INSTRUCTIONS
To fix this issue you'll need to download the OBS-NDI plugin and Newtek's NDI Studio Monitor program (https://ndi.tv/tools/).

You'll need to move the libndi.4.dylib file from /Applications/NewTek NDI Video Monitor.app/Contents/Frameworks TO /usr/local/lib/. You may need to hold down the "cmd" key while dragging this file so that it moves the file instead of creating an alias. Then restart your computer and open OBS. You should now see the NDI plugin in the source list.

If you are having troubles finding the correct folders just use the "Go To Folder" option in your Finder Window and search for the directories I posted above.

Good Luck!

i did this and it works , shows up the NDI in obs for mac, but in Chrome, i can't see the NDI video as an input option (i can see ndi audio tho)

where is the NDI video option in chrome???? :) (after i set it as an ndi output from OBS it should show up in Chrome...)

thanks!

Hi,

I've followed these steps on an M1 13"

OBS 26.1.2
obs-ndi-4.9.0
ndi-runtime-4.5.1
NewTek NDI Video Monitor 3.3 (31)

copied "libndi.4.dylib" to /usr/local/lib/

[obs-ndi] hello ! (version 4.9.0)
22:05:28.476: [obs-ndi] Trying ''
22:05:28.476: [obs-ndi] Trying '/usr/lib'
22:05:28.476: [obs-ndi] Trying '/usr/local/lib'
22:05:28.476: [obs-ndi] Found NDI library at '/usr/local/lib/libndi.4.dylib'
22:05:28.501: [obs-ndi] NDI runtime loaded successfully
22:05:28.501: [obs-ndi] CPU unsupported by NDI library. Module won't load.
22:05:28.501: Failed to initialize module 'obs-ndi.so'

Hi,

I've followed these steps on an M1 13"

OBS 26.1.2
obs-ndi-4.9.0
ndi-runtime-4.5.1
NewTek NDI Video Monitor 3.3 (31)

copied "libndi.4.dylib" to /usr/local/lib/

[obs-ndi] hello ! (version 4.9.0)
22:05:28.476: [obs-ndi] Trying ''
22:05:28.476: [obs-ndi] Trying '/usr/lib'
22:05:28.476: [obs-ndi] Trying '/usr/local/lib'
22:05:28.476: [obs-ndi] Found NDI library at '/usr/local/lib/libndi.4.dylib'
22:05:28.501: [obs-ndi] NDI runtime loaded successfully
22:05:28.501: [obs-ndi] CPU unsupported by NDI library. Module won't load.
22:05:28.501: Failed to initialize module 'obs-ndi.so'

Have you checked if it has actually copied. Maybe do a md5sum over both locations. On my MacMini M1 it worked on the first try. maybe double check that you had no misspelling in your copy command.

Its working now. I wish i could explain why.
The sudo command would result in OBS crashing. I'd copied by hand before.
In the end it seemed to be order of execution:

fresh OBS copy, start and get warning that runtime isnt installed.
install runtime (which placed an older version of libndi.4.dylib in /usr/local/
replace at top level using "open enclosed folder" and "go to" finder commands.

YMMV

HI! I did all of this and OBS link is stuck on searching for signal in streamlabs or OBS. Tried the usual turning off OBS link and reopening(would happen on intel chip old mac), and reinstalling OBS link, but it just won't read the signal. It is coming through as you can see it in the elgato game capture software(i do not have them on at the same time). Anyone have a fix for this?

Its working now. I wish i could explain why.
The sudo command would result in OBS crashing. I'd copied by hand before.
In the end it seemed to be order of execution:

fresh OBS copy, start and get warning that runtime isnt installed.
install runtime (which placed an older version of libndi.4.dylib in /usr/local/
replace at top level using "open enclosed folder" and "go to" finder commands.

YMMV

Thank you! Moving the file using the finder instead of terminal made the difference.

I’m not entirely sure why, but copying the ndi library didn’t work. OBS would immediately crash, the error indicating a code signing problem with the library.

Finally symlinked the library in /usr/local/lib to the original in the NDI application bundle, which solved the problem. Almost as if there’s something shipped in the application bundle needed to verify the library, rather than the library being a self-contained unit.

It worked on my M1 when I used the Finder to move the files. It did not work when I did it by terminal

Anyone else get the plugin installed okay, the library symlinked (or copied), the NDI source is available as expected in OBS, but every NDI-connected source is just a black screen? Wondering if that's a different problem, or part of the same issue here.

I signed up here just to say thank you for this solution. I would never have figured it out myself and you saved me a lot of grief.

I am not as concerned with NDI inputs as much as having NDI show up in my OBS Tools so I can use it as the video source in Zoom

It worked this trick for OBS Studio & Streamlabs OBS, but the problem now with Streamlabs OBS is when you select the source, it totally crashed and the program closed :(

@marcelomoyano I didn't try it sorry :(

I did:

brew install obs-ndi

However when I open OBS, I don't see the option "Tools -> NDI Output"

The plugin is installed here:

/System/Volumes/Data/Library/Application Support/obs-studio/plugins/obs-ndi/bin/obs-ndi.so

Any ideas?

@rgaufman you should provide mir information than you gave. Maybe take a look in the logs of OBS and look for error messages. But I would guess you face the same problem most here have and take a look at #631 too.

Ah, it shows this:

$  /Applications/OBS.app/Contents/MacOS/obs 2>&1 | grep -i ndi
warning: Failed to load 'en-GB' text for module: 'obs-ndi.so'
info: [obs-ndi] hello ! (version 4.9.0)
info: [obs-ndi] Trying ''
info: [obs-ndi] Trying '/usr/lib'
info: [obs-ndi] Trying '/usr/local/lib'
info: [obs-ndi] Found NDI library at '/usr/local/lib/libndi.4.dylib'
info: [obs-ndi] NDI runtime loaded successfully
error: [obs-ndi] CPU unsupported by NDI library. Module won't load.
warning: Failed to initialize module 'obs-ndi.so'
info:     obs-ndi.so

Ah thank you, this helped! <

$  sudo mv /usr/local/lib/libndi.4.dylib /usr/local/lib/libndi.4.dylib.bak
$  sudo cp /Applications/'NewTek NDI Video Monitor.app'/Contents/Frameworks/libndi.4.dylib /usr/local/lib/
$  /Applications/OBS.app/Contents/MacOS/obs 2>&1 | grep -i ndi
warning: Failed to load 'en-GB' text for module: 'obs-ndi.so'
info: [obs-ndi] hello ! (version 4.9.0)
info: [obs-ndi] Trying ''
info: [obs-ndi] Trying '/usr/lib'
info: [obs-ndi] Trying '/usr/local/lib'
info: [obs-ndi] Found NDI library at '/usr/local/lib/libndi.4.dylib'
info: [obs-ndi] NDI runtime loaded successfully
info: [obs-ndi] NDI library initialized successfully (NDI SDK APPLE 18:44:47 Jan 28 2021 4.6.1)
objc[3227]: Class AVFFrameReceiver is implemented in both /Applications/OBS.app/Contents/Frameworks/libavdevice.58.dylib (0x4a5ddfd8) and /Library/Application Support/NewTek/NDI/HX_Driver/libavdevice-ndi.58.dylib (0x4e9e9fd0). One of the two will be used. Which one is undefined.
objc[3227]: Class AVFAudioReceiver is implemented in both /Applications/OBS.app/Contents/Frameworks/libavdevice.58.dylib (0x4a5de028) and /Library/Application Support/NewTek/NDI/HX_Driver/libavdevice-ndi.58.dylib (0x4e9ea020). One of the two will be used. Which one is undefined.
info:     obs-ndi.so

Heads up, NDI does not show up as a video source in new native M1 versions of zoom :( - you have to downgrade to the Intel version of Zoom to see NDI as a video source. NDI works as an audio source however.

There is discussion about it here: https://forums.newtek.com/threads/ndi-virtual-input-mac-not-working-in-zoom-for-m1-and-microsoft-teams-run-on-m1.163734/

Its working now. I wish i could explain why.
The sudo command would result in OBS crashing. I'd copied by hand before.
In the end it seemed to be order of execution:

fresh OBS copy, start and get warning that runtime isnt installed.
install runtime (which placed an older version of libndi.4.dylib in /usr/local/
replace at top level using "open enclosed folder" and "go to" finder commands.

YMMV

Sorry, I really don't get it... Where is /usr/local/??? Thanks so much

Hello,

I have been using NDI for Windows for a while. I decided to get the new MacBook with M1 since it seems to be a really powerful computer. However, I cannot get the NDI runtime/plugin to work with OBS. OBS works perfectly fine, but it cannot detect the NDI plugin/runtime. I suspect this is because of Rosetta, but I am not experience with this at all. Is there anything I can do to make this work, or is there plans to support the Apple Silicon?

Thanks!

Edit: Dug into it a little further. It appears the only issue may be that the CPU is "unsupported". So I don't know if there is anything I can do to bypass that, or if we can include the Apple M1 CPU in the next version.

I found a fix! I followed a video (Spanish) and it worked!
https://youtu.be/oHJHM6DMNJ4

For those who don't speak Spanish, the video has you download OBS Studio, the NDI Plugin, and NewTek's "NewTek NDI Video Monitor" (I personally downloaded the whole tool package).

Once those are all downloaded and installed, Go to "Applications" in Finder and right clicking on the Video Monitor app...

Show Package Content > Contents > Frameworks

then open a second Finder Window and on the Menu Bar, click...

Go > Go to Folder
and enter...
/usr/local/lib/

Now with both Finder windows open, hold down the command button and drag the "libndi.4.dylib" file into the "lib" folder. (make sure to move the file by holding command and not just making an alias, or it won't work)

Once the "libndi.4.dylib" file is in the "lib" folder, restart the mac and it should work.

Happy Streaming All!!

To prevent y’all from having to jump through the hoops, here’s the file you’ll need: libndi.4.dylib.zip

im stuck at this screen. Iv selected in OBS Link but still no good. Im Using Elgato HD60S
Screen Shot 2021-04-23 at 2 22 17 PM

Heads up, NDI does not show up as a video source in new native M1 versions of zoom :( - you have to downgrade to the Intel version of Zoom to see NDI as a video source. NDI works as an audio source however.

The final step I needed - thank you. Downgrading zoom oddly fixes all kinds of problems from time to time.

This will at least allow me to limp along until the rest of the pieces catch up on M1.

commented

hey! tried this fix on M1 pro with a HD60S and connected to a gopro - it always asks to select a capture device... the hd60s shows up in obs link and works fine on my old intel mbp.

Hello,
I have been using NDI for Windows for a while. I decided to get the new MacBook with M1 since it seems to be a really powerful computer. However, I cannot get the NDI runtime/plugin to work with OBS. OBS works perfectly fine, but it cannot detect the NDI plugin/runtime. I suspect this is because of Rosetta, but I am not experience with this at all. Is there anything I can do to make this work, or is there plans to support the Apple Silicon?
Thanks!
Edit: Dug into it a little further. It appears the only issue may be that the CPU is "unsupported". So I don't know if there is anything I can do to bypass that, or if we can include the Apple M1 CPU in the next version.

I found a fix! I followed a video (Spanish) and it worked!
https://youtu.be/oHJHM6DMNJ4

For those who don't speak Spanish, the video has you download OBS Studio, the NDI Plugin, and NewTek's "NewTek NDI Video Monitor" (I personally downloaded the whole tool package).

Once those are all downloaded and installed, Go to "Applications" in Finder and right clicking on the Video Monitor app...

Show Package Content > Contents > Frameworks

then open a second Finder Window and on the Menu Bar, click...

Go > Go to Folder
and enter...
/usr/local/lib/

Now with both Finder windows open, hold down the command button and drag the "libndi.4.dylib" file into the "lib" folder. (make sure to move the file by holding command and not just making an alias, or it won't work)

Once the "libndi.4.dylib" file is in the "lib" folder, restart the mac and it should work.

Happy Streaming All!!

This just allows us to add NDI sources in OBS right but we still can't send an NDI signal out of OBS?
Would this method work with the "libndi_embedded.4.dylib" from NDI Virtual Input to enable NDI out from OBS? Sorry, I can't try it. My M1 Mac Mini is still on order.

Hello,
I have been using NDI for Windows for a while. I decided to get the new MacBook with M1 since it seems to be a really powerful computer. However, I cannot get the NDI runtime/plugin to work with OBS. OBS works perfectly fine, but it cannot detect the NDI plugin/runtime. I suspect this is because of Rosetta, but I am not experience with this at all. Is there anything I can do to make this work, or is there plans to support the Apple Silicon?
Thanks!
Edit: Dug into it a little further. It appears the only issue may be that the CPU is "unsupported". So I don't know if there is anything I can do to bypass that, or if we can include the Apple M1 CPU in the next version.

I found a fix! I followed a video (Spanish) and it worked!
https://youtu.be/oHJHM6DMNJ4
For those who don't speak Spanish, the video has you download OBS Studio, the NDI Plugin, and NewTek's "NewTek NDI Video Monitor" (I personally downloaded the whole tool package).
Once those are all downloaded and installed, Go to "Applications" in Finder and right clicking on the Video Monitor app...
Show Package Content > Contents > Frameworks
then open a second Finder Window and on the Menu Bar, click...
Go > Go to Folder
and enter...
/usr/local/lib/
Now with both Finder windows open, hold down the command button and drag the "libndi.4.dylib" file into the "lib" folder. (make sure to move the file by holding command and not just making an alias, or it won't work)
Once the "libndi.4.dylib" file is in the "lib" folder, restart the mac and it should work.
Happy Streaming All!!

This just allows us to add NDI sources in OBS right but we still can't send an NDI signal out of OBS?
Would this method work with the "libndi_embedded.4.dylib" from NDI Virtual Input to enable NDI out from OBS? Sorry, I can't try it. My M1 Mac Mini is still on order.

@jmantaiwan yes you can. There will be an NDI option under the tools menu. I use it all the time.

@bufanda Fantastic! Thank you for confirming that!

Does anyone know if the libndi.dylib file that needs replacing in /usr/local/lib is installed when installing the ndi-runtime ndi-runtime-4.5.1-macOS?

If so, would updating the ndi-runtime installer to use the correct version of libndi.dylib solve this issue without needing to manually replace the dylib file?

im stuck at this screen. Iv selected in OBS Link but still no good. Im Using Elgato HD60S
Screen Shot 2021-04-23 at 2 22 17 PM

same issue on my M1 Macbook Pro!

has anyone figured a solution yet?

commented

I just accepted that Elgato just doesn’t care enough. I moved on. If anyone wants to buy a never really used Elgato HD60 let me know.
I use now a Blackmagic mini recorder (the new version with USB-C) and it works good. Even though Blackmagic are also dickheads to deal with when it’s about OSX… and sometimes video just doesn’t show up and you have to unplug and plug it back in a few times. But it works.
Just a side note here I bought the HD60 in 2017 and used it, never.

So yeah, fu elgato.

Response here: #675 (comment)