当前位置: 首页 > news >正文

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

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。

http://www.lryc.cn/news/520670.html

相关文章:

  • Docker安装和卸载(centos)
  • YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练
  • Winforms开发基础之非主线程操作UI控件的误区
  • Flutter中Get.snackbar和Get.dialog关闭冲突问题记录
  • springcloudalibaba集成fegin报错ClassNotFoundException解决方案
  • 【HTML+CSS+JS+VUE】web前端教程-31-css3新特性
  • 力扣264. 丑数 II
  • 计算机网络之---TCP连接管理
  • 《CPython Internals》阅读笔记:p118-p150
  • C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代码
  • 三只松鼠携手爱零食,社区零售新高峰拔地而起
  • Java聊天小程序
  • Kibana操作ES基础
  • MYSQL8创建新用户报错:You have an error in your SQL syntax;check...
  • 动漫周边商城系统|Java|SSM|VUE| 前后端分离
  • Vue 3 Diff 算法受 `v-for` 循环中的 `key` 属性影响
  • 江科大STM32入门——看门狗笔记整理
  • 【计算机网络】lab7 TCP协议
  • 计算机视觉:解锁未来智能世界的钥匙
  • Java的Stream流和Option类
  • 深入理解ASP.NET Core 管道的工作原理
  • 多模态论文笔记——CLIP
  • brpc之baidu_protocol
  • LeetCode:39. 组合总和
  • SOLID原则学习,开闭原则(Open Closed Principle, OCP)
  • Unreal Engine 5 C++ Advanced Action RPG 七章笔记
  • 自动连接校园网wifi脚本实践(自动网页认证)
  • HTTP/HTTPS ⑤-CA证书 || 中间人攻击 || SSL/TLS
  • traceroute原理探究
  • 50_Lua垃圾回收