2013-12-17 2 views
2

HM-12.0 참조 코드를 사용하여 기본 bin 스트림을 만들었습니다. 따라서 출력은 HEVC로 인코딩 된 bin 스트림입니다 (예 : input.bin).HEVC : 입력 빈 스트림에서 입력 너비와 높이 가져 오기

이 기본 스트림의 헤더를 읽는 작업이 있습니다. 그게 내가 스트림 폭, 높이 등 input.bin 파일에서 정보를 가져올 필요가있다. 내가 어떤 빈 스트림에서이 순서를 볼 때마다 그래서,이 스트림에 가지고 말할 수

00 00 00 01 

을 :

스트림의 많이 본 후, 나는이 모든 빈 스트림 시퀀스에서 시작한다는 결론을 내릴 수있다 HEVC 디코더에 의해 디코딩 될 수있다.

추가 정보 input.bin (ffmpeg의 ff_raw_video_read_header 함수처럼)에서 너비, 높이, fps 등을 가져 오려면이 정보를 가져 오기 위해 수행해야 할 단계가 있습니까?

나는 HEVC 초안의 구문 분석 섹션을 통과했지만, 비디오 도메인의 제 레벨에서는 매우 복잡합니다. 누구든지 인코딩 된 bin 파일에서 필요한 정보를 가져 오는 간단한 방법을 제안 할 수 있습니까?

어떤 제안이 나에게 도움이 될 것입니다. 미리 감사드립니다.

+2

FYI 00000001은 H.264 표준의 부록 B에 정의 된 시작 코드입니다. 시작 코드를 보면 H.264 또는 H.265와 같이 어떤 종류의 스트림을 처리하는지 알 수 없습니다. – Ralf

+0

친애하는 @Zax, 비트 스트림 파일을 어떻게 파싱합니까? 사용할 수있는 코드가 있습니까? – zinon

답변

5

최근에 비디오에 관해 많은 질문을하는 것을 보았습니다. 비디오와 관련해서는; "간단한 방법"같은 것은 없습니다.

다음은 AVC 답변입니다. Fetching the dimensions of a H264Video stream

우선 fps는 일반적으로 ES에서 인코딩되지 않습니다. 그것은 컨테이너 수준의 것입니다. AVC/HEVC에서 사용할 장소가 있지만 채워 넣을 수는 없습니다.

이미 시작 코드를 찾았습니다. 레코드의 경우 시작 코드는 2 이상 00이지만 그 다음에 01 (항상 00 00 00 01이 아닌 00 00 01, 00 00 00 00 01 등이 될 수 있음)이 시퀀스가 ​​NALU에 나타나면 자연스럽게, 그것은 도망쳐 야합니다. 따라서 NALU 페이로드를 사용하여 00 00 01을 인코딩하면 00 00 03 01로 변경됩니다.이 시퀀스를 구문 분석하는 동안이 시퀀스가 ​​발생하면 emulation prevention 바이트 (03)의 존재를 무시해야하므로이 내용을 언급합니다. emulation prevention 바이트가 제거 된 ES를 원시 바이트 시퀀스 페이로드 (rbsp)라고합니다.

시작 코드 뒤의 처음 두 바이트에 nal_unit_header가 있습니다. 유형은 비트 1-5 ((NALU[0] >> 1) & 0x3F)에 저장됩니다. 해결 방법은 33 인 SPS_NUT에 저장됩니다. SPS가 있으면 분석 할 수 있습니다.

이것은 지수 고롬 (golomb) 인코딩을 제공합니다. 기본적으로 exponential golomb encoded 정수 (부호가있는 ue, 부호가 se)는 가변 길이 정수입니다. 디코딩하려면 앞에 오는 0을 세어 라. 이 카운트는 비트 단위로 정수의 길이를 알려줍니다. 다음으로 많은 비트를 읽고 1을 빼서 정수를 구하십시오. 서명 된 변종이 동일, 마지막 비트를 excep 것은 예를 들어, 부호 비트는 다음과 같습니다

1  = 0 = 0 
010 = 1 = 1 
011 = 2 = -1 
00100 = 3 = 2 
00101 = 4 = -2 

다음은 녹화의 7.3.2.2 테이블을 사용하여 SPS를 구문 분석합니다. ITU-T H.265 (33/2010) (page 33)

pic_width_in_luma_samples pic_height_in_luma_samples 및 conformance_window 매개 변수에서 디 텐트를 세밀하게 계산할 수 있습니다.

+0

정말 좋은 설명입니다. HEVC 표준 초안을 제외하고 어디에서 이러한 내용을 읽을 수 있습니까? 일부 웹 사이트 또는 일부 자료에 대한 링크를 제공하십시오. 이 사이트를 언급하는 사람뿐만 아니라 나에게도 유용 할 것입니다. – Zax

+1

비디오 경험 경력. 이 모든 정보를 찾기가 정말 어렵습니다. 책, 인터넷, ITU 문서 및 리버스 엔지니어링은 내가 배운 곳입니다. – szatmary

+0

시작하기 가장 좋은 곳은 실제로 참조 코덱입니다. 디버거에 디버그 변형을로드하고 코드 실행을 시작합니다 ... –

관련 문제