罗湖商城网站设计,0735郴州招聘信息网,wordpress 博客编辑,专业关键词优化平台音视频入门基础#xff1a;MPEG2-PS专题系列文章#xff1a;
音视频入门基础#xff1a;MPEG2-PS专题#xff08;1#xff09;——MPEG2-PS官方文档下载
音视频入门基础#xff1a;MPEG2-PS专题#xff08;2#xff09;——使用FFmpeg命令生成ps文件
音视频入门基础…
音视频入门基础MPEG2-PS专题系列文章
音视频入门基础MPEG2-PS专题1——MPEG2-PS官方文档下载
音视频入门基础MPEG2-PS专题2——使用FFmpeg命令生成ps文件
音视频入门基础MPEG2-PS专题3——MPEG2-PS格式简介
音视频入门基础MPEG2-PS专题4——FFmpeg源码中判断某文件是否为PS文件的实现
音视频入门基础MPEG2-PS专题5——FFmpeg源码中解析PS流中的PES流的实现
音视频入门基础MPEG2-PS专题6——FFmpeg源码中获取PS流的视频信息的实现
音视频入门基础MPEG2-PS专题7——通过FFprobe显示PS流每个packet的信息 一、引言
通过FFprobe命令
ffprobe -of json -show_packets XXX.ps
可以显示PS流/PS文件每个packet也称为数据包或多媒体包的信息 对于PS流上述的“packet”数据包或多媒体包是指该PES packet去掉PES packet header、pack_header和system header后的数据即PES packet负载中的数据基本码流、ES流数据。 其中
codec_type该数据包对应的这路流是视频还是音频。 stream_index该数据包对应的这路流的流索引即这路流是PS流/PS文件中的第几路音视频流。 dts该数据包的以AVStream的time_base为单位的解码时间戳来源于该packet的PES packet header中的DTS dts_time该数据包的以秒为单位的解码时间戳。 pts该数据包的以AVStream的time_base为单位的显示时间戳。来源于该packet的PES packet header中的PTS pts_time该数据包的以秒为单位的显示时间戳。 duration即AVPacket结构体中的成员变量duration为该packet占用的以AVStream的time_base为单位的时间值。 duration_time该packet占用的以秒为单位的时间值。 size即AVPacket结构体中的成员变量size为AVPacket的成员变量data指向的缓冲区的大小也就是该packet的大小以字节为单位。该值等于ES流数据的大小。 二、FFmpeg源码中显示PS流每个packet的pts、dts的实现
上述信息中比较重要的是pts和dts 由《音视频入门基础MPEG2-PS专题5——FFmpeg源码中解析PS流中的PES流的实现》可以知道FFmpeg源码中通过mpegps_read_pes_header函数解析PS流中的PES packet从该PES packet的PES packet header中读取出pts和dts分别赋值给AVPacket的pts和dts
static int mpegps_read_packet(AVFormatContext *s,AVPacket *pkt)
{
//..len mpegps_read_pes_header(s, dummy_pos, startcode, pts, dts);
//..ret av_get_packet(s-pb, pkt, len);pkt-pts pts;pkt-dts 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);
//...
} 所以PS流/PS文件中每个packet的PTS和DTS分别来源于该packet的PES packet header中的PTS和DTS。