PS 스트림의 경우 최근 업무상의 이유로 PS 스트림 형식과 MPEG2의 언패킹 과정을 연구했습니다.
먼저 PS 패킷 스트림 형식이 무엇인지 알아야 합니다.
H264에 대해 다음 PS 패키징을 수행합니다. 각 IDR NALU에는 일반적으로 SPS 및 PPS와 같은 NALU가 포함되므로 캡슐화합니다. SPS, PPS 및 IDR의 NALU를 ps 헤더를 포함하는 PS 패킷으로 변환한 다음 PS 시스템 헤더, PS 시스템 맵 및 PES 헤더+h264 원시 데이터를 추가합니다. 따라서 IDR NALU PS 패킷의 순서는 PSheader | PS 시스템 헤더 | PS 시스템 맵 | h264 원시 데이터입니다. 키 프레임이 아닌 다른 PS 패킷의 경우 PS 헤더와 PES 헤더를 직접 추가하면 됩니다. 순서는 PS 헤더 | PES 헤더 | h264raw 데이터입니다. 위는 영상만 있는 경우에 대한 것입니다. 오디오를 PS 패키지로 패키징하려는 경우에도 가능합니다. 오디오 데이터가 있는 경우 데이터에 PES 헤더를 추가하고 비디오 PES 뒤에 넣기만 하면 됩니다. 순서는 다음과 같습니다: PS 패킷 = PS 헤더 | PES(비디오) | PES(오디오), 그리고 RTP를 사용하여 캡슐화하여 보냅니다.
위는 데이터 흐름에 대한 전반적인 캡슐화 형식입니다. 각 캡슐화의 각 부분을 살펴보겠습니다.
첫 번째는 PSheader 부분: (MPEG2 표준 중국어 문서에서)
구문 |
비트 번호 |
니모닉 |
pack_header() { |
|
|
pack_start_code |
32 |
bslbf |
' 01' |
2 |
bslbf |
system_clock_reference_base[32..30] |
3 |
bslbf |
marker_bit |
1 |
bslbf |
system_clock_reference_base[29..15] |
15 |
bslbf |
marker_bit |
1 |
bslbf |
system_clock_reference_base[14..0] |
15 |
bslbf |
marker_bit |
1 |
bslbf |
system_clock_reference_extension |
9 |
uimsbf |
marker_bit |
1 |
bslbf |
program_mux_rate |
22 |
uimsbf |
marker_bit |
1 |
bslbf |
marker_bit |
1 |
bslbf |
예약됨 |
5 |
bslbf |
pack_stuffing_length |
3 |
uimsbf |
for (i=0;i |
|
|
stuffing_byte |
8 |
bslbf |
} |
|
|
if (nextbits()==system_header_start_code) { |
|
|
system_header() |
|
|
} |
|
|
} |
|
|
프로그램 스트림 패킷(PS 헤더)에 있는 각 필드의 의미론적 정의:
Pack 시작 코드 필드 pack_start_code
값 패킷의 시작을 표시하는 데 사용되는 '0000 0000 0000 0000 0000 0001 1011 1010'(0x000001BA) 비트 문자열입니다.
시스템 시계 참조 필드 system_clock_reference_base, system_clock_reference_extenstion
시스템 시계 참조(SCR)는 두 부분으로 인코딩된 42비트 필드입니다. 첫 번째 부분 system_clock_reference_base는 33비트 길이의 필드이고 그 값 SCR_base(i)는 수학식 2-19에 의해 주어진다. 두 번째 부분 system_clock_reference_extenstion은 9비트 길이의 필드이고 그 값 SCR_ext( i) 주어진 식 2-20에 의해 주어진다. SCR 필드는 ESCR_base의 마지막 비트를 포함하는 기본 스트림의 바이트가 프로그램의 대상 디코더의 입력에 도달하는 데 예상되는 시간을 나타냅니다.
SCR 필드의 인코딩 주파수 요구 사항은 2.7.1을 참조하세요.
마커 비트 필드 marker_bit
1비트 필드, 값 '1'.
프로그램 복합 속도 필드 program_mux_rate
이 필드가 포함된 패킷 동안 P-STD가 프로그램 스트림을 수신하는 속도를 지정하는 22비트 정수입니다. 값은 50바이트/초 단위입니다. 0 값은 허용되지 않습니다. 이 필드가 나타내는 값은 2.5.2의 P-STD 입력에서 바이트 도착 시간을 정의하는 데 사용됩니다. 이 필드의 값은 이 표준의 프로그램 다중화 복합 스트림의 패킷마다 다를 수 있습니다.
패킹 길이 필드 pack_stuffing_length
3자리 정수, 이 필드 뒤의 스터핑 바이트 수를 지정합니다.
스터핑 바이트 필드 stuffing_byte
8비트 필드, 값은 항상 '1111 1111'입니다. 이 필드는 예를 들어 채널 요구 사항을 충족하기 위해 인코더에 의해 삽입될 수 있습니다. 디코더에 의해 폐기됩니다. 각 패킷 헤더에는 최대 7바이트의 패딩 바이트만 허용됩니다.
정의된 바이트 순서는 다음과 같습니다 :
4B 패킷 시작 코드:
|
바이트 1 |
바이트 2 |
바이트 3 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 td> |
6 |
5 |
4 |
3 |
2 td> |
1 |
0 |
7 |
6 |
5 td> |
4 |
3 |
2 |
1 |
0 td> |
7 |
6 |
5 |
4 |
3 td> |
2 |
1 |
0 |
7 |
6 td> |
5 |
4 |
3 |
2 |
1 td> |
0 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0000 0000 0000 0000 0000 0001 |
1011 1010 |
PACK 식별자 -- 0xBA
系统时钟基准(SCR-System Clock Reference) 的基本part分、SCR 적의 전시 부분:
|
바이트 5 |
바이트 6 |
바이트 7 |
바이트 8 |
바이트 9 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 |
6 |
5 | 4 |
3 |
2 |
1 |
0 | 7 |
6 |
5 |
4 |
3 | 2 |
1 |
0 |
7 |
6 | 5 |
4 |
3 |
2 |
1 | 0 |
7 |
6 |
5 |
4 | 3 |
2 |
1 |
0 |
7 | 6 |
5 |
4 |
3 |
2 | 1 |
0 |
7 |
6 |
5 | 4 |
3 |
2 |
1 |
0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
01 |
SCR 32..30 |
1 |
SCR 29..15 |
1 |
SCR 14..00 |
1 |
SCR_ext |
1 |
|
바이트 11 |
바이트 12 |
바이트 13 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 |
5 |
4 |
3 |
1 |
0 |
7 |
6 |
4 |
3 |
2 |
1 |
7 |
6 |
5 |
4 |
2 |
1 |
0 |
7 |
5 |
4 |
3 |
2 |
0 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Program_Mux_Rate |
1 |
1 |
예약됨 |
pack_stuffing_length |
============================================= === ==============
다음으로 PS 시스템 헤더의 정의를 살펴보겠습니다(예: PS 시스템 헤더: 프로그램 스트림 시스템 제목). ) 부분 : ( MPEG-2 표준 문서에서)
표 2-34 프로그램 스트리밍 시스템 제목
언어 |
숫자 |
니모닉 |
system_header() { |
|
|
system_header_start_code | 32 |
bslbf |
헤더 길이 |
16 |
uimsbf |
marker_bit |
1 |
bslbf |
rate_bound |
22 |
uimsbf |
marker_bit |
1 |
bslbf |
audio_bound |
6 |
uimsbf |
고정_플래그 |
1 |
bslbf |
CSPS_flag |
1 |
bslbf |
system_audio_lock_flag |
1 |
bslbf |
system_video_lock_flag |
1 |
bslbf |
marker_bit |
1 |
bslbf |
vedio_bound |
5 |
uimsbf |
packet_rate_restriction_flag |
1 |
bslbf |
Reserved_bits |
7 |
bslbf |
while (nextbits()=='1') { |
|
|
stream_id |
8 |
uimsbf |
'11' |
2 |
bslbf |
P-STD_buffer_bound_scale |
1 |
bslbf |
P-STD_buffer_size_bound |
13 |
uimsbf |
} |
|
|
} |
|
|
시스템 헤더의 각 필드에 대한 의미 정의:
시스템 헤더 시작 코드 필드 system_header_start_code
값 '0000 0000 0000 0000 시스템 헤더의 시작을 나타내는 0000 0001 1011 1011'(0x000001BB)의 비트 문자열입니다.
헤더 길이 필드 header_length
16비트 필드입니다. 이 필드 뒤에 오는 시스템 헤더의 길이(바이트)를 나타냅니다. 이 필드는 이 사양의 향후 확장에서 확장될 수 있습니다.
속도 제한 필드 rate_bound
22비트 필드, 값은 프로그램 스트림의 모든 패킷에 인코딩된 program_mux_rate 필드의 최대값 이상입니다. 이 필드는 디코더에서 전체 스트림을 디코딩할 수 있는지 여부를 추정하는 데 사용될 수 있습니다.
오디오 바운드 필드 audio_bound
6비트 필드, 값은 0~32의 폐쇄 범위에 있는 정수이며, 동시에 프로그램 스트림 활성 GB/T XXXX.3 및 GB/T AAAA.3 오디오 스트림의 최대 수입니다. 이 섹션에서는 STD 버퍼가 비어 있지 않거나 프레젠테이션 단위가 P-STD 모델로 표시되는 경우 GB/T XXXX.3 및 GB/T AAAA.3 오디오 스트림의 디코딩 프로세스가 활성화됩니다.
고정 플래그 필드fixed_flag
1비트 플래그. '1'로 설정하면 고정 비트레이트 동작을 나타내고, '0'으로 설정하면 가변 비트레이트 동작을 나타냅니다. 일정한 비트 전송률 작업 중에 복합 GB/T XXXX.1 스트림의 system_clock_reference 필드 값은 다음 선형 공식을 따라야 합니다.
SCR_base(i )=( (c1×i+c2) p 300) % 233 (2-22)
SCR_ext(i)=((c1×i+c2) p 300) % 300 ( 2-23 )
그 중
c1은 모든 i에 유효한 실제 상수입니다.
c2는 모든 i에 유효한 실제 상수입니다.
i GB/T XXXX.1 복합 스트림에 포함된 system_clock_reference 필드의 마지막 비트에 대한 바이트 인덱스입니다.
CSPS 플래그 필드 CSPS_flag
1비트 필드입니다. '1'로 설정되면 프로그램 스트림은 2.7.9에 정의된 제한 사항을 준수합니다.
시스템 오디오 잠금 플래그 필드 system_audio_lock_flag
1비트 필드입니다. 시스템 대상 디코더의 오디오 샘플링 속도와 system_clock_주파수 사이에 지정된 비율이 있음을 나타냅니다. system_clock_주파수는 2.5.2.1에 정의되어 있으며 오디오 샘플링 속도는 GB/T XXXX.3으로 지정됩니다. system_clock_frequency와 실제 오디오 샘플링 레이트 사이의 SCASR 비율이 프로그램 스트림의 모든 오디오 기본 스트림의 모든 표현 단위에 대해 일정하고 오디오 스트림에 표시된 표준 샘플링 레이트가 다음 표의 값과 같다면 이는 필드는 '1'만 가능합니다.
SCASR=(system_clock_주파수) / audio_sample_rate_in_the_P-STD (2-24)
기호 X/Y는 다음을 나타냅니다. 실수 나눗셈.
표준 오디오 샘플링 주파수(kHz)
|
16 |
32 |
22.05 |
44.1 |
24 |
48 |
||||||||||||||
SCASR |
27 000 000 --------- 16,000 |
27 000 000 ------ 32,000 |
27,000,000 ------ 22 050 |
27 000 000 ------ 44 100 |
27 000 000 ------ 24 000 |
27 000 000 --------- 48 000 |
시스템 비디오 잠금 플래그 필드 system_video_lock_flag
1비트 필드입니다. 시스템 대상 디코더의 비디오 프레임 속도와 system_clock_주파수 사이에 지정된 비율이 있음을 나타냅니다. system_clock_주파수는 2.5.2.1에 정의되어 있으며 비디오 프레임 속도는 GB/T XXXX.2로 지정됩니다. system_clock_주파수와 실제 비디오 프레임 속도 간의 SCFR 비율이 GB/T XXXX.1 단위로 모든 비디오 기본 스트림의 모든 표현 단위에 대해 일정하고, 비디오 스트림에 표시된 표준 프레임 속도가 아래 표의 값과 같다면 , 이 필드는 '1'만 가능합니다.
SCFR=system_clock_주파수 / frame_rate_in_the_P-STD (2-25)
표준 프레임 속도(Hz)
|
23.976 |
24 |
25 |
30 |
50 |
59.94 |
60 |
||||||||||||||||||
SCFR |
1 126 125 |
1 125 000 |
1 080 000 |
900 900 |
900,000 |
540,000 |
450 450 |
450,000 |
언어 방법 |
비트 번호 |
니모닉 |
program_stream_map() { |
|
|
packet_start_code_prefix |
24 |
bslbf |
map_stream_id |
8 |
uimsbf |
program_stream_map_length |
16 |
uimsbf |
current_next_indicator |
1 |
bslbf |
예약됨 |
2 |
bslbf |
program_stream_map_version |
5 |
uimsbf |
예약됨 |
7 |
bslbf |
marker_bit |
1 |
bslbf |
프로그램_스트림_정보_길이 |
16 |
uimsbf |
(i=0;i |
|
|
설명자() |
|
|
} |
|
|
Elementary_stream_map_length |
16 |
uimsbf |
for (i=0;i |
|
|
stream_type |
8 |
uimsbf |
Elementary_stream_id |
8 |
uimsbf |
Elementary_stream_info_length |
16 |
uimsbf |
(i=0;i |
|
|
설명자() |
|
|
} |
|
|
} |
|
|
CRC_32 |
32 |
rpchof |
} |
|
|
프로그램 스트림 매핑에 있는 각 필드의 의미론적 정의:
패킷 시작 코드 접두사 필드 packet_start_code_prefix
24비트 코드. 그것과 다음 map_stream_id는 함께 그룹의 시작을 표시하는 그룹 시작 코드를 형성합니다. 이 필드는 '0000 0000 0000 0000 0000 0001'(0x000001) 값을 갖는 비트 문자열입니다.
맵 스트림 식별 필드 map_stream_id
8비트 필드, 값은 0xBC입니다.
프로그램 스트림 맵 길이 필드 program_stream_map_length
16비트 필드. 이 필드 바로 다음에 오는 program_stream_map의 바이트 수를 나타냅니다. 이 필드의 최대값은 1018(0x3FA)입니다.
현재 다음 표시자 필드 current_next_indicator
1비트 필드입니다. '1'로 설정되면 전송된 프로그램 스트림 매핑이 현재 사용 가능함을 나타냅니다. '0'으로 설정되면 전송된 프로그램 스트림 매핑을 아직 사용할 수 없지만 다음 유효 테이블이 됨을 나타냅니다.
프로그램 스트림 맵 버전 필드 program_stream_map_version
5비트 필드, 전체 프로그램 스트림 맵의 버전 번호를 나타냅니다. 프로그램 스트림 맵의 정의가 변경되면 이 필드는 모듈로 32로 1씩 증가됩니다. current_next_indicator가 '1'인 경우 이 필드는 현재 적용 가능한 프로그램 스트림 매핑의 버전 번호여야 하며, current_next_indicator가 '0'인 경우 이 필드는 다음 적용 가능한 프로그램 스트림 매핑의 버전 번호여야 합니다.
프로그램 스트림 정보 길이 필드 program_stream_info_length
16비트 필드로, 이 필드 바로 뒤에 오는 설명자의 전체 길이를 나타냅니다.
마커 비트 필드 marker_bit
1비트 필드, 값은 '1'입니다.
기본 스트림 맵 길이 필드 Elementary_stream_map_length
프로그램 스트림 맵의 모든 기본 스트림 정보의 바이트 길이를 나타내는 16비트 필드입니다. stream_type, Elementary_stream_id 및 Elementary_stream_info_length 필드만 포함됩니다. (여기서 기본 스트림 매핑의 길이에는 나중에 지정하는 정의 필드의 합계만 포함된다는 점에 유의하세요. 즉, 이 길이를 통해 나중에 스트림 정의 유형이 몇 개인지 알 수 있습니다. 스트림 정의 필드 중 stream_type(1BYTE), Elementary_stream_id(1byte) 및 Elementary_stream_info_length(2byte)는 4바이트이므로 Elementary_stream_map_length/4를 사용하여 나중에 정의된 여러 스트림 유형 정보를 얻을 수 있습니다)<.>스트림 유형 필드 stream_type
표 2-29에 따라 스트림 유형을 지정하는 8비트 필드입니다. 이 필드는 PES 패킷에 포함된 기본 스트림만 표시할 수 있으며 값은 0x05일 수 없습니다.
(여기서 국가 표준 GB28181의 정의에 따라 일시적으로 알 수 있습니다.1. MPEG-4 비디오 스트림: 0x10; 2. H.264 비디오 스트림 : 0x1B; 3. SVAC 비디오 스트림: 4. G.711 오디오 스트림: 5. 🎜>6. G.723.1 오디오 스트림:
7. G.729 오디오 스트림:
8. 🎜 >프로그램 매핑 스트림 필드는 키프레임이 패키징되었을 때만 존재하기 때문에 PS 패키징의 스트림 인코딩 유형을 판단하고 싶다면 이 필드를 기준으로 판단하시면 됩니다
)기본적으로 스트림 식별 필드 Elementary_stream_id
8비트 필드로, 기본 스트림이 위치한 PES 패킷의 PES 패킷 헤더에 있는 stream_id 필드 값을 나타냅니다.
(이 필드의 정의, 0x(C0~DF)는 오디오, 0x(E0~EF)는 비디오를 의미)
기본 스트림 정보 length 필드 elmentary_stream_info_length
16비트 필드로, 이 필드 바로 뒤에 오는 설명자의 바이트 길이를 나타냅니다. (은 이 유형의 스트림 설명 길이입니다. 이 필드 뒤에 지정된 길이는 Elementary_stream_map_length로 지정된 범위 클래스에 속하지 않습니다.)
CRC 32
field CRC_32
전체 프로그램 스트림 맵을 처리한 후 부록 A에 정의된 디코더 레지스터에서 출력 값 0을 생성하는 CRC 값을 포함하는 32비트 필드입니다.이 필드를 분석하려면 프로그램 스트림 매핑의 시작을 나타내는 0x000001BC 값의 비트 문자열이 필요합니다. . 헤더 길이를 읽고 직접 건너뜁니다. 예, 스트림 인코딩 유형을 구문 분석해야 하는 경우 이 필드를 자세히 구문 분석해야 합니다.
=================PES 팩
=============== === =============다음으로 PES 패키지의 내용을 분석해 보겠습니다. PES 패키지=PES 헤더+코드 원시 데이터;
PES 헤더를 살펴보겠습니다. (//m.sbmmt.com/에서)
그럼 파싱 단계를 살펴보겠습니다. (MPEG-2 표준 문서에서)
표 2-17 PES 그룹화
언어 |
숫자 |
니모닉 |
|||||||||||||
PES_packet(){ |
|
|
|||||||||||||
packet_start_code_prefix |
24 |
bslbf |
|||||||||||||
stream_id |
8 |
uimsbf |
|||||||||||||
PES_packet_length |
16 |
uimsbf |
|||||||||||||
if(stream_id != program_stream_map |
|
|
|||||||||||||
&& stream_id !=padding_stream |
|
|
|||||||||||||
&& stream_id !=private_stream_2 |
|
|
|||||||||||||
&& stream_id !=ECM |
|
|
|||||||||||||
&& stream_id =EMM |
|
|
|||||||||||||
&& stream_id !=program_stream_directory |
|
|
|||||||||||||
&& stream_id !=DSMCC_stream |
|
|
|||||||||||||
&& stream_id !=ITU-T Rec.H.222.1 type E 스트림){ |
|
|
|||||||||||||
'10' |
2 |
bslbf |
|||||||||||||
PES_scrambling_control |
2 |
bslbf |
|||||||||||||
PES_우선순위 |
1 |
bslbf |
|||||||||||||
data_alignment_indicator |
1 |
bslbf |
|||||||||||||
저작권 |
1 |
bslbf |
|||||||||||||
원본_또는_복사 |
1 |
bslbf |
|||||||||||||
PTS_DTS_flags |
2 |
bslbf |
|||||||||||||
ESCR_flag |
1 |
bslbf |
|||||||||||||
ES_rate_flag |
1 |
bslbf |
|||||||||||||
DSM_trick_mode_flag |
1 |
bslbf |
|||||||||||||
additional_copy_info_flag |
1 |
bslbf |
|||||||||||||
PES_CRC_flag |
1 |
bslbf |
|||||||||||||
PES_extension_flag |
1 | bslbf |
|||||||||||||
PES_header_data_length |
8 |
uimsbf |
|||||||||||||
if(PTS_DTS_flags ==' 10'){ |
|
|
|||||||||||||
'0010' |
4 |
bslbf |
|||||||||||||
PTS[32..30] |
3 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
PTS[29..15] |
15 |
bslbf |
|||||||||||||
marker_bit |
1 | bslbf |
|||||||||||||
PTS[14..0] | 15 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
if(PTS_DTS_flags =='11'){ |
|
|
|||||||||||||
'0011' |
4 |
bslbf |
|||||||||||||
PTS[32..30 ] |
3 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
PTS[29..15] |
15 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
PTS[14..0] |
15 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
'0001' |
4 |
bslbf |
|||||||||||||
PTS[32..30] |
3 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
PTS[29..15] |
15 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
PTS[14..0] |
15 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
if(ESCR_flag =='1'){ |
|
|
|||||||||||||
예약됨 |
2 |
bslbf |
|||||||||||||
ESCR_base[32..30] |
3 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
ESCR_base[29..15] |
15 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
ESCR_base[14..0] |
15 |
bslbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
ESCR_extension |
9 |
uimsbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
if(ES_rate_flag =='1'){ |
|
|
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
ES_rate |
22 |
uimsbf |
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
if (DSM_trick_mode_flag =='1'){ |
|
|
|||||||||||||
trick_mode_control |
3> 🎜> |
|
|||||||||||||
field_id | 2 | ||||||||||||||
bslbf
|
intra_slice_refresh |
1 |
|||||||||||||
bslbf
|
주파수 잘림 |
2 |
|||||||||||||
bslbf
|
} |
|
|||||||||||||
else if (rick_mode_control = = Slow_motion ) { |
|
|
|||||||||||||
rep_cntrl | 5 | ||||||||||||||
uimsbf
|
} |
|
|||||||||||||
else if ( 트릭_모드 _control = = 동결_프레임 ) { |
|
|
|||||||||||||
field_id | 2 | ||||||||||||||
uimsbf
|
예약됨 |
3 |
|||||||||||||
bslbf
|
} |
|
|||||||||||||
그렇지 않은 경우 ( 트릭 모드 _control = = fast_reverse ) { |
|
|
|||||||||||||
field_id |
2 | ||||||||||||||
bslbf
|
intra_slice_refresh |
1 |
|||||||||||||
bslbf
|
주파수 잘림 |
2 |
bslbf |
||||||||||||
else if ( 트릭_모드_컨트롤 = = 느린_역방향 ) { |
|
|
|||||||||||||
rep_cntrl |
5 |
uimsbf |
|||||||||||||
} |
|
|
|||||||||||||
그밖에 |
|
|
|||||||||||||
예약됨 |
5 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
if ( added_copy_info_flag = ='1'){ |
|
|
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
추가_복사_정보 |
7 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
if (PES_CRC_flag=='1'){ |
|
|
|||||||||||||
previous_PES_packet_CRC |
16 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
if ( PES_extension_flag =='1') { |
|
|
|||||||||||||
PES_private_data_flag |
1 |
bslbf |
|||||||||||||
pack_header_field_flag |
1 |
bslbf |
|||||||||||||
program_packet_sequence_counter_flag |
1 |
bslbf |
|||||||||||||
P-STD_buffer_flag |
1 |
bslbf |
|||||||||||||
예약됨 |
3 |
bslbf |
|||||||||||||
PES_extension_flag_2 |
1 |
bslbf |
|||||||||||||
if(PES_private_data_flag =='1'){ |
|
|
|||||||||||||
PES_private_data |
128 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
if (pack_header_field_flag == '1'){ |
|
|
|||||||||||||
pack_field_length |
8 |
uimsbf |
|||||||||||||
pack_header() |
|
|
|||||||||||||
} |
|
|
|||||||||||||
if (program_packer_sequence_counter_flag == '1'){ |
|
|
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
program_packet_sequence_counter |
7 |
uimsbf |
|||||||||||||
마커 -bit |
1 |
bslbf |
|||||||||||||
MPEG1_MPEG2_식별자 |
1 |
bslbf |
|||||||||||||
original_stuff_length |
6 |
uimsbf |
|||||||||||||
} |
|
|
|||||||||||||
if (P-STD_buffer_flag = '1'({ |
|
|
|||||||||||||
'01' |
2 |
bslbf |
|||||||||||||
P-STD_buffer_scale |
1 |
bslbf |
|||||||||||||
P-STD_buffer_size |
13 |
uimsbf |
|||||||||||||
} |
|
||||||||||||||
if (PES_extension_flag_2 == '1'{ |
|
|
|||||||||||||
marker_bit |
1 |
bslbf |
|||||||||||||
PES_extension_field_length |
7 |
uimsbf |
|||||||||||||
for(i=0;i< ;PES_extension_field_length;i++){ |
|
|
|||||||||||||
예약됨 |
8 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
} |
|
|
|||||||||||||
} |
|
|
|||||||||||||
for (i=0;i |
|
|
|||||||||||||
stuffing_byte |
8 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
(i=0;i |
|
|
|||||||||||||
PES_packet_data_byte |
8 |
bslbf |
|||||||||||||
} |
|
|
|||||||||||||
} |
|
|
|||||||||||||
else if (stream_id = = program_stream_map |
|
|
|||||||||||||
|| stream_id = = private_stream_2 |
|
|
|||||||||||||
|| stream_id = = ECM |
|||||||||||||||
| | stream_id = = EMM | |||||||||||||||
PES_packet_data_byte
|
8
|
bslbf
|
|||||||||||||
padding_byte
|
8
|
bslbf
|
|||||||||||||
|
|||||||||||||||
stream_id |
참고 |
스트림 인코딩 |
1011 1100 |
1 |
program_stream_map(0xBC) |
1011 1101 |
2 |
private_stream_1(0xBD) |
1011 1110 |
|
padding_stream(0xBE) |
1011 1111 |
3 |
private_stream-2(0xBF) |
110x xxxx |
|
GB/T XXXX.3 또는 GB/T AAAA.3 오디오 스트림 번호 xxxx(0xC0~0xDF ) |
1110 xxxx |
|
GB/T XXXX. 2 또는 GB/T AAAA.2 비디오 스트림 번호 xxxx (0xE0~0xEF) |
1111 0000 |
3 |
ECM_stream(0xF0) |
1111 0001 |
3 |
EMM_stream(0xF1) |
1111 0010 |
5 |
GB/T XXXX.1 부록 B 또는 GB/T XXXX.6_DSMCC_stream(0xF2) |
1111 0011 |
2 |
ISO/IEC_13522_stream(0xF3) |
1111 0100 |
6 |
ITU-T Rec. H.222.1 Type A |
1111 0101 |
6 |
ITU-T Rec. H.222.1 Type B |
1111 0110 |
6 |
ITU-T Rec. |
1111 0111 |
6 |
ITU-T Rec. H.222.1 D형 |
1111 1000 |
6 |
ITU -T Rec. E |
1111 1001 |
7 |
ancillary_stream(0xF9) |
1111 1010…1111 1110 |
| 데이터 스트림 보존 |
1111 1111 |
4 |
program_stream_directory(0xFF) |
x 기호는 '0' 또는 '1' 값이 모두 허용되고 동일한 결과를 생성할 수 있음을 나타냅니다. 스트림 유형. 스트림 번호는 x 값에 의해 결정됩니다. 참고 1 program_stream_map 유형의 PES 패킷에는 2.5.4.1 에 지정된 고유한 구문이 있습니다. private_stream_1 및 ISO/IEC_13352_stream 유형의 2개 PES 패킷은 GB/T XXXX.2 및 GB/T XXXX.3 오디오 스트림과 동일한 PES 패킷 구문을 따릅니다. private_stream_2, ECM_stream 및 EMM_stream 유형의 3개 PES 패킷은 PES_packet_length 필드 뒤에 구문이 지정되지 않는다는 점을 제외하면 private_stream_1과 유사합니다. 4 program_stream_directory 유형의 PES 패킷에는 2.5.5 에 지정된 고유한 구문이 있습니다. DSM_CC_stream 유형의 5개 PES 패킷에는 GB/T XXXX.6으로 지정되는 고유한 구문이 있습니다. 6 stream_id는 표 2-29의 stream_type 0x09와 연결됩니다. 7 stream_id는 PES 그룹화에만 사용됩니다. PES 패킷은 전송 스트림의 프로그램 스트림 또는 GB/T AAAA.1 시스템 스트림에서 발생하는 데이터를 전달합니다(2.4.3.7 참조). |
PES 패킷의 각 필드에 대한 의미 정의
패킷 시작 코드 접두사 필드 packet_start_code_prefix
24비트 코드입니다. 다음 stream_id와 동일하게 패킷의 시작을 식별하는 패킷 시작 코드를 구성합니다. '0000 0000 0000 0000 0000 0001'(0x000001) 값을 갖는 비트열입니다.
스트림 식별 필드 stream_id
프로그램 스트림에서 기본 스트림의 수와 유형을 지정합니다. 정의는 표 2-18을 참조하십시오. 전송 스트림에서는 표 2-18에 정의된 기본 스트림 유형을 올바르게 설명하는 유효한 값으로 설정될 수 있습니다. 전송 스트림에서 기본 스트림 유형은 2.4.4의 프로그램별 정보에 지정됩니다.
PES패킷 길이 필드 PES_packet_length
16비트 필드로, PES 패킷에서 이 필드 뒤에 오는 바이트 수를 나타냅니다. 값 0은 PES 패킷 길이가 지정되지 않았거나 무제한임을 나타냅니다. 이는 전송 스트림 패킷의 비디오 기본 스트림 중 하나에서 발생하는 바이트가 페이로드에 포함된 PES 패킷에서만 허용됩니다.
PES스크램블링 제어 필드 PES_scrambling_control
PES 패킷 페이로드의 스크램블링 방법을 나타내는 2비트 필드입니다. PES 계층에서 스크램블링이 발생하면 선택 필드를 포함한 PES 패킷 헤더는 스크램블되지 않아야 합니다(2-19 참조).
PES우선순위 필드 PES_priority
PES 패킷의 페이로드 우선순위를 나타내는 1비트 필드입니다. '1'은 이 필드가 '0'으로 설정된 PES 패킷의 페이로드가 PES 패킷의 페이로드보다 우선순위가 높다는 것을 나타냅니다. 멀티플렉서는 이 필드를 사용하여 기본 스트림의 데이터 우선순위를 지정할 수 있습니다. 전송 메커니즘은 이 필드를 수정해서는 안 됩니다.
데이터 정렬 표시기 필드 data_alignment_indicator
1비트 플래그입니다. '1'로 설정되면 data_alignment_indicator 디스크립터가 있는 경우 PES 패킷 헤더 뒤에 2.6.10의 data_alignment_indicator가 가리키는 비디오 시작 코드 또는 오디오 동기화 단어가 온다는 의미입니다. 값이 '1'이고 해당 디스크립터가 없는 경우 표 2-47 및 표 2-48에서 alignment_type '01'로 표시되는 정렬이 필요합니다. 값이 '0'인 경우 이러한 정렬이 있는지 여부가 정의되지 않습니다.
저작권 필드 copyright
1자리 필드입니다. '1'로 설정되면 관련 PES 패킷 페이로드의 자료가 저작권으로 보호됨을 나타냅니다. 값이 '0'인 경우 해당 자료가 저작권으로 보호되는지 여부를 정의하지 않습니다. 2.6.24에 설명된 저작권 설명자는 PES 패킷을 포함하는 기본 스트림과 연관됩니다. 설명자가 PES 패킷을 포함하는 자료에 적용되는 경우 저작권 플래그는 '1'로 설정됩니다.
원본 또는 복사 필드 original_or_copy
1비트 필드입니다. '1'로 설정된 경우 관련 PES 패킷 페이로드의 내용이 원본임을 나타내고, 값이 '0'인 경우 관련 PES 패킷 페이로드의 내용이 복사본임을 나타냅니다.
PTS DTS 플래그 필드 PTS_DTS_flags
2비트 필드입니다. 값이 '10'이면 PES 그룹 헤더에 PTS 필드가 나타나야 하고, 값이 '11'이면 PES 그룹 헤더에 PTS 필드와 DTS 필드가 모두 나타나야 합니다. , PTS 필드 PES 패킷 헤더에는 DTS 필드와 DTS 필드가 모두 나타나지 않습니다. 값 '01'은 허용되지 않습니다.
ESCR플래그 필드 ESCR_flag
1비트 플래그입니다. '1'로 설정되면 ESCR 기본 및 확장 필드가 PES 패킷 헤더에 나타납니다. 값이 '0'이면 ESCR 필드가 없음을 나타냅니다.
ES비율 플래그 필드 ES_rate_flag
1비트 플래그. '1'로 설정되면 PES 패킷 헤더에 ES_rate 필드가 나타남을 나타내고, '0' 값은 ES_rate 필드가 없음을 나타냅니다.
DSM트릭 모드 플래그 필드 DSM_trick_mode_flag
1비트 플래그입니다. '1'로 설정되면 8비트 스턴트 모드 필드가 있음을 의미하고, 값이 '0'으로 설정되면 해당 필드가 없음을 의미합니다.
추가 저작권 정보 플래그 필드 added_copy_info_flag
1비트 플래그입니다. '1'로 설정되면 추가 복사정보 필드가 있다는 의미이고, 값이 '0'이면 해당 필드가 없다는 의미입니다.
PES CRC플래그 필드 PES_CRC_flag
1비트 플래그입니다. '1'로 설정되면 PES 패킷 헤더에 CRC 필드가 나타납니다. 값이 '0'이면 해당 필드가 없음을 나타냅니다.
PES확장 플래그 필드 PES_extension_flag
1비트 플래그입니다. '1'로 설정되면 PES 패킷 헤더에 확장 필드가 있음을 나타내고, 값이 '0'이면 해당 필드가 없음을 나타냅니다.
PES헤더 데이터 길이 필드 PES_header_data_length
8비트 필드입니다. 선택적 필드와 PES 패킷 헤더에 포함된 패딩 바이트가 차지하는 총 바이트 수를 나타냅니다. 이 필드 앞의 바이트는 선택적 필드가 있는지 여부를 나타냅니다.
마커 비트 필드 marker_bit
값이 '1'인 1비트 필드입니다.
타임스탬프 필드 PTS 표시
프리젠테이션 시간과 디코딩 시간의 관계는 다음과 같습니다. PTS는 세 개의 개별 필드에 인코딩된 33비트 숫자입니다. 시스템 타겟 디코더에서 기본 스트림 n의 k번째 프리젠테이션 단위의 프리젠테이션 시간 tpn(k)을 나타냅니다. PTS의 값은 시스템 클록 주파수(예: 90kHz)의 1/300 단위입니다. 표시 시간은 식 2-11에 따라 PTS에 의해 계산됩니다. 프레젠테이션 타임스탬프 인코딩 빈도에 대한 제약 조건은 2.7.4를 참조하세요.
PTS(k)=((system_clock_주파수×tpn(k)) p 300) % 233 (2-11)
이 중 tpn(k)가 표시 단위 P n(k)의 표시 시간입니다.
오디오의 경우 PES 그룹 헤더에 PTS가 있으면 PES 그룹에서 시작하는 첫 번째 액세스 단위를 의미합니다. PES 패킷에 오디오 액세스 단위의 첫 번째 바이트가 있으면 PES 패킷에서 시작하는 오디오 액세스 단위가 있습니다. 동영상의 경우 PES 패킷 헤더에 PTS가 있으면 PES 패킷에서 시작하는 첫 번째 영상 시작 코드가 포함된 액세스 단위를 의미합니다. PES 그룹에 그림 시작 코드의 첫 번째 바이트가 있으면 PES 그룹에서 시작하는 그림 시작 코드가 있습니다. low_delay 시퀀스의 오디오 프리젠테이션 장치(PU), 비디오 PU 및 B 영상의 경우 프리젠테이션 시간 tpn(k)는 tdn(k) . non-low_delay의 I 픽처와 P 픽처의 경우, 액세스 유닛(AU) k와 k' 사이에 디코딩 불연속이 없을 때 프리젠테이션 시간 tp
n(k)는 동일해야 합니다. 다음 전송된 I 화면 또는 P 화면 tdn(k)의 디코딩 시간까지(2.7.5 참조). 디코딩 불연속성 또는 스트림 종료가 있는 경우 tpn(k)와 tdn(k)의 차이점은 불연속성 또는 종료 없이 초기 스트림을 계속해야 한다는 것입니다. 같은. 참고 1: low_delay 시퀀스는 low_delay 플래그가 설정된 비디오 시퀀스입니다(GB/T XXXX.2의 6.2.2.3 참조).
오디오에 필터링이 있는 경우 시스템 모델은 필터링으로 인해 지연 시간이 발생하지 않는다고 가정합니다. 따라서 인코딩 시 PTS에 포함된 샘플은 디코딩 시 PTS에 포함된 샘플과 동일합니다. 확장 가능한 인코딩에 대해서는 2.7.6을 참조하세요.
타임스탬프 필드 디코딩 DTSDTS는 세 개의 별도 필드에 인코딩된 33비트 숫자입니다. 시스템 타겟 디코더에서 기본 스트림 n의 j번째 프리젠테이션 단위의 디코딩 시간 td
n(j)을 나타냅니다. DTS 값은 시스템 클록 주파수(예: 90kHz)의 1/300 단위입니다. 디코딩 시간은 방정식 2-12에 따라 DTS에 의해 계산됩니다.
DTS(j)=((system_clock_주파수×td n(j)) p 300) % 233 (2-12)그 중 td
n( j)는 액세스 유닛 An(j)의 디코딩 시간이다. 동영상의 경우 PES 패킷 헤더에 DTS가 있으면 PES 패킷에서 시작하는 첫 번째 영상 시작 코드가 포함된 액세스 단위를 의미합니다. PES 그룹에 영상 시작 코드의 첫 번째 바이트가 있으면 PES 그룹에서 영상 시작 코드가 시작됩니다.
확장 가능한 인코딩은 2.7.6을 참조하세요.
ESCR필드 ESCR_base, ESCR_extension 42비트 필드, 두 부분으로 인코딩됨. 첫 번째 부분은 33비트 길이의 필드이고 그 값은 ESCR_base(i) 수식 2-14와 같다; 두 번째 부분은 9비트 길이의 필드이고 그 값은 ESCR_ext(i)이다. 방정식 2-15에 의해. ESCR 필드는 기본 스트림에 있는 ESCR_base의 마지막 비트를 포함하는 바이트가 PES-STD 출력에 도착할 것으로 예상되는 시간을 나타냅니다(2.5.2.4 참조).
특별히
ESCR(i)=ESCR_base(i)×300+ESCR_ext(i) (2-13)그 중:
ESCR_base(i) =((시스템_시계_주파수×t(i)) p 300) % 233 (2-14)
ESCR _ext(i)=((system_clock_주파수×t(i)) p 1) % 300 (2-15) ESCR 및 ES_rate 필드(바로 아래 의미 참조)에는 PES 스트림 시퀀스와 관련된 타이밍 정보가 포함됩니다. 이 필드는 2.7.3에 정의된 제약 조건을 충족해야 합니다.
기본 스트림 속도 필드 ES_rate22비트 부호 없는 정수입니다. PES 스트림의 경우 시스템의 대상 디코더가 PES 패킷을 수신하는 속도를 나타냅니다. 이 필드는 새로운 ES_rate 필드가 나타날 때까지 자신이 속한 PES 패킷과 동일한 PES 스트림의 후속 PES 패킷에서 유효합니다. 이 필드의 값은 50바이트/초 단위이며 0일 수 없습니다. 이 필드는 PES 스트림의 바이트가 P-STD 입력에 도착하는 시간을 정의하는 데 사용됩니다(2.5.2.4의 정의 참조). 이 필드에 인코딩된 값은 PES 패킷마다 다를 수 있습니다.
트릭 모드 제어 필드 Trick_mode_control 3비트 필드. 관련 비디오 스트림에 적용되는 스턴트 모드를 나타냅니다. 다른 유형의 기본 스트림의 경우 이 필드와 다음 5비트의 의미가 정의되지 않습니다. 트릭 모드 상태의 정의는 2.4.2.3의 트릭 모드 섹션을 참조하세요. Trick_mode 상태가 false인 경우 GB/T XXXX.2 비디오의 경우 디코딩 프로세스에 의해 출력되는 프로그레시브 시퀀스의 각 프레임 수 N은 Repeat_first_field 및 top_field_first 필드에 의해 지정됩니다. GB/T AAAA.2 비디오의 경우 시퀀스 제목에 따라 결정됩니다. 인터레이스 시퀀스의 경우, Trick_mode 상태가 false인 경우 GB/T XXXX.2 비디오의 경우 N 횟수는 Repeat_first_field 및 Progressive_frame 필드에 의해 지정됩니다. trick_mode 상태가 true인 경우 N값에 따라 사진이 재생되는 횟수가 달라집니다. 표 2-20 스턴트 모드 제어 값 值 描 述 '000' 快进 '001' 慢动作 '010' 冻结帧 '011' 快倒 '100' 慢倒 '101'-'111' 保留 이 필드의 값이 변경되거나 스턴트 모드 작동이 중지되면 다음 상황의 조합이 발생할 수 있습니다. l 시간 기반이 불연속적입니다. l 디코딩이 불연속적입니다. ; l 연속성 카운터는 연속적이지 않습니다. 트릭 모드의 경우 비표준 디코딩 및 프리젠테이션 속도로 인해 비디오 기본 스트림 데이터에 정의된 일부 필드가 잘못된 값. 마찬가지로 조각 구조에 대한 의미론적 제약 조건도 유효하지 않을 수 있습니다. 이러한 예외와 관련된 비디오 구문 요소는 다음과 같습니다: v_axis_Positive; l field_sequence; l subcarrier; lburst_amplitude; l subcarrier_phase; 트릭 모드에서 디코더는 인코딩에 의존해서는 안 됩니다. 이 필드의 값. 표준에서는 디코더가 Trick_mode_control 필드를 디코딩할 수 있도록 요구하지 않습니다. 그러나 이 필드를 디코딩할 수 있는 디코더는 다음 표준 요구 사항을 충족해야 합니다. trick_mode_control 필드 값 '000'입니다. 이 값이 있으면 빨리 감기 비디오 스트림을 나타내며 PES 패킷 헤더에서 다음 5비트의 의미를 정의합니다. extra_slice_refresh 비트는 누락된 매크로블록이 있을 수 있음을 나타내기 위해 '1'로 설정될 수 있습니다. 디코더는 매크로블록을 이전 디코딩된 화면의 동일한 위치로 대체할 수 있습니다. 표 2-21에 정의된 field_id 필드는 표시되어야 하는 필드를 나타냅니다. Frequency_truncation 필드는 포함될 수 있는 제한된 계수 집합을 나타냅니다. 이 필드 값의 의미는 표 2-22에 나와 있습니다. trick_mode_control 필드 값 '001'입니다. 이 값이 있으면 슬로우 모션 비디오 스트림을 나타내며 PES 패킷 헤더에서 다음 5비트의 의미를 정의합니다. 프로그레시브 시퀀스의 경우 그림은 N×rep_cntrl 시간 동안 표시되어야 하며, 여기서 N은 위와 같이 정의됩니다. GB/T AAAA.2 비디오 및 GB/T XXXX.2 비디오 프로그레시브 시퀀스의 경우 사진은 N×rep_cntrl 시간 동안 표시되어야 합니다. 여기서 N은 위와 같이 정의됩니다. GB/T XXXX.2 인터레이스 시퀀스의 경우 이 화면은 N×rep_cntrl 시간 동안 표시되어야 합니다. 사진이 프레임 사진인 경우 표시할 첫 번째 필드는 top_field_first가 1일 때 상단 필드여야 하고, top_field_first가 0일 때 하단 필드여야 합니다(GB/T XXXX.2 참조). 이 필드는 N×rep_cntrl/2번 표시됩니다. 화면의 다른 필드는 N-N×rep_cntrl/2회 동안 표시됩니다. trick_mode_control 필드의 값 '010'입니다. 이 값이 나타나는 경우 이는 정지 프레임 비디오 스트림을 나타내며 PES 패킷 헤더에서 다음 5비트의 의미를 정의합니다. 표 2-21에 정의된 field_id 필드는 표시되어야 하는 필드를 나타냅니다. field_id 필드는 PES 패킷에 0 페이로드 바이트가 포함되지 않는 한 이 필드를 포함하는 PES 패킷에서 시작하는 첫 번째 비디오 액세스 단위를 나타냅니다. 후자의 경우 field_id 필드는 가장 최근의 이전 비디오 액세스 단위를 나타낸다. trick_mode_control 필드의 값 '011'입니다. 이 값이 있으면 되감기 비디오 스트림을 나타내고 PES 패킷 헤더에서 다음 5비트의 의미를 정의합니다. extra_slice_refresh 비트는 누락된 매크로블록이 있을 수 있음을 나타내기 위해 '1'로 설정될 수 있습니다. 디코더는 매크로블록을 이전 디코딩된 영상의 동일한 위치로 대체할 수 있습니다. 표 2-21에 정의된 field_id 필드는 표시되어야 하는 필드를 나타냅니다. Frequency_truncation 필드는 포함될 수 있는 제한된 계수 집합을 나타냅니다. 이 필드 값의 의미는 표 2-22 "계수 선택 값"에 나와 있습니다. trick_mode_control 필드의 값 '100'입니다. 이 값이 있으면 느린 역방향 비디오 스트림을 나타내며 PES 패킷 헤더에서 다음 5비트의 의미를 정의합니다. GB/T AAAA.2 비디오 및 GB/T XXXX.2 비디오 프로그레시브 시퀀스의 경우 그림은 N×rep_cntrl 시간 동안 표시되어야 하며, 여기서 N은 위와 같이 정의됩니다. GB/T XXXX.2 인터레이스 시퀀스의 경우 이 화면은 N×rep_cntrl 시간 동안 표시되어야 합니다. 사진이 프레임 사진인 경우 표시할 첫 번째 필드는 top_field_first가 1일 때 하단 필드여야 하고, top_field_first가 '0'일 때 상단 필드여야 합니다(GB/T XXXX.2 참조). 이 필드는 N×rep_cntrl/2회 동안 표시됩니다. 화면의 다른 필드는 N-N×rep_cntrl/2회 동안 표시됩니다. 필드 식별 필드 field_id 표시되어야 하는 필드를 나타내는 2자리 필드입니다. 표 2-21에 따라 코딩한다. 표 2-21 field_id 필드 제어 값 值 描 述 '00' 仅自顶向下播放 '01' 仅自底向上播放 '10' 播放所有帧 '11' 保留 td> 值 描述 '00' 仅DC系数非0 '01' 仅前三个系数非0 '10' 仅前六个系数非0 '11' 所有系数均可能非0 디스플레이 카운트 제어 필드 rep_cntrl 인터레이스 화면의 각 필드의 디스플레이 카운트 또는 프로그레시브 스크린 디스플레이 수를 나타내는 5자리 필드입니다. 인터레이스 영상의 경우 상단 필드 또는 하단 필드를 먼저 표시해야 하는지 여부는 비디오 시퀀스 헤더의 트릭_모드_제어 필드와 top_field_first 필드의 함수입니다. 이 필드 값은 '0'일 수 없습니다. 추가 저작권 정보 필드 added_copy_info 저작권 정보와 관련된 특수 데이터가 포함된 7비트 필드입니다. 이전 PES패킷 CRC 필드 이전_PES_packet_CRC 16비트 필드입니다. 이 필드에는 이전 PES 패킷(해당 PES 패킷의 헤더 제외)을 처리한 후 디코더의 16개 레지스터에서 0 출력을 생성하는 CRC 값이 포함됩니다. 이 CRC 값은 부록 A에 정의된 값과 유사하지만 다음과 같은 다항식을 갖습니다. 🎜> PES개인 데이터 플래그 필드 PES_private_data_flag Pack 헤더 필드 플래그 필드 pack_header_field_flag 1비트 플래그입니다. '1'로 설정되면 PES 패킷 헤더에 GB/T AAAA.2 패킷 헤더 또는 프로그램 스트림 패킷 헤더가 포함되어 있음을 의미합니다. 이 필드가 프로그램 스트림에 포함된 PES 패킷에 있는 경우 해당 값은 '0'입니다. 전송 스트림에서 '0' 값은 PES 헤더에 패킷 헤더가 없음을 의미합니다. 프로그램 패킷 시퀀스 카운트 플래그 필드 program_packet_sequence_counter_flag 1비트 플래그입니다. 값 '1'은 PES 패킷에 program_packet_sequence_counter, MPEG1_MPEG2_identifier 및 original_stuff_length 필드가 있음을 나타냅니다. '0' 값은 해당 필드가 PES 패킷 헤더에 포함되지 않음을 나타냅니다. P-STD 버퍼 플래그 필드 P-STD_buffer_flag PES확장 플래그 필드 PES_extension_flag_2 PES개인 데이터 필드 PES_private_data 팩 필드 길이 필드 pack_field_length 8비트 필드입니다. pack_header_field()의 길이를 바이트 단위로 나타냅니다. 프로그램 패킷 시퀀스 카운트 필드 program_packet_sequence_counter 7비트 필드입니다. 연속성 카운터와의 일관성을 제공하기 위해 프로그램 스트림이나 GB/T AAAA.1 스트림 또는 전송 스트림의 단일 프로그램 정의가 있는 PES 패킷의 각 후속 PES 패킷에 대해 증가되는 선택적 카운터입니다(2.4.3.2 참조). 유사한 기능을 위해. 프로그램 스트림이나 원본 GB/T AAAA.1 스트림에서 초기 PES 패킷 시퀀스를 검색하는 데 사용할 수 있습니다. 이 카운터는 최대값에 도달한 후 0으로 돌아갑니다. PES 그룹은 반복될 수 없습니다. 따라서 복합 프로그램에서 두 개의 연속 PES 패킷은 동일한 program_packet_sequence_counter 값을 가져서는 안 됩니다. MPEG1 MPEG2 식별자 필드 MPEG1_MPEG2_identifier 원래 스터핑 길이 필드 original_stuff_length P-STD버퍼 스케일 필드 P-STD_buffer_scale P-STD버퍼 크기 필드 P-STD_buffer_size 13비트 부호 없는 정수입니다. PES 패킷이 프로그램 스트림에 포함되어 있는 경우에만 의미가 있습니다. P-STD 입력 버퍼 BSn의 크기를 정의합니다. P-STD_buffer_scale의 값이 '0'인 경우 P-STD_buffer_size는 버퍼의 크기를 128바이트 단위로 측정한다. P-STD_buffer_scale의 값이 '1'이면 P-STD_buffer_size는 버퍼의 크기를 1024바이트 단위로 측정한다. 따라서: if ( P-STD_buffer_scale == 0) BSn=P-STD_buffer_size ×128 > -17) GB/T XXXX.1 시스템 대상 디코더가 이 필드를 수신하면, 해당 인코딩 값은 즉시 적용됩니다. PES확장 필드 길이 필드 PES_extension_field_length 7비트 필드입니다. 예약된 바이트까지 포함하여 PES 확장 필드에서 이 필드 뒤에 오는 데이터의 길이를 바이트 단위로 지정합니다. 상수 값 '1111 1111'을 갖는 8비트 필드입니다. 채널 등의 요구 사항을 충족하기 위해 인코더로 삽입할 수 있습니다. 디코더는 이 필드를 삭제합니다. PES 패킷 헤더에는 32개의 패딩 바이트만 나타날 수 있습니다. 이 필드는 패킷의 stream_id 또는 PID 데이터 바이트로 지정된 기본 스트림에서 연속되어야 합니다. 기본 스트림 데이터가 GB/T XXXX.2 또는 GB/T XXXX.3을 준수하는 경우 이 필드는 이 표준의 바이트로 정렬되어야 합니다. 기본 스트림의 엔디안이 유지되어야 합니다. 이 필드의 바이트 수 N은 PES_packet_length 필드에 의해 지정됩니다. N은 PES_packet_length에서 PES_packet_length 필드의 마지막 바이트와 첫 번째 PES_packet_data_byte 사이의 바이트 수를 뺀 값과 같습니다. 8비트 필드, 값은 상수 '1111 1111'입니다. 이 필드는 디코더에 의해 삭제됩니다. 더 많은 PS 스트림 형식과 분석 요약을 보려면 PHP 중국어 웹사이트에서 관련 기사를 주목하세요!
값
설명
'000'
빨리감기
'001'
슬로우 모션
'010'
정지 프레임
'011'
빠르게 되감기
'100' 천천히
'101 ' -'111'
예약됨
슬라이스 내 참조 필드 extra_slice_refresh 1비트 플래그. '1'로 설정되면 PES 패킷의 인코딩된 비디오 데이터에 누락된 매크로블록이 있을 수 있음을 나타내고, '0'으로 설정되면 위의 상황이 발생하지 않을 수 있음을 나타냅니다. 자세한 내용은 GB/T XXXX.2를 참조하세요. 디코더는 손실된 매크로블록을 이전 디코딩된 영상의 동일한 위치에 있는 매크로블록으로 대체할 수 있습니다. 주파수 잘림 필드 Frequency_truncation2비트 필드입니다. PES 패킷에서 데이터를 인코딩할 때 제한된 계수 세트가 사용될 수 있음을 지적합니다. 그 값은 표 2-22에 정의되어 있습니다. 표 2-22 계수 선택 값
값
설명
'00'
하향식으로만 재생
'01'
아래에서 위로만 재생
'10'
모든 프레임 재생
'11'
예약됨
값
설명
'00'
DC 계수만 0이 아님
'01'
처음 3개만 계수가 0이 아닙니다
'10'
처음 6개 계수만 0이 아닙니다
테이블> '11'
모든 계수는 0이 아닐 수 있습니다