java - Xuggler的IPacket如何与FLV标签或标签部分对应?

标签 java audio ffmpeg flv xuggle

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

1)FLV主体由标签组成

2)每个标签由 header 和数据组成

3) 数据可以是AUDIODATAVIDEODATA

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

我的问题是:使用 Xuggler 读取 FLV 时,IPacket 中包含什么?

目前,我确实从代码中的 AUDIODATA 中提取音频帧。我分析第一个字节,推导格式,剪切其他数据,将其包装成 IPacket 并将其发送到 IStreamCoder 解码器,该解码器是按照推导的格式设置的。

但是我可以把这个委托(delegate)给 Xuggler 吗?也许我可以创建 FLV 格式的 IContainer 并从中查看数据包?

假设我将 InputStream 传递给 IContainer。该流可以仅包含 FLV 正文吗?它能正确提取音频数据包吗?

最佳答案

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

IPket#getData() 方法将返回音频的有效负载,但不返回任何 header 字节。这是因为 IContainer/IStream 对象会占用这些字节(并且无法通过 Xuggler 独立访问它们)。

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

希望有帮助,

艺术

关于java - Xuggler的IPacket如何与FLV标签或标签部分对应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9997241/

相关文章:

java - 如何使用 FFmpeg 调整 yuv420sp 的大小

java - 在字符串中查找子字符串的位置(不是 indexOf)

java - 如何在java中使用字节?

java - 使用android XmlPullParser解析XML文件的性能问题

android - 使用 Android 服务的音频逐帧动画

javascript - 通过 JavaScript 使用 HTML5 音频标签

node.js - 在 fluent-ffmpeg 上连接音频和视频

java - 检查编辑文本中的空值

java - 为什么音频文件听起来不同?

ffmpeg 创建一个 mp4 流,导致 Firefox 出错