使用C++进行视频流传输

11

我将会使用C++编写一个应用程序,生成一系列图片并将它们作为视频流发送给另一个应用程序。您有什么建议从哪里开始吗?我的意思是,我应该使用哪些库以及什么编码方式?我正在考虑使用MJPEG和UDP或RTP作为协议...任何帮助都将不胜感激。

3个回答

8
如果您的输入数据仅是一堆随机图像,而不是视频,则无法进行“视频流传输”。您只需要发送一堆完整的图像,而不需要涉及视频编码技术,只需尽可能简单地传输图像即可。视频编码器依赖于每个帧与先前帧之间具有各种关系,这在实际视频中很常见。对于随机图像的输入,它们无法压缩太多,并且单帧压缩(例如JPEG / PNG / whatever)很可能已经应用于您的输入数据。
最简单的方法可能是发送每个文件的内容,以及原始文件名,并让接收客户端在磁盘上重新创建文件,并使用现有的面向磁盘的库打开和解码图像。
您应该只使用TCP进行此操作,没有任何要求表明您需要使用更复杂且容易出错的基于UDP / RTP的解决方案。

2
异常情况是“动态JPEG”(MJPEG),它实际上只是一系列带有小标题的JPEG压缩帧。我的佳能数码相机以这种格式捕获视频。 - Greg Hewgill
除了压缩类型之外,一堆图像和视频流之间的区别在于视频流具有时间同步。 - Kirill V. Lyadvinsky

6
对于流媒体部分,您可以使用Live555。它应该涵盖您所需的所有内容。这仍然留下了生成MJpeg流的问题。我只能猜测,FFMpeg可能是您要寻找的(因为我看到它还涵盖流媒体,因此您可能只需要这一个)。 我认为MJpeg非常适合您的应用程序。至于TCP或UDP,则取决于您想如何使用它。如果您想使流媒体成为多播,则UDP很有意义,否则我更喜欢TCP,因为它更可靠。
希望这些提示对您有用。

0
使用FFmpeg库对流进行编码,并使用RTP/RTSP协议栈进行流传输。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接