我正在编写类似于StreamMyGame的程序,其中客户端是免费的,更重要的是开源,所以我可以将它移植到其他设备(在我的情况下是一个OpenPandora),甚至可以制作一个html5或flash客户端。
由于该计划的目标是流式传输视频游戏,因此延迟应降至最低。
现在我可以以固定的帧速率捕获Direct 3D 9游戏的视频,使用libx264对其进行编码并将其转储到磁盘,并远程发送输入,但我很难发送视频并最终通过网络
我不想实现一种方法只是发现它引入了几秒钟的延迟,而且只要它完成就不关心它是如何完成的。
我可以想到几个方面:
我目前使用libx264对视频进行编码,使用lame或ac3对音频进行编码,然后使用live555作为RTSP源进行编码,尽管该库与MSVC不兼容并且我仍在尝试了解其功能
让ffmpeg库完成所有繁琐的工作,编码和发送(我想我必须使用ffserver来了解如何操作)
相同但使用libvlc,可能会损害过程中的编码可配置性。
将多个管道与独立程序一起使用(即:管道数据到x264.exe或ffmpeg.exe)
艰难的方式,通过UDP通道发送视频和音频,并弄清楚如何在客户端同步所有内容(尽管使用RTSP的原因是为了避免这种情况)。
你的方式,如果我没有想到什么。
第二个选项真的是最好的,因为它会减少库的数量(集成swscale,libx264,音频编解码器和发送器库),简化开发并带来更多的编解码器种类(CELT看起来很有前途)但我担心关于延迟,因为它可能有更长的管道。
100毫秒已经太多了,特别是当您考虑在通过宽带使用时可能会增加150毫秒的延迟。
你们是否有使用这些库的经验,建议我切换到ffmpeg,继续摔跤live555或做其他事情(即使我没有提到它)?
答案 0 :(得分:0)
我使用UDT4库以低延迟流式传输大块数据,效果非常好。但首先我建议检查ffmpegs网络功能,以便在所有操作中都有原生解决方案。