当前位置: 首页 > 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。

相关文章:

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

音视频入门基础:MPEG2-PS专题系列文章: 音视频入门基础:MPEG2-PS专题(1)——MPEG2-PS官方文档下载 音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件 音视频入门基础…...

Docker安装和卸载(centos)

Docker安装和卸载 一,已安装Docker,卸载Docker 1.方法一 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine​ 如果出现以下提示就证明没卸载…...

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练

数据标注 前期准备 先打开Anaconda Navigator,点击Environment,再点击new(new是我下载anaconda的文件夹名称),然后点击创建 点击绿色按钮,并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具,在上篇…...

Winforms开发基础之非主线程操作UI控件的误区

前言 想象一下,你正在开发一个桌面应用程序,用户点击按钮后需要执行一个耗时操作。为了避免界面卡顿,你决定使用后台线程来处理任务。然而,当你在后台线程中尝试更新UI控件时,程序突然崩溃了。这是为什么呢&#xff1…...

Flutter中Get.snackbar和Get.dialog关闭冲突问题记录

背景: 在使用GetX框架时,同时使用了Get.snackbar提示框和Get.dialog加载框,当这两个widget同时存在时,Get.dialog加载框调用Get.back()无法正常关闭。 冲突解释: 之所以会产生冲突,是因为Get.snackbar在关…...

springcloudalibaba集成fegin报错ClassNotFoundException解决方案

集成fegin遇到问题: java.lang.ClassNotFoundException: com.netflix.config.CachedDynamicIntProperty 解决方案: 在pom文件中添加依赖 <dependency><groupId>com.netflix.archaius</groupId><artifactId>archaius-core</artifactId><versi…...

【HTML+CSS+JS+VUE】web前端教程-31-css3新特性

圆角 div{width: 100px;height: 100px;background-color: saddlebrown;border-radius: 5px;}阴影 div{width: 200px;height: 100px;background-color: saddlebrown;margin: 0 auto;box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);}...

力扣264. 丑数 II

给你一个整数 n &#xff0c;请你找出并返回第 n 个 丑数 。丑数 就是质因子只包含 2、3 和 5 的正整数。 //用一个数组来保存第1到第n个丑数 //一个丑数必须是乘以较小的丑数的 2、3 或 5来得到。 //使用三路合并方法&#xff1a;L2、L3 和 L5三个指针遍历2、3、5倍的丑数序列…...

计算机网络之---TCP连接管理

TCP连接管理 TCP&#xff08;传输控制协议&#xff09;是面向连接的协议&#xff0c;在数据传输之前需要建立连接&#xff0c;在数据传输完成后需要断开连接。TCP连接的建立和断开都遵循特定的规则&#xff0c;分别称为三次握手&#xff08;Three-Way Handshake&#xff09;和四…...

《CPython Internals》阅读笔记:p118-p150

《CPython Internals》学习第 8 天&#xff0c;p118-p150 总结&#xff0c;总计 33 页。 一、技术总结 补充一些本人整理的关于 Context-Free Grammar(CFG) 的知识。 1.symbol(符号) A mathematical symbol is a figure or a combination of figures that is used to repre…...

C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代码

常见7种排序算法 冒泡排序&#xff08;Bubble Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;希尔排序&#xff08;Shell Sort&#xff09;归并排序&#xff08;Merge Sort&#xff09;快速排序&#xff08;…...

三只松鼠携手爱零食,社区零售新高峰拔地而起

合纵连横&#xff0c;这是当前零售行业发展的一个主旋律。从商超之王胖东来的全国调改&#xff0c;到社区零售正在进行的渠道变革&#xff0c;竞争的激烈和商业模式的升级令人目不暇接。 量贩零食赛道在过去一年就是如此&#xff0c;有杀伐&#xff0c;有并购&#xff0c;刀光…...

Java聊天小程序

拟设计一个基于 Java 技术的局域网在线聊天系统,实现客户端与服务器之间的实时通信。系统分为客户端和服务器端两类,客户端用于发送和接收消息,服务器端负责接收客户端请求并处理消息。客户端通过图形界面提供用户友好的操作界面,服务器端监听多个客户端的连接并管理消息通…...

Kibana操作ES基础

废话少说&#xff0c;开干&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;截图更清晰&#xff0c;复制在下面 #库操作#创建索引【相当于数据库的库】 PUT /first_index#获…...

MYSQL8创建新用户报错:You have an error in your SQL syntax;check...

本文所用——MYSQL版本&#xff1a;8.0.25 baidu都是直接创建新用户并赋权&#xff0c;如下&#xff1a; GRANT ALL PRIVILEGES ON *.* TO 用户名% IDENTIFIED BY 密码 WITH GRANT OPTION;但是我用的MYSQL版本它就不行&#xff0c;会报错&#xff01; 经查阅资料发现——MY…...

动漫周边商城系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库…...

Vue 3 Diff 算法受 `v-for` 循环中的 `key` 属性影响

Vue 3 的 Diff 算法会受到 v-for 循环中的 key 属性的影响&#xff0c;key 的选择直接关系到 Diff 算法的效率和最终的 DOM 更新结果。 key 的作用 在 Vue 中&#xff0c;key 是一种标识&#xff0c;它用于唯一标记每个虚拟 DOM 节点。Diff 算法会根据 key 判断新旧节点是否是…...

江科大STM32入门——看门狗笔记整理

wx&#xff1a;嵌入式工程师成长日记 &#xff08;一&#xff09;简介 WDG(Watchdog)看门狗看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞&#xff08;无法预料&#xff09;、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及…...

【计算机网络】lab7 TCP协议

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 实验目的…...

计算机视觉:解锁未来智能世界的钥匙

计算机视觉&#xff1a;解锁未来智能世界的钥匙 在信息技术飞速发展的今天&#xff0c;计算机视觉作为人工智能领域的一个重要分支&#xff0c;正以前所未有的速度改变着我们的生活与工作方式。它使机器能够“看”并理解图像和视频中的信息&#xff0c;为自动驾驶、医疗影像分…...

项目介绍 MATLAB实现基于蜘蛛猴优化算法(SMO)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码) 专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力 谢谢

MATLAB实现基于蜘蛛猴优化算法&#xff08;SMO&#xff09;进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面&#xff08;含完整的程序&#xff0c;GUI设计和代码详解&#xff09; 无人机&#xff08;UAV…...

16 指挥AI写数据库SQL代码:增删改查与存储过程实现

指挥AI写数据库SQL代码:增删改查与存储过程实现 摘要 本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十六篇,属于第三阶段多场景实战核心内容。本篇聚焦企业级SQL代码生成,针对零基础、无数据库开发经验的使用者,拆解指挥AI编写规范、高效、可直…...

详细解析Spring如何解决循环依赖问题

一、语言特性&#xff1a;Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一&#xff0c;就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全面支…...

2025届学术党必备的六大AI辅助论文方案解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 将人工智能技术应用于内容创作领域的重要的AI写作软件&#xff0c; 正逐渐改变传统写作模式&…...

Unity-URP-Outlines完全指南:7个实用技巧让你轻松实现专业级描边效果

Unity-URP-Outlines完全指南&#xff1a;7个实用技巧让你轻松实现专业级描边效果 【免费下载链接】Unity-URP-Outlines A custom renderer feature for screen space outlines 项目地址: https://gitcode.com/gh_mirrors/un/Unity-URP-Outlines 核心价值&#xff1a;为什…...

yaml-cpp终极内存优化指南:5个提升缓存命中率的实现技巧

yaml-cpp终极内存优化指南&#xff1a;5个提升缓存命中率的实现技巧 【免费下载链接】yaml-cpp A YAML parser and emitter in C 项目地址: https://gitcode.com/gh_mirrors/ya/yaml-cpp yaml-cpp是一个高性能的C YAML解析器和发射器&#xff0c;完全遵循YAML 1.2规范。…...

AI驯服“人造太阳”:等离子体物理的智能革命

AI驯服“人造太阳”&#xff1a;等离子体物理的智能革命 引言 可控核聚变&#xff0c;被誉为人类能源的“终极梦想”。然而&#xff0c;驾驭上亿度的等离子体——这团“人造太阳”&#xff0c;其复杂性与不稳定性让科学家们挑战了数十年。如今&#xff0c;人工智能&#xff08…...

为什么你的暗影精灵游戏本需要开源硬件控制?OmenSuperHub深度解析

为什么你的暗影精灵游戏本需要开源硬件控制&#xff1f;OmenSuperHub深度解析 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 在游戏本的世界里&#xff0…...

PE结构 --->8.PE对齐的概念 文件对齐VS磁盘对齐

目录 PE结构中对齐概念详解 原理 磁盘文件对齐&#xff08;File Alignment, 0x200&#xff09;&#xff1a; 内存对齐&#xff08;Section Alignment, 0x1000&#xff09;&#xff1a; 关系与CPU页管理&#xff1a; 详细步骤&#xff1a;PE文件加载到内存的对齐过程 读取…...

拯救者R7000P显卡驱动安装避坑指南:从黑屏到流畅运行VSlam

1. 为什么R7000P装显卡驱动容易黑屏&#xff1f; 很多朋友拿到拯救者R7000P笔记本后&#xff0c;第一件事就是安装Ubuntu系统来跑VSlam开发环境。但往往在安装NVIDIA显卡驱动时&#xff0c;会遇到让人头疼的黑屏问题。我自己就经历过不下5次黑屏&#xff0c;最严重的一次甚至需…...