2013-01-07 3 views
1

H.264 스트림에서 MPEG-4 파일을 만듭니다. H.264 스트림은 NAL 형식 (EG : 0,0,0,1,67, ..., 0,0,1,68, ...)으로 제공됩니다. 각 비디오 프레임은 다중 I- 프레임/P- 프레임 조각으로 전송됩니다. 예 : 프레임 1에는 약 80 개의 I 프레임 조각이 있고 프레임 2에는 약 10 개의 P 프레임 조각이 들어 있습니다.I 프레임/P 프레임 조각에서 MDAT 만들기

MPEG-4 파일의 MDAT 아톰이 NAL 형식의 H.264 스트림을 포함하고있는 것으로 알고 있습니다.

MPEG-4의 MDAT 아톰에 삽입하기 전에 이러한 조각을 단일 I 프레임으로 변환하는 방법을 알고 싶습니다.

라이브러리를 사용하고 싶지 않습니다.

도움 주셔서 감사합니다.

답변

0

H.264 Annex B NAL 스트림을 MP4 파일 패킷으로 변환 할 예정입니다. 이를 수행하려면 다음을 수행해야합니다.

  • 원본 파일을 NAL 단위 (00 00 00 01 yy xx xx ...)로 분할하십시오.
  • 프레임 경계를 찾습니다. 각 H.264 프레임에는 일반적으로 여러 슬라이스가 포함되며 SPS, PPS, SEI 중 하나를 선택적으로 포함합니다. 위의 'yy'옥텟을 구문 분석하여 어떤 종류의 NAL 단위를 찾고 있는지 확인해야합니다. 이제 프레임 경계를 알기 위해서는 'SliceHeader'라는 각 슬라이스의 첫 번째 부분을 구문 분석하고 결과 슬라이스의 'frame_number'를 비교해야합니다.
  • 프레임 경계를 알게 되 자마자 MP4 패킷을 구성 할 수 있습니다. 그래서 기본적으로

    L1 L1 L1 L1 전년 동기 대비 XX XX ...
    L2 L2 L2 L2 전년 동기 대비 XX XX ...

: 각 패킷은이 형식에 정확히 하나 개의 프레임과 NAL 단위를 포함합니다 각 delimeter '00 00 00 01'을이 NAL 단위 길이의 정수로 대체하십시오.

  • 그런 다음 올바른 MP4 헤더를 얻으려면 MP4 muxer를 사용하고 비디오 트랙의 샘플 항목에 올바른 'AvcC'아톰을 채워야합니다.

이 오히려 지루한 과정이다 그러나 당신이 구체적으로 얻으려면 당신은 JCodec (http://jcodec.org)의 소스 코드를 공부할 수 있습니다 : org.jcodec.samples.transcode.TranscodeMain, org.jcodec.containers.mp4을. MP4Muxer