我有一个应用程序从内容类型为application/x-mms-framed
的Windows Media Server接收流式音频。该应用程序将删除数据成帧的流通到gstreamer的管道等之前:使用gstreamer解码实时WMA/MMS流
gst-launch fdsrc ! asfdemux ! fakesink
(当然,通常的管道将通常包括一个WMA解码器和其他的东西 - 这仅仅是为了说明所需要的最小问题)。
我可以从该ASF解析与第二数据包出错的调试输出中看到:它试图用超越它实际上是从哪里开始+3字节偏移读取它。
从调试输出某些数据:
- 初始标头包($ H从成帧的流)是5027个字节,并且似乎是正确分析。最小包大小为1567.
- 以下每个数据包(来自成帧流的$ D)都包含1564个字节。
我认为问题在于ASF分流器对每个数据包都使用固定的min-packet-size值1567,尽管它认识到实际数据包包含的数据较少。它将额外的3个字节视为隐式填充,并(有效)跳过它们,而不是减小要使用的数据包大小。
这可能是因为我的代码,它只是不知何故条框还需要通过实际的帧大小。也许有一种使用gstreamer的缓冲区传递机制的方法,在这种情况下,我需要编写一个gstreamer插件来完成非帧化。这样的插件将转换为application/x-mms-framed
- >video/x-ms-asf
。我希望找到一个现有的插件,可以做到这一点,但迄今为止没有成功。
我在正确的轨道上或者这只是在ASF分路器(我怀疑不是我其实已经尝试了3个不同的ASF流分离器插件)的错误吗?
我开发了一个补丁,`asfdemux`插件添加必要的支持。它可以在[https://bugzilla.gnome.org/show_bug.cgi?id=652946]找到。 – awy 2011-06-23 15:56:58