我正在尝试编写一个相当简单的应用程序,它将视频/音频从网络摄像头流传送到互联网上的其他人(ala Skype但是有更多的控制)。
关于这个主题的有用/相关信息似乎很少,而且我能找到的大部分都是过时的。根据我到目前为止的研究,x264 seems to be the way to go提供了一个ultrafast选项,它就是为这种情况设计的
我可以打开摄像头,接收到一连串的图像。我还可以在音频设备上收听并获取样本。
我失败的地方是以一种能够以最小延迟流传输的方式对信息进行编码(据我所知,200ms延迟是没有明显延迟的目标,包括网络延迟-所以我们的目标是100-150ms)
我试过的东西
ffmpeg
这似乎是最广泛使用的编码选项。我在使用它时遇到了两个真正的问题。首先,即使使用不带look-ahead和最小缓冲区以保证稳定性的x264,使用image2pipe的延迟似乎也在700ms左右。其次,它需要安装ffmpeg -能够在没有外部依赖的情况下做到这一点将是很好的。
VLC
与ffmpeg一样,这需要一个外部程序,该程序是负的。更糟糕的是,我似乎不能获得低于2秒的延迟,这似乎随着时间的推移而增加。我也只能让VLC捕捉相机本身,而不是拍摄图像流,这意味着我没有机会对它们进行预处理。
DirectShow
我看过许多网站推荐使用windows的直接显示编码器,但我还没能找到一个能实时工作的。事实上,我唯一能够可靠运行的是Windows Media编解码器,它具有巨大的延迟和相当大的尺寸。
其他注意事项
上述方法都不能解决向视频添加音频流的问题。我不确定我是否应该尝试将它们编码在一起,或者在视频旁边发送一个单独的流。
简而言之,我已经在谷歌上搜索了一周左右,还没有找到一个合适的方法来做到这一点。有人能给我指个像样的例子/指南吗?
发布于 2013-12-27 17:01:46
一种方法是通过DirectShow或者甚至是Video for Windows来使用x264vfw。这个编解码器有“零延迟”选项,它基本上在“帧内-帧外”模式下工作。我描述了如何在DirectShow应用程序here中减少x264编码延迟。
https://stackoverflow.com/questions/20794021
复制相似问题