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

相关推荐
英英_2 小时前
视频爬虫的Python库
开发语言·python·音视频
道剑剑非道4 小时前
QT开发技术【ffmpeg + QAudioOutput】音乐播放器 完善
开发语言·qt·ffmpeg
毒果4 小时前
FFmpeg 低延迟同屏方案
ffmpeg·同屏
weixin_527550404 小时前
Linux 环境下高效视频切帧的实用指南
linux·运维·音视频
ai产品老杨4 小时前
减少交通拥堵、提高效率、改善交通安全的智慧交通开源了。
前端·vue.js·算法·ecmascript·音视频
红米饭配南瓜汤7 小时前
WebRTC中的几个Rtp*Sender
网络·网络协议·音视频·webrtc·媒体
EasyDSS10 小时前
EasyRTC嵌入式音视频通信SDK助力物联网/视频物联网音视频打造全场景应用
人工智能·音视频
aqi0011 小时前
FFmpeg开发笔记(六十三)FFmpeg使用vvenc把视频转为H.266编码
ffmpeg·音视频·直播·流媒体
babytiger13 小时前
rk3588 上运行smolvlm-realtime-webcam,将视频转为文字描述
音视频
Icoolkj13 小时前
Komiko 视频到视频功能炸裂上线!
人工智能·音视频