多个应用程序访问同一个 DeckLink 设备(openCV 和 rtmp 推送)?我有什么选择?
Multiple applications to access the same DeckLink device (openCV and rtmp pushing)? What options do I have?
描述:
我有一个要求,我必须对来自 DeckLink 设备的单个摄像机流做两件事 - OpenCV 处理和 RTMP 直播。如果相关,设备就是DeckLink 8K Pro。
DeckLink 设备(一个特定端口)不允许多个应用程序访问视频流。我的两个申请是:
- C++ OpenCV 应用程序,必须运行视频流上的图像处理算法。
- Unreal Media Server 必须将流通过 RTMP 推送到远程端点,远程端点应将流重新分发给客户端。
这两个应用程序必须 运行 在同一个 Windows 工作站上运行。
问题:
如果其中一个应用程序是 运行ning,它可以独占访问视频流,而另一个应用程序无法读取流,并且似乎没有解决此问题的方法。
所以,我真的在寻找一个聪明的解决方案,你们中的一些人可能已经实施过或者有一个可能对我有用的想法。
我目前的解决方案:
在此解决方案中,Unreal Media Server 被替换为 FFMPEG。
由于 OP 的努力必须在发布之前投入到解决方案中,所以过去一周我一直在浏览可能的解决方案。我想出了一个基于 FFMPEG 的解决方案,这是唯一一个读取 DeckLink 视频流并在一个命令中完成两件事的应用程序——通过 RTMP 推送视频数据包并创建本地 UDP 流。而且,OpenCV 的 VideoCapture class 能够获取 UDP 流。为了进行测试,我使用 Twitch 作为 RTMP 服务器,使用 VLC 作为 UDP 测试器。它有效并且看起来是一个很好的解决方案,除了在 UDP 流中引入的延迟大约为 0.4 秒。不幸的是,我无法评估 RTMP 延迟,因为 Twitch 会自行引入 >5s 的延迟。但目前这不是问题。
这是 FFMPEG 解决方案(请注意,我在这里使用的是计算机网络摄像头,但 DeckLink 也是如此)。
Steram 来自:
ffmpeg -threads:v 2 -threads:a 8 -filter_threads 2 -thread_queue_size 512 -y -f dshow -video_size 640x480 -pixel_format yuyv422 -framerate 30 -rtbufsize 100M -i video="HD WebCam" -f dshow -rtbufsize 100M -i audio="Microphone Array (Realtek High Definition Audio(SST))" -preset ultrafast -vcodec libx264 -tune zerolatency -b 900k -map 0:v:0 -f mpegts udp://127.0.0.1:5555 -pix_fmt yuv420p -c:v libx264 -qp:v 19 -profile:v high -rc:v cbr_ld_hq -level:v 4.2 -r:v 60 -g:v 120 -bf:v 3 -refs:v 16 -f flv rtmp://live-fra05.twitch.tv/app/stream_key
播放方式:
ffplay -probesize 32 -sync ext udp://127.0.0.1:5555
我想听听您如何改进我自己的解决方案以更好地解决问题(例如,减少延迟),或者您是否有比我的更好的解决方案。
提前致谢。
流到达 Unreal Media Server 后,您可以使用 Unreal Media Server Configurator 开始 MPEG2-TS 广播该流。然后您的 OpenCV 的 VideoCapture class 也将能够获取该 MPEG2-TS UDP 流。
描述:
我有一个要求,我必须对来自 DeckLink 设备的单个摄像机流做两件事 - OpenCV 处理和 RTMP 直播。如果相关,设备就是DeckLink 8K Pro。
DeckLink 设备(一个特定端口)不允许多个应用程序访问视频流。我的两个申请是:
- C++ OpenCV 应用程序,必须运行视频流上的图像处理算法。
- Unreal Media Server 必须将流通过 RTMP 推送到远程端点,远程端点应将流重新分发给客户端。
这两个应用程序必须 运行 在同一个 Windows 工作站上运行。
问题:
如果其中一个应用程序是 运行ning,它可以独占访问视频流,而另一个应用程序无法读取流,并且似乎没有解决此问题的方法。
所以,我真的在寻找一个聪明的解决方案,你们中的一些人可能已经实施过或者有一个可能对我有用的想法。
我目前的解决方案:
在此解决方案中,Unreal Media Server 被替换为 FFMPEG。
由于 OP 的努力必须在发布之前投入到解决方案中,所以过去一周我一直在浏览可能的解决方案。我想出了一个基于 FFMPEG 的解决方案,这是唯一一个读取 DeckLink 视频流并在一个命令中完成两件事的应用程序——通过 RTMP 推送视频数据包并创建本地 UDP 流。而且,OpenCV 的 VideoCapture class 能够获取 UDP 流。为了进行测试,我使用 Twitch 作为 RTMP 服务器,使用 VLC 作为 UDP 测试器。它有效并且看起来是一个很好的解决方案,除了在 UDP 流中引入的延迟大约为 0.4 秒。不幸的是,我无法评估 RTMP 延迟,因为 Twitch 会自行引入 >5s 的延迟。但目前这不是问题。
这是 FFMPEG 解决方案(请注意,我在这里使用的是计算机网络摄像头,但 DeckLink 也是如此)。
Steram 来自:
ffmpeg -threads:v 2 -threads:a 8 -filter_threads 2 -thread_queue_size 512 -y -f dshow -video_size 640x480 -pixel_format yuyv422 -framerate 30 -rtbufsize 100M -i video="HD WebCam" -f dshow -rtbufsize 100M -i audio="Microphone Array (Realtek High Definition Audio(SST))" -preset ultrafast -vcodec libx264 -tune zerolatency -b 900k -map 0:v:0 -f mpegts udp://127.0.0.1:5555 -pix_fmt yuv420p -c:v libx264 -qp:v 19 -profile:v high -rc:v cbr_ld_hq -level:v 4.2 -r:v 60 -g:v 120 -bf:v 3 -refs:v 16 -f flv rtmp://live-fra05.twitch.tv/app/stream_key
播放方式:
ffplay -probesize 32 -sync ext udp://127.0.0.1:5555
我想听听您如何改进我自己的解决方案以更好地解决问题(例如,减少延迟),或者您是否有比我的更好的解决方案。
提前致谢。
流到达 Unreal Media Server 后,您可以使用 Unreal Media Server Configurator 开始 MPEG2-TS 广播该流。然后您的 OpenCV 的 VideoCapture class 也将能够获取该 MPEG2-TS UDP 流。