我正在try 解析MP4文件中avcC框中的SPS.由于某种原因,我没有得到预期的计时值,而其他一切都很好.使用十六进制编辑器,我提取了要使用的这些字节.
byte[] spsSmall =
{
0x67, 0x42, 0xC0, 0x1E, 0x9E, 0x21, 0x81, 0x18, 0x53, 0x4D, 0x40, 0x40,
0x40, 0x50, 0x00, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00, 0x03, 0x03, 0xC8,
0xF1, 0x62, 0xEE
};
这是转换我的剪辑后的H264 Analyzer报告.mp4至.h264
Nal length 29 start code 4 bytes
ref 3 type 7 Sequence parameter set
profile: 66
constaint_set0_flag: 1
constaint_set1_flag: 1
constaint_set2_flag: 0
constaint_set3_flag: 0
level_idc: 30
seq parameter set id: 0
log2_max_frame_num_minus4: 6
pic_order_cnt_type: 0
log2_max_pic_order_cnt_lsb_minus4: 7
num_ref_frames: 2
gaps_in_frame_num_value_allowed_flag: 0
pic_width_in_mbs_minus1: 34 (560)
pic_height_in_map_minus1: 19
frame_mbs_only_flag: 1
derived height: 320
direct_8x8_inference_flag: 1
frame_cropping_flag: 0
vui_parameters_present_flag: 1
aspect_ratio_info_present_flag: 0
overscan_info_present_flag: 0
video_signal_info_present_flag: 1
video_format: 5
video_full_range_flag: 0
colour_description_present_flag: 1
colour_primaries: 1
transfer_characteristics: 1
matrix_coefficients: 1
chroma_loc_info_present_flag: 0
timing_info_present_flag: 1
num_units_in_tick: 1
time_scale: 60
fixed_frame_scale: 1
nal_hrd_parameters_present_flag: 0
vcl_hrd_parameters_present_flag: 0
pic_struct_present_flag: 0
motion_vectors_over_pic_boundaries_flag: 1
max_bytes_per_pic_denom: 0
max_bits_per_mb_denom: 0
log2_max_mv_length_horizontal: 10
log2_max_mv_length_vertical: 10
num_reorder_frames: 0
max_dec_frame_buffering: 2
所以我应该期望num\u units\u in\u tick为1,time\u scale为60,但出于某种原因,我得到num\u units\u in\u tick为48,time\u scale为16777216.
你可以找到my implementation here个
我判断了FFmpeg和其他实现,看看我是否遗漏了什么,但他们似乎和我做了同样的事情.我try 了其他剪辑,但除了时间信息之外,我仍然拥有所有正确的东西.doctor 似乎没有提供比我已经知道的更多的信息.不仅如此,我还有COLOR\u原色、transfer\u特性、matrix\u系数,在计时信息之前都等于1.如果我走得太远或太早,我会得到错误的值.用这个精确的序列得到24位的几率很低.所以我迷失在我应该做的事情上.
我找到this post saying个
如果您使用的是基于场的视频,那么这将是场速率,所以
不知道这是什么意思.即使我将位数减半(32⇾ 16) 或者除以2,我得不到接近这个的东西.