2012-12-13 44 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文件的簡單情況。