现有 VoIP 系统的视频流 - 应该使用哪些库?
Posted
技术标签:
【中文标题】现有 VoIP 系统的视频流 - 应该使用哪些库?【英文标题】:Video stream for existing VoIP system - which libraries should be used? 【发布时间】:2014-01-10 08:01:16 【问题描述】:我目前正在进行的项目需要对现有的 VoIP 功能进行补充。语音处理的核心是 C 语言,其余部分是带有 Qt 的 C++ - 音频是通过 portaudio 处理的。用户之间的连接目前是通过 UDP 建立的,我认为必须针对计划的视频连接进行更改。开发平台是Windows on VS2012,但系统是跨平台的。
简而言之,我想做的是:从网络摄像头获取视频信号,同步来自 C 核心的音频和来自网络摄像头的视频,并使用库和编解码器对双方并通过 RTP 发送。该系统应该能够进行多播传输。
我对可能的库进行了一些研究,并偶然发现了 ffmpeg 和 libVLC。对于我考虑使用 x264 的编解码器。如果我是正确的,ffmpeg 和 libVLC 都应该能够满足我的需求?
但是我不确定要选择哪一个,而且我真的无法从他们的文档中提取出哪个库更合适。有没有人遇到过类似的问题并且可以帮助我 - 在视频处理和编码方面,我是一个新手。
额外问题:您对同步视频和音频信号有任何提示或方法吗?
【问题讨论】:
您可以编写一个抽象层,让您可以轻松切换后端或比较它们的性能/适用性。我希望任何一个库都可以接受。您将遇到的主要问题是许可证,特别是如果使用 x264 进行编码,因为它在 GPL 下,这意味着您的整个应用程序都需要获得 GPL 许可。 抽象层似乎是个好主意。我认为 x264 的许可会有问题。所以 WebM/VP8 作为编解码器将是一个解决方案,我猜?那么FFmpeg可以在LGPL下和libvpx一起使用吗? 是的,您可以使用 VP8(或 VP9),我认为您仍然可以使用 ffmpeg 的 lgpl 变体解码 h.264,但不能对其进行编码,因为这需要 x264。当然,除非你准备好 GPL 你的应用程序。 同步方面,将视频演示时间戳(PTS)同步到音频流中。 【参考方案1】:如果有人感兴趣,这就是我最终要做的:
我正在使用 WebM 容器格式,目前使用带有 Vorbis 的 VP8(但如果脱离测试版,很快就会更改为带有 Opus 的 VP9),由 ffmpeg/libav 库处理,用于编码/解码/复用等,SDL 用于显示和穿线。 ffmpeg/libav 在 Unix 上交叉编译,支持 LGPL,以保持我们的项目闭源。
【讨论】:
以上是关于现有 VoIP 系统的视频流 - 应该使用哪些库?的主要内容,如果未能解决你的问题,请参考以下文章
VoIP:如何在 Qt 多媒体中从摄像头捕获实时音频/视频流字节?