网站发布服务托管器,潍坊网站建设哪里好,找做网站的朋友,高级网站开发培训价格音视频入门基础#xff1a;AAC专题系列文章#xff1a;
音视频入门基础#xff1a;AAC专题#xff08;1#xff09;——AAC官方文档下载
音视频入门基础#xff1a;AAC专题#xff08;2#xff09;——使用FFmpeg命令生成AAC裸流文件
音视频入门基础#xff1a;AAC…
音视频入门基础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命令
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函数打印出来的
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_basedts_time dts × time_base。