FLV格式规范在此处:http://www.adobe.com/content/dam/Adobe/en/devnet/flv/pdfs/video_file_format_spec_v10.pdf
1)FLV主体由标签
组成2)每个标签由标题和数据
组成 3)数据可能是AUDIODATA
或VIDEODATA
4)AUDIODATA
由描述符字节和音频帧组成。
我的问题是:用Xuggler阅读FLV时IPacket
中的内容是什么?
目前我在代码中从AUDIODATA
中提取音频帧。我分析第一个字节,推断格式,剪切其他数据,将其包装到IPacket
并将其发送到IStreamCoder
解码器,该解码器采用推导格式设置。
但可能我可以把这个委托给Xuggler?也许我可以创建FLV格式的IContainer
并从中查看数据包?
假设我将InputStream
传递给IContainer
。这个流可以只包含FLV体吗?它会正确提取音频包吗?
答案 0 :(得分:1)
Xuggler中的IContainer对象将解析FLV流并使用它来确定容器中的IStream。然后,当您从IContainer读取每个数据包时,请检查IPacket#getStreamIndex()值。这为您提供了流#,然后您可以在IContainer上使用它来获取带有元数据的IStream对象。
IPacket#getData()方法将返回音频的有效负载,但不返回任何头字节。这是因为IContainer / IStream对象占用了这些字节(并且它们不能通过Xuggler独立访问)。
所有这一切都有效,因为IContainer委托FFmpeg的libavformat C代码完成解析FLV流的工作(由VLC,mPlayer和各种其他库使用)。
希望有所帮助,
技术