0

我正在尝试使用 Xuggler 库在 Java 中对 FLV 文件进行转码,该库有两个流:
流 0:视频、H264 avc1
流 1:音频、AAC、mp4a

现在,getNumStreams()对输入容器的调用返回 2 个正确的流。
出现我的问题是因为两个流都有类型CODEC_TYPE_UNKNOWN而不是CODEC_TYPE_VIDEO/AUDIO。

因此我的代码在这里:
stream.getStreamCoder().getCodecType().equals(ICodec.Type.CODEC_TYPE_AUDIO)
从不真正匹配特定的流。

我试图手动为流 2 分配一个流,但是当我从 中查询编解码器时IStreamCoder,它为空。CodecID相同的IStreamCoder是正确CODEC_ID_AAC的,编解码器类型CODEC_TYPE_UNKNOWN正如我上面提到的。

现在我的问题是,为什么这些流被标记为未知而不是正确的音频/视频?这段代码完美地适用于大多数其他格式,例如 mp4 容器。我的总体目标是提取音频流进行转码。

请告知您是否需要一个示例代码段来更好地回答这个问题,因为我必须剪掉很多我必须制作的东西。


编辑:我认为这不是 Xuggler 问题,因为我尝试使用 VLC 转换有问题的 FLV,并且 VLC 在转换时崩溃,而我尝试将一个已知的工作 mp4 文件转换为 mp3 并且它通过了

4

1 回答 1

0

找到答案:
我使用以下方法打开文件,因为它阻塞了所有其他文件(mp4 等)并导致程序崩溃。

if (input.open(file.getName(), IContainer.Type.READ, null, false, false) < 0)

虽然这适用于所有其他文件,但它不会在整个文件中搜索 FLV 流信息。
我将其修改为:

if (input.open(file.getName(), IContainer.Type.READ, null) < 0)

现在它可以正常工作了。从现在开始应该只是处理flv文件的简单条件。

于 2012-12-13T14:03:14.250 回答