Files
gb28181/GB28181Device/rtp/ps.h
2024-12-15 20:42:32 +08:00

205 lines
5.2 KiB
C

/***************************************************************************************
*
* IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
* Copyright (C) 2014-2022, Happytimesoft Corporation, all rights reserved.
*
* Redistribution and use in binary forms, with or without modification, are permitted.
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
* language governing permissions and limitations under the License.
*
****************************************************************************************/
#ifndef HT_PS_H
#define HT_PS_H
#pragma pack(push) // 保存对齐状态
#pragma pack(1)
typedef struct ps_header
{
uint8 system_header_start_code[4]; //'0x000001BA'
uint8 system_clock_reference_base21 : 2;
uint8 marker_bit : 1;
uint8 system_clock_reference_base1 : 3;
uint8 fix_bit : 2; //'01'
uint8 system_clock_reference_base22;
uint8 system_clock_reference_base31 : 2;
uint8 marker_bit1 : 1;
uint8 system_clock_reference_base23 : 5;
uint8 system_clock_reference_base32;
uint8 system_clock_reference_extension1 : 2;
uint8 marker_bit2 : 1;
uint8 system_clock_reference_base33 : 5; //system_clock_reference_base 33bit
uint8 marker_bit3 : 1;
uint8 system_clock_reference_extension2: 7; //system_clock_reference_extension 9bit
uint8 program_mux_rate1;
uint8 program_mux_rate2;
uint8 marker_bit5 : 1;
uint8 marker_bit4 : 1;
uint8 program_mux_rate3 : 6;
uint8 pack_stuffing_length : 3;
uint8 reserved : 5;
}PSHDR;
typedef struct ps_system_header
{
uint8 system_header_start_code[4]; //'0x000001BB'
uint8 header_length[2];
uint8 rate_bound1 : 7;
uint8 marker_bit : 1;
uint8 rate_bound2;
uint8 marker_bit1 : 1;
uint8 rate_bound3 : 7;
uint8 csps_flag : 1;
uint8 fixed_flag : 1;
uint8 audio_bound : 6;
uint8 video_bound : 5;
uint8 marker_bit2 : 1;
uint8 video_lock_flag : 1;
uint8 audio_lock_flag : 1;
uint8 reserved;
uint8 stream_id1;
uint8 std_buffer_size_bound11 : 5;
uint8 std_buffer_bound_scale1 : 1;
uint8 marker_bit13 : 2;
uint8 std_buffer_size_bound12;
uint8 stream_id2;
uint8 std_buffer_size_bound21 : 5;
uint8 std_buffer_bound_scale2 : 1;
uint8 marker_bit23 : 2;
uint8 std_buffer_size_bound22;
}PSSYSHDR;
typedef struct ps_system_map
{
uint8 packet_start_code_prefix[3];
uint8 map_stream_id;
uint8 program_stream_map_length[2];
uint8 program_stream_map_version : 5;
uint8 reserved1 : 2;
uint8 current_next_indicator : 1;
uint8 marker_bit : 1;
uint8 reserved2 : 7;
uint8 program_stream_info_length[2];
uint8 elementary_stream_map_length[2];
uint8 stream_type1;
uint8 elementary_stream_id1;
uint8 elementary_stream_info_length1[2];
uint8 stream_type2;
uint8 elementary_stream_id2;
uint8 elementary_stream_info_length2[2];
uint8 crc32[4];
}PSSYSMAP;
typedef struct pes_header
{
uint8 packet_start_code_prefix[3];
uint8 stream_id;
uint8 PES_packet_length[2];
uint8 original_or_copy :1;
uint8 copyright :1;
uint8 data_alignment_indicator :1;
uint8 PES_priority :1;
uint8 PES_scrambling_control :2;
uint8 fix_bit :2;
uint8 PES_extension_flag :1;
uint8 PES_CRC_flag :1;
uint8 additional_copy_info_flag :1;
uint8 DSM_trick_mode_flag :1;
uint8 ES_rate_flag :1;
uint8 ESCR_flag :1;
uint8 PTS_DTS_flags :2;
uint8 PES_header_data_length;
}PESHDR;
typedef struct
{
uint8 marker_bit :1;
uint8 PTS1 :3;
uint8 fix_bit :4;
uint8 PTS21;
uint8 marker_bit1 :1;
uint8 PTS22 :7;
uint8 PTS31;
uint8 marker_bit2 :1;
uint8 PTS32 :7;
} PTS_TAG, *PPTS_TAG;
#pragma pack(pop) // 保存对齐状态
typedef struct ps_pkt_info
{
uint32 init_flag;
uint32 scr;
uint32 pts;
PSHDR ePSHeader;
PSSYSHDR ePSSHeader;
PSSYSMAP ePSMHeader;
PESHDR ePESHeader;
PTS_TAG ePTS;
} PSPKTI;
#ifdef __cplusplus
extern "C" {
#endif
/*
* vtype : 0x1B - h264; 0x24 - h265; 0x10 - MPEG-4; 0x80 - SVAC
* atype : 0x90 - G711; 0X92 - G722.1; 0X93 - G723.1; 0X99 - G729; 0X9B - SVACss
*/
void ps_init_info(PSPKTI * ps_pkt_i, int vtype, int atype);
int ps_make_header(PSPKTI * ps_pkt_i, uint8 * header, uint32 framelen, uint32 framerate, int frametype, uint32 * pusedlen);
#ifdef __cplusplus
}
#endif
#endif