0

FLV 格式规范在这里: http: //www.adobe.com/content/dam/Adobe/en/devnet/flv/pdfs/video_file_format_spec_v10.pdf

1) FLV body 由标签组成

2)每个标签由header和data组成

3) 数据可能是AUDIODATAVIDEODATA

4)AUDIODATA由描述符字节和音频帧组成。

我的问题是:IPacket使用 Xuggler 阅读 FLV 时有什么内容?

AUDIODATA目前我确实从我的代码中提取音频帧。我分析第一个字节,推断格式,切割其他数据,将其包装IPacket并发送给IStreamCoder解码器,解码器设置为推断格式。

但是我可以把这个委托给 Xuggler 吗?可能我可以创建IContainerFLV 格式并从中窥视数据包吗?

假设我InputStream通过IContainer. 这个流可以只包含 FLV 正文吗?它会正确提取音频数据包吗?

4

1 回答 1

1

Xuggler 中的 IContainer 对象将解析 FLV 流并使用它来确定容器中的 IStream。然后,当您从 IContainer 读取每个数据包时,检查 IPacket#getStreamIndex() 值。这将为您提供流#,然后您可以在 IContainer 上使用它来获取带有元数据的 IStream 对象。

IPacket#getData() 方法将返回音频的有效负载,但不返回任何标头字节。这是因为 IContainer/IStream 对象吃掉了这些字节(并且它们不能通过 Xuggler 独立访问)。

所有这些都有效,因为 IContainer 委托给 FFmpeg 的 libavformat C 代码,该代码负责解析 FLV 流(由 VLC、mPlayer 和各种其他库使用)。

希望有帮助,

艺术

于 2012-04-04T14:03:15.167 回答