2015-01-09 2 views
2

비디오 파일을 Lollipop 릴리스에서 재생하려했으나 Kitkat 릴리스에서 올바르게 작동했지만 재생할 수 없었습니다.Lollipop에서 MKV 비디오 파일이 재생되지 않음

내 아래와 같은 문제로 디버깅에 대한 연구 결과, 기능에서

오디오, 비디오 및 콘텐츠 인코딩 ParseTrackEntry()

기본 트랙 설정은 -1

아이디의 경우, 설정 현재 트랙이 비디오 또는 오디오가 아니고 content_encoding 유형 인 경우 트랙 설정이 그에 따라 업데이트됩니다.

나중에 버퍼 유형이 트랙 유형에 따라 파싱됩니다. 즉, 트랙 유형이 비디오 인 경우 오디오 트랙 설정은 0보다 작아야합니다 (similarly if the track consist of audio the video track setting should be less than 0).

그러나 트랙이 콘텐츠 인코딩 유형으로 구성되어있는 경우 동영상, 오디오 및 콘텐츠 인코딩 트랙 설정에 대한 체크가 있습니다. 트랙 설정으로

이 유형의 콘텐츠 인코딩의 경우에 업데이트됩니다, 그것은 MKV 파일이 성공적으로 재생 여기

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

콘텐츠 인코딩 검사가 제거되면 실패합니다.

내 파일의 트랙이 video이고 audio 트랙이고 복수 subtitles입니다. 무엇이 문제 일 수 있습니까? 도와주세요.

답변

2

이 문제는 mkvparser.cpp의 수표 누락으로 인한 것일 수 있습니다. ParseTrackEntry에서 TrackEntry이 식별되면 video 패킷에 audio 존재 여부가 있는지 확인하고 그 반대의 경우도 마찬가지입니다.

Matroska file specification (참조 : 표 8의 앞에 21 페이지 주석)이 또한 허용 가능함을 지정하지만 현재 구현에서는 오류를보고합니다. TrackEntry 요소가없는 경우

video 또는 audiosubtitle 또는 metadata는 다음 방법 ContentEncoding이 처리되는 아주 명확합니다. 이 line의 수표는 metadata에 유효합니다. 그러나 subtitle 트랙의 경우 사양에서 ContentEncoding 요소가있을 수 있음을 나타냅니다 (위의 표준 24 페이지 참조).

따라서,이 검사는 아마 ContentEncodingsubtitle 트랙이 변화

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

될해야 처리가 계속하여 파일을 재생합니다.

피씨 : 변경 사항에 동의하는 경우 Google에 문의해야 할 수 있습니다.

+0

Ganesh에게 설명해 주셔서 감사합니다. 나는 위의 수표와 그 잘 작동 노력했다. – user3639587

+1

변경 사항이 통합되었습니다. https://gerrit.chromium.org/gerrit/#/c/73474/ 이 문제를 디버깅 해 주셔서 감사합니다. –

+0

@LajosMolnar .. 감사합니다.오랜 시간이 지난 후에 여러분의 의견을 듣기 좋습니다. :) – Ganesh