2012-12-13 46 views
0

我试图使用Xuggler库,其中有两个数据流进行转码的FLV文件在Java中:
流0:视频,H264 AVC1
流1:音频,AAC,MP4AXuggler阅读某些FLV文件

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

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

我试图手动分配一个流到流2通过罚款但是当我查询IStreamCoder编解码器,它是空的。 CodecIDIStreamCoder是正确的CODEC_ID_AAC,编解码器类型是CODEC_TYPE_UNKNOWN,正如我上面提到的那样。

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

请告诉你是否需要一个示例代码段来更好地回答这个问题,因为我不得不剪掉一些我必须产生的东西。


编辑:我认为这不是一个Xuggler的问题,因为我试图在转换时使用VLC和VLC崩溃来转换问题FLV,而我尝试了一个已知的工作mp4文件转换为MP3,并通过罚款

回答

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文件的简单情况。