C++ 使用libav库打包视频

C++ 使用libav库打包视频,c++,libav,C++,Libav,我正在尝试制作一个使用libav库的视频流服务器和客户端应用程序 我希望服务器只需逐帧读取视频并将帧放入数据包中,然后将其发送到客户端。当然,客户端必须能够从数据包中读取帧 我该怎么做?有教程吗 我使用的是Ubuntu 11.04机器。我现在正在处理相同的问题。您可能希望尝试查看Live555LiveMedia库。 您可以使用该库来流式传输mp3、h264视频、mpeg等,它使用UDP和RTSP,因此非常方便视频的实时传输。 ffmpeg附带的FFPlay应用程序(包括libavformat等

我正在尝试制作一个使用libav库的视频流服务器和客户端应用程序

我希望服务器只需逐帧读取视频并将帧放入数据包中,然后将其发送到客户端。当然,客户端必须能够从数据包中读取帧

我该怎么做?有教程吗


我使用的是Ubuntu 11.04机器。

我现在正在处理相同的问题。您可能希望尝试查看Live555LiveMedia库。

您可以使用该库来流式传输mp3、h264视频、mpeg等,它使用UDP和RTSP,因此非常方便视频的实时传输。 ffmpeg附带的FFPlay应用程序(包括libavformat等)可以播放RTSP流。你做的事情

avformat_open_输入(&p格式发送)rtsp://192.168.1.1/someFile.264,NULL,&optss)

您可以更改流式RTSP示例以插入编码器输出(可能类似于x264),以便在编码后立即发送内容。(请看常见问题解答(http://www.live555.com/liveMedia/faq.html)


如果您有预先录制的视频,它会简单得多,您只需提供视频文件,它就会为您完成工作。

我明白了。非常感谢您的提示,先生!不客气。顺便说一下,如果您不关心及时交付和播放控制(回放、暂停、跳过等)您可以只使用普通tcp套接字,而不使用live555。如果您执行以下操作,Ffmpeg也支持此功能:tcp://192.168.1.1:9001"。流媒体服务器只需要监听套接字连接,连接后只需发送视频文件,如果您愿意的话,逐帧发送。我刚刚这样做了,它也可以工作。如果这听起来很像noob问题,很抱歉,但为什么这会成为一个不及时的交付?是因为套接字是tcp(握手和其他方式)吗?RTSP使用UDP,不保证所有帧的传输。有时,由于带宽有限、延迟可变、拥塞(tcp),您只能跳过帧,等等。RTSP是视频直播中使用的,当您尽可能接近实时而不是只能等待和缓冲时,这一点很重要。它还提供了在流视频上执行搜索操作的可能性。