2015-01-09 32 views
2

我試圖在Lollipop版本上播放MKV視頻文件,但無法播放,儘管它​​在Kitkat版本中正常工作。MKV視頻文件不在棒棒糖上玩

我調試到如下問題的調查結果,

在功能ParseTrackEntry()

音頻,視頻和內容編碼的缺省跟蹤設置設置爲-1

如果的ID當前軌道不是視頻也不是音頻,而是類型content_encoding,軌道設置相應地更新。

在函數後面,根據軌道類型分析緩衝區,即如果軌道是視頻類型,則音頻軌道設置應該小於0,similarly if the track consist of audio the video track setting should be less than 0

但是,如果曲目由內容編碼類型組成,則還會檢查視頻,音頻和內容編碼曲目設置。

由於軌道的設置將在內容類型編碼的情況下被更新,在這裏

if (e.start >= 0) 
    return E_FILE_FORMAT_INVALID; 

當內容編碼支票取出失敗MKV文件成功播放。

我的文件有一個video軌道,一個audio軌道和多個subtitles。可能是什麼問題?請幫忙。

回答

2

我認爲這個問題可能是由於mkvparser.cpp缺少檢查。在ParseTrackEntry中,一旦識別出TrackEntry,則在video分組中存在對audio存在的檢查,反之亦然。

儘管Matroska file specification(參考:第21頁,表8之前的評論)指出這也是允許的,但是當前的實施報告了錯誤。

TrackEntry元素不是videoaudiosubtitlemetadata,則方法ContentEncoding的處理必須是很清楚的。 line中的支票有效期爲metadata。但是,對於subtitle軌道,規範顯示ContentEncoding元素可以存在(參考:上面標準的第24頁)。

因此,這種檢查可能應該成爲

if((info.type == Track::kMetadata) && (e.start >= 0)) 
    return E_FILE_FORMAT_INVALID; 

隨着這一變化,爲subtitle軌道與ContentEncoding,加工會繼續和你的文件應該回放。

P.S:如果他們同意此更改,我們可能需要與Google聯繫。

+0

感謝Ganesh的解釋。我嘗試了上面的檢查,它的工作正常。 – user3639587

+1

更改合併:https://gerrit.chromium.org/gerrit/#/c/73474/ 感謝您對此問題進行調試 –

+0

@LajosMolnar ..謝謝。很長時間後很高興收到你的來信:) – Ganesh