안드로이드 장치에서 기록한 .mp4 비디오 파일에 들어있는 디코더 구성 레코드를 검사하고 있습니다. 일부 장치에는 디코더 구성 레코드에 이상하거나 잘못된 매개 변수가 기록되어 있습니다. 표준 상태 (51)가 가장 높은 값이기 때문에.mp4에서 가져온 H.264 디코더 구성 레코드 형식
DecoderConfigurationRecord: 010283f2ffe100086742000de90283f201000568ce010f20
pictureParameterSetNALUnits : 68ce010f20
AVCLevelIndication : 242
AVCProfileIndication : 2
sequenceParameterSetNALUnits : 6742000de90283f2
lengthSizeMinusOne : 3
configurationVersion : 1
profile_compatibility : 131
profile_idc : 103
constraint_set : 16
level_idc : 0
AVCLevelIndication == 242
잘못 : 여기
이 잘못 갤럭시 플레이어 4.0 샘플입니다.
AVCProfileIndication
(66, 77, 88, 100, 120, ...)가 constraint_set
를
profile_compatibility
라고 될 것인가? _flag
의 2 최하위 비트는 예약 0
이 그것과 같아야 어떻게 동일하게 seposed됩니다
DecoderConfigurationRecord: 0142000dffe100086742000de90283f201000568ce010f20
pictureParameterSetNALUnits : 68ce010f20
AVCLevelIndication : 13
AVCProfileIndication : 66
sequenceParameterSetNALUnits : 6742000de90283f2
lengthSizeMinusOne : 3
configurationVersion : 1
profile_compatibility : 0
profile_idc : 103
constraint_set : 16
level_idc : 0
방법 AVCLevelIndication
및 AVCProfileIndication
이 profile_idc
및 level_idc
에서 추론 할 수 있는가?
파라미터를 SPS
매개 변수와 비교하여 잘못된 매개 변수를 확인하거나 수정하는 방법이 있습니까?
과 같은 값을 가져야합니다. 예 : profile_idc == 103 어떻게 66 (기준선 프로필)으로 변환됩니까? 및 level_idc == 0 어떻게 13 (수준 1.3)로 변환? – Alex
endianness는 라인 어딘가에 뒤쪽에있는 것처럼 보입니다. 'AVCProfileIndication','profile_compatibility','AVCLevelIndication'은 SPS NALU의 바이트 1에서 3까지입니다. 즉 SPS NALU임을 나타내므로 0x67을 무시한 다음 해당 값에 대해 '0x42','0x00', '0x0d'를 사용하십시오. 그러나 NALU 데이터의 뒤에서'0xF2','0x83','0x02'를 사용하고 있으며 잘못된 방향으로 가고있는 것으로 보입니다. '0xF2'는 242를,'0x83'은 profile_compatibility에 131을,'0x02'는 레벨 2를 제공합니다. – jgh
또한이 profile_idc == 103은 profile_idc = 0x67이 실제로 NALU 헤더임을 나타냅니다 . '0x67 & 0x1F == 0x7' SPS 타입은 0x7입니다. 다음 바이트 인 0x42에서 시작하려고합니다. – jgh