音视频入门基础:AAC专题(10)——FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现

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

音视频入门基础:AAC专题系列文章:

音视频入门基础:AAC专题(1)------AAC官方文档下载

音视频入门基础:AAC专题(2)------使用FFmpeg命令生成AAC裸流文件

音视频入门基础:AAC专题(3)------AAC的ADTS格式简介

音视频入门基础:AAC专题(4)------ADTS格式的AAC裸流实例分析

音视频入门基础:AAC专题(5)------FFmpeg源码中,判断某文件是否为AAC裸流文件的实现

音视频入门基础:AAC专题(6)------FFmpeg源码中解码ADTS格式的AAC的Header的实现

音视频入门基础:AAC专题(7)------FFmpeg源码中计算AAC裸流每个packet的size值的实现

音视频入门基础:AAC专题(8)------FFmpeg源码中计算AAC裸流AVStream的time_base的实现

音视频入门基础:AAC专题(9)------FFmpeg源码中计算AAC裸流每个packet的duration和duration_time的实现

音视频入门基础:AAC专题(10)------FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现

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

一、引言

通过FFprobe命令:

bash 复制代码
ffprobe -of json -show_packets XXX.aac

可以显示AAC裸流每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts、pts_time、dts_time:

打印出来的"pts"实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显示时间戳;"dts"是AVPacket结构体中的成员变量dts,是以AVStream->time_base为单位的解码时间戳;"pts_time"是以秒为单位的显示时间戳;"dts_time"是以秒为单位的解码时间戳。音频跟视频不一样,音频没有B帧,所以音频的pts和dts输出顺序一样,即pts等于dts。上述的这些值都是通过fftools/ffprobe.c中的show_packet函数打印出来的:

cpp 复制代码
static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int packet_idx)
{
//...
    print_ts  ("pts",             pkt->pts);
    print_time("pts_time",        pkt->pts, &st->time_base);
    print_ts  ("dts",             pkt->dts);
    print_time("dts_time",        pkt->dts, &st->time_base);
//...
}

AAC裸流每个packet的pts、dts、pts_time、dts_time的计算方式跟WAV音频文件的一致,实际上不管什么样格式的音频计算方法都是一样的,关于具体的计算原理可以参考:《音视频入门基础:WAV专题(10)------FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现》、《音视频入门基础:WAV专题(11)------FFmpeg源码中计算WAV音频文件每个packet的pts_time、dts_time的实现》。

简单来讲:

1.对于音频,其第1个packet的pts和dts的值为0。之后每个packet的pts和dts的值在上一个音频packet的pts和dts基础上增加duration,也就是增加该音频packet占用的以AVStream的time_base为单位的时间值,这是对任何格式的音频都通用的一种计算方式。不管是WAV音频文件还是AAC裸流,其每个音频packet的pts和dts值 = 上一个音频packet的pts和dts值 + duration。

2.pts_time = pts × time_base,dts_time = dts × time_base。

相关推荐
沉浸式学习ing4 小时前
B站视频怎么快速总结?AI自动生成要点+思维导图+逐字稿
人工智能·ai·自然语言处理·音视频·语音识别·notion
KKei16384 小时前
Flutter for OpenHarmony 学习视频播放器技术文章
学习·flutter·华为·音视频·harmonyos
ltlovezh5 小时前
FFmpeg 是怎么“猜”出文件格式的?源码级拆解 Demuxer 自动识别机制
ffmpeg
神秘剑客_CN7 小时前
视频添加水印批处理-漫剧版
音视频
一路向北he7 小时前
音频1db是什么?
音视频
ZC跨境爬虫9 小时前
跟着 MDN 学 HTML day_52:(深入 XPathExpression 接口)
开发语言·前端·javascript·ui·html·音视频
Mike_6669 小时前
摩尔线程AB100安装torch环境
人工智能·深度学习·ffmpeg·aarch64·摩尔线程·musa
观北海9 小时前
听觉智能新纪元:AST音频技术全景解读
音视频
XD7429716369 小时前
科技早报晚报|2026年5月15日:无摄像头空间感知、Android 设备实验室与视频检索代理,今天更值得跟进的 3 个技术机会
android·科技·音视频·开源项目·边缘ai·开发者工具
aqi0010 小时前
FFmpeg开发笔记(一百零一)跨平台的开源音视频移动框架MobileFFmpeg
android·ffmpeg·音视频·直播·流媒体