如何在保持低延迟的同时传输实时音频和视频

时间:2011-07-07 19:03:26

标签: c++ ffmpeg video-streaming live rtsp

我正在编写类似于StreamMyGame的程序,其中客户端是免费的,更重要的是开源,所以我可以将它移植到其他设备(在我的情况下是一个OpenPandora),甚至可以制作一个html5或flash客户端。

由于该计划的目标是流式传输视频游戏,因此延迟应降至最低

现在我可以以固定的帧速率捕获Direct 3D 9游戏的视频,使用libx264对其进行编码并将其转储到磁盘,并远程发送输入,但我很难发送视频并最终通过网络

我不想实现一种方法只是发现它引入了几秒钟的延迟,而且只要它完成就不关心它是如何完成的。

我可以想到几个方面:

  • 我目前使用libx264对视频进行编码,使用lame或ac3对音频进行编码,然后使用live555作为RTSP源进行编码,尽管该库与MSVC不兼容并且我仍在尝试了解其功能

  • 让ffmpeg库完成所有繁琐的工作,编码和发送(我想我必须使用ffserver来了解如何操作)

  • 相同但使用libvlc,可能会损害过程中的编码可配置性。

  • 将多个管道与独立程序一起使用(即:管道数据到x264.exe或ffmpeg.exe)

  • 使用可能简化流程的其他库,例如pjsipJRTPLIB

  • 艰难的方式,通过UDP通道发送视频和音频,并弄清楚如何在客户端同步所有内容(尽管使用RTSP的原因是为了避免这种情况)。

  • 你的方式,如果我没有想到什么。

第二个选项真的是最好的,因为它会减少库的数量(集成swscale,libx264,音频编解码器和发送器库),简化开发并带来更多的编解码器种类(CELT看起来很有前途)但我担心关于延迟,因为它可能有更长的管道。

100毫秒已经太多了,特别是当您考虑在通过宽带使用时可能会增加150毫秒的延迟。

你们是否有使用这些库的经验,建议我切换到ffmpeg,继续摔跤live555或做其他事情(即使我没有提到它)?

1 个答案:

答案 0 :(得分:0)

我使用UDT4库以低延迟流式传输大块数据,效果非常好。但首先我建议检查ffmpegs网络功能,以便在所有操作中都有原生解决方案。