«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

VIDEOCUBE

[ Cube Project ] 개발 일지 ( TS 만들기 ) 본문

프로젝트

[ Cube Project ] 개발 일지 ( TS 만들기 )

라떼청년 2018. 11. 24. 00:02

[ 구조분석 ]


[ 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         2. section_syntax_indicator : ( 1Bit ) 

           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 )


참조) http://magazine.hellot.net/magz/article/articleDetail.do?flag=all&showType=showType1&articleId=ARTI_000000000035496&articleAllListSortType=sort_1&page=1&selectYearMonth=200908&subCtgId=



[ 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

  http://grouper.ieee.org/groups/1722/contributions/2012/1722a_Klaus-Wagenbrenner_PES_TS_sync_encryption.pdf




[ 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 ) 


참조) https://wiki.multimedia.cx/index.php/ADTS


반응형
Comments