VP8 / VP9 RTP库

时间:2013-07-07 08:36:21

标签: rtp vp8 libvpx

是否有任何现有的库可以促进通过RTP传输VP8 / VP9流?

我找到了VP8(http://tools.ietf.org/html/draft-ietf-payload-vp8-08)的RFC草案,但没有提到VP9编解码器(太近了?)。 似乎libavformat实现了这个草案。有没有其他选择?

2 个答案:

答案 0 :(得分:3)

Mediastreamer2可以为您做到这一点。它用于支持VP8的Linphone。

答案 1 :(得分:0)

从GStreamer 1.8.2开始(可能更旧,但1.8.2或更高版本会让您的生活更轻松),这一切都可以使用GStreamer本身完成。你应该忽略ffmpeg和libav(同样的事情 - 项目有分裂)交叉插件。

你需要gstreamer,gst-plugins-base,gst-plugins-good和gst-plugins-bad的源代码。不要使用gst-plugins-ffmpeg,libav等,所有这些建议都是旧的。 (对于h.264 / h.265,你可能仍然需要它,但那是另一个混​​乱。)你还应该获得libvpx的源代码,最好是版本1.6.0。熟悉并熟悉从automake构建这些项目。特别是GStreamer具有非常干净的配置脚本;学习如何有效地使用它们。

重要的是不要混用和匹配0.10系列和1.8.2系列代码,但是,因为VP8的RFC在此期间被批准(因为它们是Opus,如果您正在使用它音频,我推荐),以及一些在SDP文件中使用的魔术字符串已经改变。

但是,你应该知道仍有一些松散的目的。

特别是,如果您使用SDP文件来驱动所有这些内容,请注意使用" sdpdemux"自动生成图表。仍有一些局限性。首先,股票sdpdemux没有" rank",因此不会自动处理类型" application / sdp"。您应该构建一个自定义应用程序来构建图形 - 这个过程有一点学习曲线。

你应该对插件的分支副本开放并调整它们,因为这通常会增加很多灵活性而不需要太多努力,但要注意复制的插件需要进行大量的令牌名称更改,以避免冲突使用现有的插件,必须小心,以确保插件仍然有效。

我建议您彻底熟悉以下GStreamer组件:

vp8dec vp8enc vp8parse(注:见下文) matroskamux matroskademux 队列 rtpbin rtpjitterbuffer sdpdemux udpsink udpsrc videoconvert

...以及至少一个现代音频编解码器的匹配材料(我推荐Opus,所以," opusdec"和" opusenc")。

注意" vp8parse"以上。这可以从" kotaku"项目,您可能需要也可能不需要它。如果你想在粒度级别处理vp8视频 - 跳过它而不实际解码它等等 - 你可能需要它。某些类型的非线性编辑应用程序肯定需要这个。从GST 1.8.2开始,它尚未合并到主线GStreamer代码库中。

作为保持理智的一个特定点,不要在不了解您正在进行的操作的情况下通过RTP使用VORBIS进行音频流。 Vorbis和Theora使用"动态码本" - 内容相关的压缩词典,它们随被压缩的材料而变化。这意味着解码器神奇地需要知道编码器提供了什么作为码本,但你没有文件头,因为你正在流式传输。有办法解决这个问题,但它们并不令人愉快。如果您沿着尝试将其堵塞到SDP文件中以便在远程端进行恢复的路径,我建议您确定一种您可以容忍的低成本苏格兰威士忌。

还有一些其他问题需要警惕。

请勿使用任何"幻想"压缩设置,如果您希望在硬件加速的嵌入式系统上进行解码,除非您拥有非常完整的QA资源。并非所有技术上有效的流都将在所有硬件加速解码器中解码。特别是"弹性"选项非常诱人且非常有效,但会破坏IMX6目标的加速解码。

如果没有非常重大的妥协,VP8编码就无法实时进行。可能需要一些时间来了解这些是什么以及它们如何工作。进入这个问题超出了这个问题的范围,除了你可以很容易地认为当你实际上没有足够快地获得数据到你的udpsink时你的发射机坏了的问题。别担心,可以做到,但你需要做你的研究。首先看看"截止日期" libvpx的选项。

最后,我强烈建议您特别关注RTP中的VP8,RTP,VP8有效载荷,SDCP中的RTCP(R-T-C-P,非RTP,而不是TCP),SDP,VP8流。每个特定问题都有几个RFC。请确保您正在寻找当前的,而不是DRAFTS!有一些非常重大的变化。

当您熟悉您的规格和工具时,您将会意识到我现在要总结的三点:

  1. 你不能用gst-launch做任何事情,但如果可以的话,它可以节省大量的时间。

  2. 您可以使用自定义应用程序完成所有工作,但学习曲线非常重要,开发时间也很长。

  3. 有很多人在编写官方RFC时,只测试过他们正在撰写的材料的奇怪的使用案例,特别是在多媒体方面。

  4. 祝你好运!