描述:
我有一个要求,我必须对来自DeckLink设备的单个摄像机流做两件事-- OpenCV处理和RTMP实时流。如果是相关的,设备是DeckLink 8K Pro。
DeckLink设备(一个特定端口)不允许多个应用程序访问视频流。我的两份申请是:
两个应用程序必须在同一个Windows工作站上运行。
问题:
如果其中一个应用程序正在运行,则它具有对视频流的独占访问权,而另一个应用程序无法读取该流,并且似乎没有解决此问题的方法。
因此,我真的在寻找一个聪明的解决方案,有些人可能已经实现,或有一个想法,可能对我有用。
到目前为止我的解决方案:
在该解决方案中,虚拟媒体服务器被FFMPEG所取代。
由于OP的努力必须投入解决方案,然后才在这里张贴,我已经浏览了可能的解决方案在过去一周。我想出了一个基于FFMPEG的解决方案,它是唯一一个读取DeckLink视频流并在一个命令中完成两件事情的应用程序--通过RTMP推送视频包并创建本地UDP流。而且,OpenCV的VideoCapture类能够获取UDP流。在测试方面,我使用了Twitch作为RTMP服务器,使用了VLC作为UDP测试器。它工作,它似乎是一个很好的解决方案,除了在UDP流中引入的延迟,大约是0.4秒。不幸的是,我无法评估RTMP延迟,因为Twitch自己引入了它自己的>5s延迟。但就目前而言,这不是一个问题。
这是FFMPEG解决方案(注意,我这里使用的是计算机摄像头,但DeckLink也是如此)。
斯特拉姆通过:
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我想知道你将如何改进我自己的解决方案,以更好地适应这个问题(例如,减少延迟),或者如果你有一个比我更好的解决方案。
提前谢谢。
发布于 2020-09-07 16:53:16
一旦流到达虚拟媒体服务器,您可以使用启动MPEG2 2-TS广播该流。然后,您的OpenCV的VideoCapture类将能够获得MPEG2 2-TS UDP流以及。
https://stackoverflow.com/questions/63611904
复制相似问题