1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

refine the h264 parser, one ts message should parsed to one rtmp/flv message.

This commit is contained in:
winlin 2015-04-04 15:53:36 +08:00
parent 4329366c08
commit 61d5b78ae5
8 changed files with 71 additions and 43 deletions

View file

@ -929,7 +929,7 @@ int SrsAvcAacCodec::avc_demux_sps_rbsp(char* rbsp, int nb_rbsp)
return ret;
}
int64_t seq_parameter_set_id = -1;
int32_t seq_parameter_set_id = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, seq_parameter_set_id)) != ERROR_SUCCESS) {
return ret;
}
@ -944,7 +944,7 @@ int SrsAvcAacCodec::avc_demux_sps_rbsp(char* rbsp, int nb_rbsp)
|| profile_idc == 44 || profile_idc == 83 || profile_idc == 86 || profile_idc == 118
|| profile_idc == 128
) {
int64_t chroma_format_idc = -1;
int32_t chroma_format_idc = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, chroma_format_idc)) != ERROR_SUCCESS) {
return ret;
}
@ -955,12 +955,12 @@ int SrsAvcAacCodec::avc_demux_sps_rbsp(char* rbsp, int nb_rbsp)
}
}
int64_t bit_depth_luma_minus8 = -1;
int32_t bit_depth_luma_minus8 = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, bit_depth_luma_minus8)) != ERROR_SUCCESS) {
return ret;
}
int64_t bit_depth_chroma_minus8 = -1;
int32_t bit_depth_chroma_minus8 = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, bit_depth_chroma_minus8)) != ERROR_SUCCESS) {
return ret;
}
@ -981,18 +981,18 @@ int SrsAvcAacCodec::avc_demux_sps_rbsp(char* rbsp, int nb_rbsp)
}
}
int64_t log2_max_frame_num_minus4 = -1;
int32_t log2_max_frame_num_minus4 = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, log2_max_frame_num_minus4)) != ERROR_SUCCESS) {
return ret;
}
int64_t pic_order_cnt_type = -1;
int32_t pic_order_cnt_type = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, pic_order_cnt_type)) != ERROR_SUCCESS) {
return ret;
}
if (pic_order_cnt_type == 0) {
int64_t log2_max_pic_order_cnt_lsb_minus4 = -1;
int32_t log2_max_pic_order_cnt_lsb_minus4 = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, log2_max_pic_order_cnt_lsb_minus4)) != ERROR_SUCCESS) {
return ret;
}
@ -1002,17 +1002,17 @@ int SrsAvcAacCodec::avc_demux_sps_rbsp(char* rbsp, int nb_rbsp)
return ret;
}
int64_t offset_for_non_ref_pic = -1;
int32_t offset_for_non_ref_pic = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, offset_for_non_ref_pic)) != ERROR_SUCCESS) {
return ret;
}
int64_t offset_for_top_to_bottom_field = -1;
int32_t offset_for_top_to_bottom_field = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, offset_for_top_to_bottom_field)) != ERROR_SUCCESS) {
return ret;
}
int64_t num_ref_frames_in_pic_order_cnt_cycle = -1;
int32_t num_ref_frames_in_pic_order_cnt_cycle = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, num_ref_frames_in_pic_order_cnt_cycle)) != ERROR_SUCCESS) {
return ret;
}
@ -1023,7 +1023,7 @@ int SrsAvcAacCodec::avc_demux_sps_rbsp(char* rbsp, int nb_rbsp)
}
}
int64_t max_num_ref_frames = -1;
int32_t max_num_ref_frames = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, max_num_ref_frames)) != ERROR_SUCCESS) {
return ret;
}
@ -1033,12 +1033,12 @@ int SrsAvcAacCodec::avc_demux_sps_rbsp(char* rbsp, int nb_rbsp)
return ret;
}
int64_t pic_width_in_mbs_minus1 = -1;
int32_t pic_width_in_mbs_minus1 = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, pic_width_in_mbs_minus1)) != ERROR_SUCCESS) {
return ret;
}
int64_t pic_height_in_map_units_minus1 = -1;
int32_t pic_height_in_map_units_minus1 = -1;
if ((ret = srs_avc_nalu_read_uev(&bs, pic_height_in_map_units_minus1)) != ERROR_SUCCESS) {
return ret;
}

View file

@ -46,7 +46,7 @@ using namespace std;
// @see SRS_SYS_TIME_RESOLUTION_MS_TIMES
#define SYS_TIME_RESOLUTION_US 300*1000
int srs_avc_nalu_read_uev(SrsBitStream* stream, int64_t& v)
int srs_avc_nalu_read_uev(SrsBitStream* stream, int32_t& v)
{
int ret = ERROR_SUCCESS;
@ -67,7 +67,7 @@ int srs_avc_nalu_read_uev(SrsBitStream* stream, int64_t& v)
b = stream->read_bit();
}
if (leadingZeroBits >= 64) {
if (leadingZeroBits >= 31) {
return ERROR_AVC_NALU_UEV;
}

View file

@ -40,7 +40,7 @@ class SrsBitStream;
#define srs_max(a, b) (((a) < (b))? (b) : (a))
// read nalu uev.
extern int srs_avc_nalu_read_uev(SrsBitStream* stream, int64_t& v);
extern int srs_avc_nalu_read_uev(SrsBitStream* stream, int32_t& v);
extern int srs_avc_nalu_read_bit(SrsBitStream* stream, int8_t& v);
// get current system time in ms, use cache to avoid performance problem