2015-01-09 3 views
2

Я пытался воспроизвести видео файл Lollipop, но не смог сыграть, хотя он работал правильно в выпуске Kitkat.MKV видеофайл не играл на Lollipop

Мои выводы по отладке в вопросе, как показано ниже,

В функции ParseTrackEntry()

настройки дорожек по умолчанию для аудио, видео и кодирования контента устанавливается на -1

Если идентификатор текущий трек не является видео или аудио, а типа 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, существуют проверки наличия audio в пакете video и наоборот.

Хотя значение Matroska file specification (Ref: Страница 21, комментарий перед таблицей 8) указывает, что это также допустимо, текущая реализация сообщает об ошибке.

Когда TrackEntry элемент не является video или audio т.е. subtitle или metadata, то путь ContentEncoding обрабатывается должен быть очень четким. Проверка в этом line действительна для metadata. Однако, для дорожки subtitle, спецификация показывает, что может присутствовать элемент ContentEncoding (Ref: Стр. 24 стандарта выше).

Таким образом, эта проверка должна, вероятно, станет

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

С этим изменением, для subtitle треков с ContentEncoding, обработка будет продолжаться и ваш файл должен воспроизвести.

P.S: Возможно, нам придется связаться с Google, если они согласны с этим изменением.

+0

Спасибо Ганешу за объяснение. Я пробовал с вышеуказанной проверкой и ее работой. – user3639587

+1

Изменения объединены: https://gerrit.chromium.org/gerrit/#/c/73474/ Спасибо за отладку этой проблемы –

+0

@LajosMolnar .. Спасибо.Приятно услышать от вас после долгого времени :) – Ganesh

Смежные вопросы