音视频入门基础:MPEG2-PS专题(7)——通过FFprobe显示PS流每个packet的信息

=================================================================

音视频入门基础: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命令:

bash 复制代码
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:

cpp 复制代码
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的值打印出来:

cpp 复制代码
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。

相关推荐
2601_955662463 小时前
AI 配音工具 7 款实测:短视频、影视解说、小说推文音质横向对比
人工智能·音视频·语音识别·视频
阿童木写作4 小时前
跨境电商图片翻译工具,批量翻译视频字幕一键抠图
人工智能·python·音视频
深圳市宝华视联11 小时前
医院内网部署手术示教系统注意事项
嵌入式硬件·实时互动·音视频·实时音视频·视频编解码·嵌入式实时数据库
小柯南敲键盘11 小时前
跨境电商图片翻译工具,批量处理视频字幕与抠图
人工智能·python·音视频
weixin_4334176711 小时前
阿里视频大模型wan2.7‑t2v,可以生成视频
人工智能·python·音视频
阿童木写作13 小时前
跨境电商图片翻译工具,批量翻译视频字幕还免费
python·音视频
stuartevil15 小时前
AI图生视频常见坑:参考图风格不一致怎么解决
人工智能·深度学习·音视频
贾宝玉的玉宝贾15 小时前
FreeSWITCH 简单图形化界面 63 - 编写 mod_avsource 模块,将 RTSP/RTMP 源桥接为视频通道
音视频·voip·freeswitch·ippbx·pbx·sip通信
Blockchina16 小时前
5个开源AI视频项目怎么选?从脚本、分镜到Shorts和剪映自动化
人工智能·开源·音视频
要开心吖ZSH16 小时前
腾讯 IM × TRTC 联动实战:后端如何撑起一次视频问诊(混流录制篇)
java·音视频·腾讯云·健康医疗·即时通讯·im