高端的咨询行业网站策划,漯河网站建设zrgu,建设网站需要问的问题,成都热点新闻最新音视频入门基础#xff1a;MPEG2-TS专题系列文章#xff1a;
音视频入门基础#xff1a;MPEG2-TS专题#xff08;1#xff09;——MPEG2-TS官方文档下载
音视频入门基础#xff1a;MPEG2-TS专题#xff08;2#xff09;——使用FFmpeg命令生成ts文件
音视频入门基础…
音视频入门基础MPEG2-TS专题系列文章
音视频入门基础MPEG2-TS专题1——MPEG2-TS官方文档下载
音视频入门基础MPEG2-TS专题2——使用FFmpeg命令生成ts文件
音视频入门基础MPEG2-TS专题3——TS Header简介
音视频入门基础MPEG2-TS专题4——使用工具分析MPEG2-TS传输流
音视频入门基础MPEG2-TS专题5——FFmpeg源码中判断某文件是否为TS文件的实现
音视频入门基础MPEG2-TS专题6——FFmpeg源码中获取MPEG2-TS传输流每个transport packet长度的实现
音视频入门基础MPEG2-TS专题7——FFmpeg源码中读取出一个transport packet数据的实现
音视频入门基础MPEG2-TS专题8——TS Header中的适配域
音视频入门基础MPEG2-TS专题9——FFmpeg源码中解码TS Header的实现
音视频入门基础MPEG2-TS专题10——PSI、SI简介
音视频入门基础MPEG2-TS专题11—— TS中的Section
音视频入门基础MPEG2-TS专题12—— FFmpeg源码中把各个transport packet组合成一个Section的实现
音视频入门基础MPEG2-TS专题13——FFmpeg源码中解析Section Header的实现
音视频入门基础MPEG2-TS专题14——PAT简介
音视频入门基础MPEG2-TS专题15——FFmpeg源码中解析Program association section的实现
音视频入门基础MPEG2-TS专题16——PMT简介
音视频入门基础MPEG2-TS专题17——FFmpeg源码中解析TS program map section的实现
音视频入门基础MPEG2-TS专题18——PES流简介
音视频入门基础MPEG2-TS专题19——FFmpeg源码中解析TS流中的PES流的实现
音视频入门基础MPEG2-TS专题20——ES流简介
音视频入门基础MPEG2-TS专题21——FFmpeg源码中获取TS流的视频信息的实现
音视频入门基础MPEG2-TS专题22——FFmpeg源码中获取TS流的音频信息的实现
音视频入门基础MPEG2-TS专题23——通过FFprobe显示TS流每个packet的信息
音视频入门基础MPEG2-TS专题24——FFmpeg源码中显示TS流每个packet的pts、dts的实现 一、引言
从《音视频入门基础MPEG2-TS专题23——通过FFprobe显示TS流每个packet的信息》中可以知道通过FFprobe命令可以打印TS流每个packet也称为数据包或多媒体包的信息这些信息包含该packet的pts、dts 本文讲述FFmpeg源码中上述pts、dts的值是怎样被打印出来的。 二、FFmpeg源码中显示TS流每个packet的pts、dts的实现
由《音视频入门基础MPEG2-TS专题19——FFmpeg源码中解析TS流中的PES流的实现》可以知道FFmpeg源码中通过mpegts_push_data函数解析TS流中的一个PES packet。而mpegts_push_data函数中通过下面代码块读取PES packet header中的PTS和DTS分别赋值给变量pes-pts和pes-dts即赋值给PESContext的pts和dts if ((flags 0xc0) 0x80) {pes-dts pes-pts ff_parse_pes_pts(r);r 5;} else if ((flags 0xc0) 0xc0) {pes-pts ff_parse_pes_pts(r);r 5;pes-dts ff_parse_pes_pts(r);r 5;} 之后当再次进入mpegts_push_data函数时会调用new_pes_packet函数 if (is_start) {if (pes-state MPEGTS_PAYLOAD pes-data_index 0) {ret new_pes_packet(pes, ts-pkt);if (ret 0)return ret;ts-stop_parse 1;} else {reset_pes_packet_state(pes);}pes-state MPEGTS_HEADER;pes-ts_packet_pos pos;} new_pes_packet函数内部会把PESContext的pts和dts分别赋值给AVPacket的pts和dts
static int new_pes_packet(PESContext *pes, AVPacket *pkt)
{
//...pkt-pts pes-pts;pkt-dts pes-dts;
//...
} 最后在fftools/ffprobe.c的show_packet函数中将AVPacket的pts和dts的值打印出来
static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int packet_idx)
{
//...print_ts (pts, pkt-pts);
//...print_ts (dts, pkt-dts);
//...
} 三、总结
TS流/TS文件中每个packet的PTS和DTS分别来源于该packet的PES packet header中的PTS和DTS。