tstools-1.11

时间:2021-12-16 14:47:26
【文件属性】:

文件名称:tstools-1.11

文件大小:489KB

文件格式:ZIP

更新时间:2021-12-16 14:47:26

tstools 视频合成

合成源码流程 1.合成函数 --merge_with_h264() 2.流程 1)初始化重要参数值见下表 序号 参数 代表意思 1 got_video 标志位,合成TS流中是否有视频流;有为TRUE,否则false 2 got_audio 标志位,合成TS流中是否有音频流;有为TRUE,否则false 3 prog_pids[] 音视频PID,都有取2个,只有视频或音频取1。 4 prog_type[] 音视频流类型,都有取2个;如只要视频H264码流则 prog_type[0] = AVC_VIDEO_STREAM_TYPE;(0x1B) 2.取音频prog_type[]的值 代码: switch (audio_type) { case AUDIO_ADTS: case AUDIO_ADTS_MPEG2: case AUDIO_ADTS_MPEG4: prog_type[1] = ADTS_AUDIO_STREAM_TYPE; break; case AUDIO_L2: prog_type[1] = MPEG2_AUDIO_STREAM_TYPE; break; case AUDIO_AC3: prog_type[1] = ATSC_DOLBY_AUDIO_STREAM_TYPE; break; default: // what else can we do? prog_type[1] = ADTS_AUDIO_STREAM_TYPE; break; } 3连续写出八个TS流空包------ write_TS_null_packet(TS_writer_poutput) 代码 write_TS_null_packet(TS_writer_p output) { byte TS_packet[TS_PACKET_SIZE]; int err, ii; TS_packet[0] = 0x47; TS_packet[1] = 0x1F; // PID is 0x1FFF TS_packet[2] = 0xFF; TS_packet[3] = 0x20; // payload only for (ii=4; ii 注:空包包头 0x47 0x1F 0xFF 0x20 包数据全为0xff。包长188个字节 4.为多种类型(音频、视频流)写出pat和PMT--- write_TS_program_data2() 具体如何写参考write_pat_and_pmt()、append_to_pidint_list()等函数 5.判断got_video 、got_audio是否为true(即是否任何一个存在),存在在进行循环合成 while (got_video || got_audio) { ...... } 6.具体合成 具体合成分两步:1. write_TS_program_data2()----------------写出PMT和PAT 2.根据H264码流的帧类型(I帧和非I帧),添加PTS/DTS和pcr 代码如下: if (is_I_or_IDR_frame(access_unit)) //判断是否是I帧,I帧则pts/dts ;否则打pcr err = write_access_unit_as_TS_with_pts_dts(access_unit,video_context, output,DEFAULT_VIDEO_PID, TRUE,video_pts+45000, TRUE,video_pts);


网友评论