VIDEOCUBE
[ Cube Project ] 개발 일지 ( TS 만들기 ) 본문
[ 구조분석 ]
[ TS 헤더 분석 ]
47 40 11 10 : 0100 0000 ( 40 ) , 0001 0001 ( 11 ) , 0001 0000 ( 10 )
47 40 00 10 : 0100 0000 ( 40 ) , 0000 0000 ( 0 ) , 0001 0000 ( 10 )
47 50 00 10 : 0101 0000 ( 50 ) , 0000 0000 ( 0 ) , 0001 0000 ( 10 )
47 41 00 30 : 0100 0001 ( 41 ) , 0000 0000 ( 0 ) , 0011 0000 ( 30 )
47 01 00 11 : 0000 0001 ( 01 ) , 0000 0000 ( 0 ) , 0001 0001 ( 11 )
47 01 00 36 : 0000 0001 ( 01 ) , 0000 0000 ( 0 ) , 0011 0110 ( 36 )
47 41 01 30 : 0100 0001 ( 41 ) , 0000 0001 ( 1 ) , 0011 0000 ( 30 )
ㄴ 정상 ( 0 )
ㄴ packet 에 Original Data 처음 부분에 포함 ( 1 ) , Original Data 중간 부분에 포함 ( 0 )
ㄴ 같은 PID 가 존재할 경우 후순위 ( 0 )
ㄴ PID 11번 ( 0 0000 0001 0001 )
ㄴ not scrambled ( 00 )
ㄴ 유효필드 없음, 페이로드만 있음 ( 01 ), ( 11 )
ㄴ 연속카운터 0 ( 0000 ) ( 같은 PID + 1 증가 )
47 40 11 10 [ PID 11 SDT ]
00 42 F0 25 00 01 C1 00 00 FF 01 FF
00 01 FC 80 14 48 12 01 06 46 46 6D 70 65 67 09 53 65 72 76 69 63 65 30 31 77 7C 43 CA
==> Service Description Table
00 0000 0000 ( 하나의 세션이 시작할 경우 0x00 )
42 0100 0010 1. table_id ( 8bits ) 0x00
F0 1 2. section_syntax_indicator : ( 1Bit )
1 3. reserved_future_use ( 1Bit )
11 4. Reserved ( 2Bits )
0000
25 0010 0101 5. section_length : 최대값 1021
00 0000 0000
01 0000 0001 6. transport_stream_id : 네트워크 내 TS 식별 ( 16Bits )
C1 11 7. Reserved ( 2Bits )
00 000 8. version_number : ( 5Bits )
1 9. current_next_indicator : 1, 현재 0, 다음테이블에서 확인 ( 1Bit )
00 0000 0000 10. section_number : 현재 섹션 번호 ( 8Bits )
00 0000 0000 11. last_section_number : 마지막 섹션 번호 ( 8Bits )
FF 1111 1111
01 0000 0001 12. original_network_id ( 16Bits )
FF 1111 1111 13. reserved_future_use ( 8Bits )
00 0000 0000
01 0000 0001 14. service id ( 16Bits )
FC 111 15. reserved_future_use ( 3Bits )
1 11 16. EIT_user_defined_flags ( 3Bits )
0 17. EIT_schedule_flags ( 1Bit )
0 18. EIT_present_following_flags ( 1Bit )
80 100 19. running_status ( 3Bits )
0 20. free_CA_mode ( 1Bit )
0000
14 0001 0100 21. descriptors_loop_length ( 12Bits )
48 ------------- descriptor_tag
12 ------------- length ( int ) ==> 18
01 ------------- service type
06 ------------- service provider name length
ㄴ 46 46 6D 70 65 67 ( FFmpeg )
09 ------------- service name length
ㄴ 53 65 72 76 69 63 65 30 31 ( Service01 )
77 0111 0111
7C 0111 1100
43 0100 0011
CA 1100 1010 22. CRC32 ( 32Bits )
참조) https://gist.github.com/kimson/1868591
47 40 00 10 [ PAT ]
00 00 B0 0D 00 01 C1 00 00 00 01 F0 00 2A B1 04 B2
==> Program Association Table
PMT 의 PID 및 TS 다중화된 모든 프로그램에 대한 일괄적인 목록 정보 포함
00 0000 0000 ( 하나의 세션이 시작할 경우 0x00 )
00 0000 0000 1. table_id ( 8bits ) 0x00
B0 1 2. section_syntax_indicator : ( 1Bit )
0 3. 0 ( 1Bit )
11 4. Reserved ( 2Bits )
0000
0D 0000 1101 5. section_length : 최대값 1021 ( 2MSB = 0 ) (12Bits)
00 0000 0000
01 0000 0001 6. transport_stream_id : 네트워크 내 TS 식별 ( 16Bits )
C1 11 7. Reserved ( 2Bits )
00 000 8. version_number : PAT 버전, PAT 변경 때 마다 1씩 증가 ( 5Bits )
1 9. current_next_indicator : 1, 현재 0, 다음테이블에서 확인 ( 1Bit )
00 0000 0000 10. section_number : 현재 섹션 번호 ( 8 Bits )
00 0000 0000 11. last_section_number : 마지막 섹션 번호 ( 8 Bits )
------------------------------------------------------------------------------------------------
00 0000 0000
01 0000 0001 12. program_number : ( 16 Bits )
F0 111 13. Reserved ( 3 Bits )
1 0000
00 0000 0000 14. (program_number == 0) network_PID | program_map_PID ( 13Bits ) ( 1000000000000 = HEX ( 1000 )
-------------------------------------------------------------------------------------------------
2A 0010 1010
B1 1011 0001
04 0000 0100
B2 1011 0010 15. CRC_32 ( 32 Bits )
47 50 00 10 [ PID 1000 PMT ]
00 02 B0 1D 00 01 C1 00 00 E1 00 F0 00 1B E1 00 F0 00 0F E1 01 F0 06 0A 04 65 6E 67 00 8D 82 9A 07
==> Program Map Table
00 0000 0000 ( 하나의 세션이 시작할 경우 0x00 )
02 0000 0010 1. table_id ( 8bits ) 0x00
B0 1 2. section_syntax_indicator : ( 1Bit )
0 3. 0 ( 1Bit )
11 4. Reserved ( 2Bits )
0000
1D 0001 1101 5. section_length : 최대값 1021 ( 2MSB = 0 ) (12Bits)
00 0000 0000
01 0000 0001 6. Program number ( 16Bits )
C1 11 7. Reserved ( 2Bits )
00 000 8. version_number ( 5Bits )
1 9. current_next_indicator ( 1Bit )
00 0000 0000 10. section_number : 현재 섹션 번호 ( 8Bits )
00 0000 0000 11. last_section_number : 마지막 섹션 번호 ( 8Bits )
E1 111 13. Reserved ( 3Bits )
0 0001
00 0000 0000 14. PCR-PID ( 13Bits )
F0 1111 15. Reserved ( 4Bits )
0000
00 0000 0000 16. 프로그램 정보 길이 ( 12Bits )
------------------------------------------------------------ ( 제1 루프 )
X - CA 기술자
- 디지털 카피 제어 기술자
- 긴급 정보 기술자
- 컨텐츠 이용 기술자
------------------------------------------------------------
1B 0000 1011 17. 스트림 타입 ( 8Bits ) ITU-T Rec H.264 | ISO/IEC 14496-10 Video ( 간이 동화상 )
E1 111 18. Reserved ( 3Bits )
0 0001
00 0000 0000 19. ES PID ( 13Bits )
F0 1111 20. Reserved ( 4Bits )
0000
00 0000 0000 21. ES 정보 길이 ( 12 Bits )
------------------------------------------------------------ ( 제2 루프 )
X - CA 기술자
- 스트림 식별 기술자
- 디지털 카피 제어 기술자
- 비디오 디코드 제어 기술자
------------------------------------------------------------
0F 0000 1111 17-1. 스트림 타입 ( 8Bits ) ISO/IEC13818-7 ( MPEG-2 AAC )
E1 111 18-1. Reserved ( 3Bits )
0 0001
01 0000 0001 19-1. ES PID ( 13Bits )
F0 1111 20-1. Reserved ( 4Bits )
0000
06 0000 0110 21-1. ES 정보 길이 ( 12Bits )
------------------------------------------------------------ ( 제2 루프 )
0A 기술자 태그
04 기술자 길이
65 6E 67 00 ( 6Bytes )
------------------------------------------------------------
8D 1000 1101
82 1000 0010
9A 1001 1010
07 0000 0111 22. CRC32 ( 32Bits )
[ Adaptation Field ]
adaptaion_field_length ( 8 Bits )
ㄴ 길이
-------------------------------------------------- ( 8 Bits )
ㄴ discontinuity_indicator ( 1Bits )
ㄴ random_access_indicator ( 1Bits )
ㄴ elementary_system_priority_indicator ( 1 Bits )
ㄴ (PF) PCR_flag (1 Bits) PF = 1 적응필드 내 PCR 필드를 포함
ㄴ (OF) OPCR flage (1 Bits)
ㄴ (SPF) (1 Bits)
ㄴ (TPDF) transport_private_data_flag ( 1 Bits )
ㄴ (AFEF) adaptation_field_extension_flag ( 1 Bits )
- PCR ( Program Clock Reference ) , OPCR 필드 ( 48 Bits ) --- [ 6Byte ]
- stuffing_bytes 채워넣기 ( n X 8 bit ) : 0xFF
47 01 00 31 ( 184byte 이하 ) > 유효성 필드 앞에 위치
58 00
FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF
1 Byte + ( 87 Byte )
47 41 00 30 [ Video 1번째 샘플 ]
07 50 ( random_access_indicator, (PF) PCR_flag (1 Bits) PF = 1 적응필드 내 PCR 필드를 포함 )
00 00 7B 0C 7E 00 ( Adaption Field )
PCR
0000 0000 0000 0000 0111 1011 0000 1100 0 111 111 0 0000 0000
0000 0000 0000 0000 0111 1011 0000 1100 0 ( Base )
111 111 ( Reservation )
0 0000 0000 ( extension )
필드값 계산 : base * 300 + extension = 63,000 * 300 + 0 = 18900000
base : 시스템 클럭 주파수 27 MHz 를 300 으로 나눈 90KHz 시간해상도로 시각을 33비트로 표현
extension : 시스템 클럭 주파수 27MHz 시간해상도로 시각을 9비트로 표현
[ Packetized Elementary Stream ]
( PES )
00 00 01 E0 00 00 ( Packetized Elementary Stream Header )
packet_start_code_prefix
packet_start_code_prefix ( 24 Bits )
00 00 01
stream_id ( 8bits )
E0 | Audio : C0 ~ DF | Video : E0 ~ EF PES_packet_length ( 16 bits )
00 00 ( 0 )
80 C0 0A 31 00 0B 37 F1 11 00 09 E0 0D ( Optional Packetized Elementary Stream Header )
80 10 Marker bits ( 2Bits )
00 Scrambling control ( 2Bits )
0 Priority ( 1Bit )
0 Data alignment indicator ( 1Bit )
0 Copyright ( 1Bit )
0 Original or Copy ( 1Bit )
C0 11 PTS, DTS indicator | PTS, DTS 정보, 0010 only PTS | 00 no PTS or DTS | 01 is forbidden ( 2Bits )
0 ESCR flage ( 1Bit )
0 ES rate flag ( 1Bit )
0 DSM trick mode flag ( 1Bit )
0 Additional copy info flag ( 1Bit )
0 CRC Flag ( 1Bit )
0 Extension Flag ( 1Bit )
0A 0000 1010 PES Header Length
31 0011 0011 : PTS, DTS 정보 포함 ( 4Bits ) ( only PTS 0010 )
000 부호 비트 ( 양수 ) ( 3Bits )
1 마커 비트 ( 1Bit )
00 0000 0000
0B 0000 101 PTS 상위 비트 ( 15Bits )
1 마커 비트 ( 1Bit )
37 0011 0111
F1 1111 000 PTS 하위 비트 ( 15Bits )
1 마커 비트 ( 1Bit )
11 0001 0001 : DTS ( 4Bits )
000 부호 비트 ( 양수 ) ( 3Bits )
1 마커 비트 ( 1Bit )
00 0000 0000
09 0000 100 DTS 상위 비트 ( 15Bits )
1
E0 1110 0000
0D 0000 110 DTS 하위 비트 ( 15Bits )
1 마커 비트 ( 1Bit )
참조) https://en.wikipedia.org/wiki/Packetized_elementary_stream
http://www.ktword.co.kr/abbr_view.php?m_temp1=5262
http://behonestar.tistory.com/160
[ Elementary Stream ]
( Video )
H.264 Nal Unit
00 00 00 01 09 F0
ㄴ AU 구분자 ( Access Unit Delimeter, 엑세스 단위의 맨 앞에 붙는 시작 부호 )
00 00 00 01
참조) http://dg087.tistory.com/28
( Audio )
FF F1 50 80 1D 1F FC
ㄴ ADTS ( Audio Data Transport Stream, 7Bytes or 9Bytes ADTS Header, ISO 13818-7 )
ㄴ mp4a ( 샘플 Body )
1111 1111 1111 syncword 0xFFF, all bits must be 1
0 MPEG-4 ( 0 ) MPEG-2 ( 1 )
00 layer always 0
1 protection absent, Warning, set to 1 if there is no CRC and 0 if there is CRC
01 profile, 00 Main 01 LC 10 SSR 11 AAC TP
01 00 MPEG-4 Sampling Frequency Index ( 15 is forbidden )
0 private bit
0 10 channel_configuration
0 originality
0 home
0 copyright_identification_bit
0 copyright_identification_start
00 0001 1101 000 aac_frame_length
1 1111 1111 11 adts_buffer_fullness
00 no_raw_data_blocks_inframe
none crc_check ( 16 )
'프로젝트' 카테고리의 다른 글
[ Cube Project ] 개발 일지 ( TS 분석 ) (0) | 2018.11.23 |
---|---|
[ Cube Project ] 개발 일지 ( 샘플링하기 ) (0) | 2018.11.18 |
[ Cube Project ] 개발 일지 ( 샘플링하기 ) (0) | 2018.11.16 |
[ Cube Project ] Python MP4 Streaming Server (0) | 2017.12.05 |
[Cube Project] Nginx + Python CGI 연동 준비 (0) | 2017.12.04 |