{"action":"created","issue":{"url":"https://api.github.com/repos/CasparCG/server/issues/1112","repository_url":"https://api.github.com/repos/CasparCG/server","labels_url":"https://api.github.com/repos/CasparCG/server/issues/1112/labels{/name}","comments_url":"https://api.github.com/repos/CasparCG/server/issues/1112/comments","events_url":"https://api.github.com/repos/CasparCG/server/issues/1112/events","html_url":"https://github.com/CasparCG/server/pull/1112","id":381872892,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMxNzMzOTE2","number":1112,"title":"NDI Producer and Consumer","user":{"login":"ianshade","id":9103996,"node_id":"MDQ6VXNlcjkxMDM5OTY=","avatar_url":"https://avatars0.githubusercontent.com/u/9103996?v=4","gravatar_id":"","url":"https://api.github.com/users/ianshade","html_url":"https://github.com/ianshade","followers_url":"https://api.github.com/users/ianshade/followers","following_url":"https://api.github.com/users/ianshade/following{/other_user}","gists_url":"https://api.github.com/users/ianshade/gists{/gist_id}","starred_url":"https://api.github.com/users/ianshade/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ianshade/subscriptions","organizations_url":"https://api.github.com/users/ianshade/orgs","repos_url":"https://api.github.com/users/ianshade/repos","events_url":"https://api.github.com/users/ianshade/events{/privacy}","received_events_url":"https://api.github.com/users/ianshade/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":3,"created_at":"2018-11-17T15:28:34Z","updated_at":"2018-12-14T12:30:24Z","closed_at":null,"author_association":"NONE","pull_request":{"url":"https://api.github.com/repos/CasparCG/server/pulls/1112","html_url":"https://github.com/CasparCG/server/pull/1112","diff_url":"https://github.com/CasparCG/server/pull/1112.diff","patch_url":"https://github.com/CasparCG/server/pull/1112.patch"},"body":"I've been working on an NDI Producer and Consumer, and here are the results.\r\n[NDI Redistributable](http://new.tk/NDIRedistV3) version 3.7 or later is required.\r\n\r\nFeatures and how it currently works:\r\n\r\n- **NDI Find working in background allowing for faster connection to sources.** \r\nParameter `configuration.ndi.auto-load` lets you choose to load the library as soon as the server starts, otherwise it is loaded with the first NDI producer or consumer you add so you may experience multiple seconds of delay with the first source you connect to.\r\n\r\n- **Custom Consumer names** (`name` parameter)\r\nIf not set, they're \"CasparCG\", \"CasparCG 1\", ...\r\n\r\n- **Optional interlaced output** (`allow-fields` parameter)\r\nIf set to true and the channel is interlaced, the video is sent in interlaced mode.\r\n\r\n- **Currently receives and sends in BGRA/BGRX format only**\r\nNDI library performs any conversions if needed (pixel format, deinterlacing, audio resampling), but it is worth noting that UYVY support without any conversion overhead is on the TO-DO list as UYVY is considered the preferred and more optimal pixel format for NDI. \r\n\r\n- **It uses NDI's FrameSync in the Producer**\r\nThis may be beneficial and it was definitely the easiest way to implement the Producer, but cases like playing a 25p source on a 50p channel need to be tested as I sometimes experienced some framerate related issues - if it won't work reliably this way, I'll try to rewrite it. A question here: is `receive_impl` expected to return a frame immediately or can memcpy be performed there?\r\n\r\n- **Windows only**\r\nI built and tested it on Windows only, but dynamic loading is already prepared to support other OS-es so, with minor updates to cmake stuff, it should work. \r\n\r\nI'm looking for any feedback, advice and ideas."},"comment":{"url":"https://api.github.com/repos/CasparCG/server/issues/comments/447311323","html_url":"https://github.com/CasparCG/server/pull/1112#issuecomment-447311323","issue_url":"https://api.github.com/repos/CasparCG/server/issues/1112","id":447311323,"node_id":"MDEyOklzc3VlQ29tbWVudDQ0NzMxMTMyMw==","user":{"login":"ianshade","id":9103996,"node_id":"MDQ6VXNlcjkxMDM5OTY=","avatar_url":"https://avatars0.githubusercontent.com/u/9103996?v=4","gravatar_id":"","url":"https://api.github.com/users/ianshade","html_url":"https://github.com/ianshade","followers_url":"https://api.github.com/users/ianshade/followers","following_url":"https://api.github.com/users/ianshade/following{/other_user}","gists_url":"https://api.github.com/users/ianshade/gists{/gist_id}","starred_url":"https://api.github.com/users/ianshade/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ianshade/subscriptions","organizations_url":"https://api.github.com/users/ianshade/orgs","repos_url":"https://api.github.com/users/ianshade/repos","events_url":"https://api.github.com/users/ianshade/events{/privacy}","received_events_url":"https://api.github.com/users/ianshade/received_events","type":"User","site_admin":false},"created_at":"2018-12-14T12:30:24Z","updated_at":"2018-12-14T12:30:24Z","author_association":"NONE","body":"The ivga implementation was left with comparison, testing and fallback in mind but probably should be removed when the new thing will get tested and ready to be pulled in. \r\n\r\n- `PLAY 1-10 ndi CasparCG` should be `PLAY 1-10 ndi \"PC-NAME (CasparCG)\"`\r\n- Currently sources are added by name only and it is as strong as the `ndi://...` url so there should not be any problems with finding sources because of it, but I'll add url support to make `PLAY 1-10 ndi://...` possible. In earlier versions of the SDK it was possible to add by IP address but it got deprecated.\r\n- I'm working on available sources listing command, but it won't be possible to add sources based on numbers on that list or something like this because they could change over time. \r\n- I'll try to setup Linux environment to look into other issues you mentioned and I'll check if they are present on Windows."}}
{"actor":{"display_login":"ianshade"}}