首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问同一DeckLink设备的多个应用程序(openCV和rtmp推送)?我有什么选择?

访问同一DeckLink设备的多个应用程序(openCV和rtmp推送)?我有什么选择?
EN

Stack Overflow用户
提问于 2020-08-27 08:18:34
回答 1查看 231关注 0票数 1

描述:

我有一个要求,我必须对来自DeckLink设备的单个摄像机流做两件事-- OpenCV处理和RTMP实时流。如果是相关的,设备是DeckLink 8K Pro。

DeckLink设备(一个特定端口)不允许多个应用程序访问视频流。我的两份申请是:

  • C++ OpenCV应用程序,它必须在视频流上运行图像处理算法。
  • 虚拟媒体服务器,它必须RTMP将流推送到远程端点,后者应该将流重新分发给客户端。

两个应用程序必须在同一个Windows工作站上运行。

问题:

如果其中一个应用程序正在运行,则它具有对视频流的独占访问权,而另一个应用程序无法读取该流,并且似乎没有解决此问题的方法。

因此,我真的在寻找一个聪明的解决方案,有些人可能已经实现,或有一个想法,可能对我有用。

到目前为止我的解决方案:

在该解决方案中,虚拟媒体服务器被FFMPEG所取代。

由于OP的努力必须投入解决方案,然后才在这里张贴,我已经浏览了可能的解决方案在过去一周。我想出了一个基于FFMPEG的解决方案,它是唯一一个读取DeckLink视频流并在一个命令中完成两件事情的应用程序--通过RTMP推送视频包并创建本地UDP流。而且,OpenCV的VideoCapture类能够获取UDP流。在测试方面,我使用了Twitch作为RTMP服务器,使用了VLC作为UDP测试器。它工作,它似乎是一个很好的解决方案,除了在UDP流中引入的延迟,大约是0.4秒。不幸的是,我无法评估RTMP延迟,因为Twitch自己引入了它自己的>5s延迟。但就目前而言,这不是一个问题。

这是FFMPEG解决方案(注意,我这里使用的是计算机摄像头,但DeckLink也是如此)。

斯特拉姆通过:

代码语言:javascript
复制
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

通过以下方式演奏:

代码语言:javascript
复制
ffplay -probesize 32 -sync ext udp://127.0.0.1:5555

我想知道你将如何改进我自己的解决方案,以更好地适应这个问题(例如,减少延迟),或者如果你有一个比我更好的解决方案。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-07 16:53:16

一旦流到达虚拟媒体服务器,您可以使用启动MPEG2 2-TS广播该流。然后,您的OpenCV的VideoCapture类将能够获得MPEG2 2-TS UDP流以及。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63611904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档