流视频在c++

Stream Video in C++?

本文关键字:c++ 视频      更新时间:2023-10-16

我有两台机器按如下方式编码/解码数据包:它们在第一台机器上读取和编码,发送到第二台机器,然后在第二台机器上解码。这是为了防止损失。

我想通过视频测试来演示代码:理想情况下,视频是用网络摄像头实时录制的,动态编码/解码,然后解码的结果在单独的屏幕上播放。

我能找到的最接近的资源是这个链接,它既过时又看起来不完整。

特别是,当我从OpenCV读取帧时,我认为我必须将其分成小块,以便我可以编码它们,通过UDP套接字发送它们,然后解码它们。此外,在客户端,我应该能够接受这些解码的数据并将其作为视频流输出。然而,我不确定1)将数据划分为数据包的最佳方法和2)如何从接收到的数据包中重构帧。如果你能给我指一些相关的资料,那就太好了。谢谢!

听起来不像你在编码/解码数据包?你是如何"编码"的?他们吗?你指的是网络编码吗?

编码的行为,例如使用H.264编解码器压缩数据包,使其更容易通过网络发送。即使您想要提出一些基于网络编码的错误恢复,您也应该对压缩视频数据执行操作。

其次,实时传输协议(RTP或RFC3550)和编解码器特定的有效载荷格式(例如RFC6184)已被指定用于解决1)如何将压缩视频帧拆分为多个RTP数据包(如有必要,即压缩数据包大小>(2)如何在接收端重构它们。

它们还解决了许多其他问题,如数据包重排序,媒体同步,报告/计算接收器质量,如丢失,抖动,RTT等。

正如@Hobo Sapiens指出的那样,当人们花了很多时间想出经过测试的解决方案时,为什么要重新发明轮子呢?在这种情况下,我认为RTSP有点过头了。(它为会话设置和控制提供信令)

您可以硬编码端口,在一台机器上设置RTP/UDP接收器,在另一台机器上设置RTP发送器。

此外,有一些很棒的开源库已经实现了RTP/RTCP RTSP,例如live555,您可能想在推出自己的库之前看看它们。正确地实现这些标准需要花费大量的时间和精力。

编辑我怀疑走标准路线可能太费力,或者您可以从RTP规范中获取可用的部分,例如序列号(允许您重新排序数据包并检测丢失),以及RFC6184规范中的NAL单元碎片,并构建自己的自定义头,为您提供所需的最小功能。