2010-12-15 6 views
8

기본적으로 RFC 3984에 따라 IP/UDP/RTP에서 기준 H.264 비디오 프로파일을 브로드 캐스트하는 ATSC-153 사양을 구현 중입니다. 프레임이 재 조립되고 있으며, 대부분의 부분에 대해 필자가 작업하고있는 임베디드 프로세서에서 작동합니다.하지만 어떤 이유로 인해 발생하고있는 부패가 추적하려고 시도하고 있습니다. 일부 비교를 위해 Windows (VLC)에서 렌더링하기 위해 이것을 MPEG-TS로 캡슐화하려고하고 있는데 어떤 이유로 어려움을 겪고 있습니다. VLC, TSReader 및 MPEG2Repair에서 어떤 이유로 비디오를 찾을 수 없습니다. 내가하고있는 단계는 다음과 같습니다. SPS 또는 PPS H.264 프레임에 대해 동일합니다. RTP에서 MPEG-TS 로의 MPEG-ES H.264 비디오

  1. 는 PAT를 생성/PMT, PMT PID가 0x11을 비디오 타입 0x1b이며, 비디오는 PID를 0x280이고, PCR의 PID가 0x1fff (NO PCR)이다. 사실, 15 프레임 정도마다 이렇게합니다.

  2. 액세스 단위 구분 기호 인 NAL 번호 9를 프레임에 추가합니다. 이는 전송의 모든 H.264 프레임에 추가되어야한다고 생각합니다. 기본 사진 형식은 1 (0x30 바이트)이며, 이는 기준선 프로파일의 I, P에 해당합니다.

  3. 여기에 RTP 헤더의 PTS가있는 PES 헤더 프레임을 추가합니다.

  4. 4 바이트 TS 헤더를 추가합니다. 프레임의 시작 부분에서 PUS 비트를 설정합니다. 시퀀스의 4 비트 카운터를 유지합니다.

  5. 184로 나눌 수없는 바이트가 남아있는 경우, 나머지 바이트에 패딩 된 (또는 채워진) 적응 필드 (길이 세트, 플래그 바이트는 0으로 설정 됨)가있는 TS 패킷에 넣습니다.

나는 스트림이 SPS 프레임으로 시작하는지 확인합니다. 내 이해 (위대하지 않을 수 있음)에는 실제 그림이 포함되어야합니다. SPS 프레임은 스트림에서 15K 바이트 정도입니다. 여기에 첫 번째 TS 패킷의 덤프가 있습니다.

000 47 42 80 15 00 00 01 E0 00 00 81 80 05 21 AA BB 
010 9A 91 00 00 00 01 09 30 00 00 00 01 67 42 C0 14 
020 9A 44 0D 0F 9F F8 00 08 00 08 04 00 00 00 01 68 
030 DE 24 88 00 00 00 01 E6 87 26 D6 AC FA 58 78 24 
040 0E EB B5 5B 02 AF 6C EB E1 E4 9F 35 BD 61 56 F8 
050 4A 4E 58 00 00 01 65 88 80 20 20 9E 1D 60 20 61 
060 15 D8 02 70 F9 29 C0 00 40 C6 23 3A 76 CA 78 9A 
070 4D 7D 79 C1 6E 94 3E A8 76 50 4B F7 B5 B0 40 2B 
080 52 48 93 B1 A2 4A 4F 3D 14 F1 B8 7E FA 98 91 FE 
090 DC EB 0F 11 BF EB D1 B8 E0 3F 5A C2 91 2D FA 83 
0A0 03 EF 51 10 18 D6 D4 77 90 78 97 D5 BF 94 61 6D 
0B0 69 53 AF 5B 42 FE D7 A3 9D 21 81 FC 

위의 패킷에서받은 실제 비디오 프레임은 0x18 오프셋부터 시작됩니다. 그 전의 모든 것을 추가했습니다. 00 00 00 01 67은 SPS를 나타내야합니다.

000 47 42 80 19 00 00 01 E0 00 00 81 80 05 21 AA BB 
010 F8 51 00 00 00 01 09 30 00 00 00 01 41 9A 01 05 
020 0F FF F4 3D FE 9B 0F 5E BE 18 15 20 00 50 0D 51 
030 58 32 47 F5 E7 86 1B 43 A6 FC F5 CA 64 A6 7F CF 
040 CB 94 C8 1F F2 FF 51 F7 7D DD DF 51 97 C7 C2 97 
050 77 77 77 BB B4 8B E9 B8 F9 70 D7 75 7A FF D8 64 
060 E8 C1 CE 06 83 58 20 24 00 06 66 70 BC DB C3 8D 
070 8E 6D FC 8C 5D EE 0D CC 63 61 13 BB F3 0F 0D 9F 
080 28 82 54 E4 A2 1C 21 55 BF F3 C1 86 7D 90 47 52 
090 5F C2 C6 E2 A7 3B 5E E0 A1 5B A2 C3 24 05 97 17 
0A0 A1 B2 04 22 78 F0 6F 0C DA 85 DC 7C E3 69 85 2B 
0B0 AC 02 02 01 9C 5B 11 DC B5 85 44 CE 
이 난 단지 내가 필요한 뭔가를 놓친 거지이 시점에서 예상 할 수

, 내가했던 일 : 일반적으로는 4KB에 3Kbytes를 실행 PPS 프레임에 대한

다음은에서 덤프입니다 잘못되었거나 RFC 3984 re-assembly가있는 항목이 너무 많이 잘못되어 디코더가 이것을 비디오로 인식하지 못합니다.

그래서 먼저 두 가지 질문을 먼저하겠습니다. 사양에서 빠진 것이 있습니까? 덤프에서 보았 듯이 올바르게 구현 했습니까?

감사합니다.

+0

덤프에 대한 사과가 많았지 만, 필자는 생각했던 것처럼 가지 않았다. – davroslyrad

+0

나를 위해 이것을 다시 포맷 해 주셔서 감사합니다. 나는 아직도 초보자이다. – davroslyrad

답변

5

글쎄, 일반적으로 나는 이것을 알아 낸 것입니다. 문제는 내가 덤프를 제공하지 않은 PMT에서 발생했습니다. 위 캡슐화가 정확합니다. PMT를 수정하면 스트림이 대상 보드에서 재생됩니다.

관련 문제