音视频入门基础:H.264专题(22)——通过FFprobe显示H.264裸流每个packet的信息
=================================================================
音视频入门基础:H.264专题系列文章:
音视频入门基础:H.264专题(1)——H.264官方文档下载
音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件
音视频入门基础:H.264专题(3)——EBSP, RBSP和SODB
音视频入门基础:H.264专题(4)——NALU Header:forbidden_zero_bit、nal_ref_idc、nal_unit_type简介
音视频入门基础:H.264专题(5)——FFmpeg源码中 解析NALU Header的函数分析
音视频入门基础:H.264专题(6)——FFmpeg源码:从H.264码流中提取NALU Header、EBSP、RBSP和SODB
音视频入门基础:H.264专题(7)——FFmpeg源码中 指数哥伦布编码的解码实现
音视频入门基础:H.264专题(8)——H.264官方文档的描述符
音视频入门基础:H.264专题(9)——SPS简介
音视频入门基础:H.264专题(10)——FFmpeg源码中,存放SPS属性的结构体和解码SPS的函数分析
音视频入门基础:H.264专题(11)——计算视频分辨率的公式
音视频入门基础:H.264专题(12)——FFmpeg源码中通过SPS属性计算视频分辨率的实现
音视频入门基础:H.264专题(13)——FFmpeg源码中通过SPS属性获取视频色彩格式的实现
音视频入门基础:H.264专题(14)——计算视频帧率的公式
音视频入门基础:H.264专题(15)——FFmpeg源码中通过SPS属性获取视频帧率的实现
音视频入门基础:H.264专题(16)——FFmpeg源码中,判断某文件是否为H.264裸流文件的实现
音视频入门基础:H.264专题(17)——FFmpeg源码中,获取H.264视频的profile的实现
音视频入门基础:H.264专题(18)——FFmpeg源码获取H.264裸流文件信息(视频压缩编码格式、色彩格式、视频分辨率、帧率)的总流程
音视频入门基础:H.264专题(19)——AVCDecoderConfigurationRecord简介
音视频入门基础:H.264专题(20)——FFmpeg源码中,获取avcC封装的H.264码流中每个NALU的长度的实现
音视频入门基础:H.264专题(21)——FFmpeg源码中,解码AVCDecoderConfigurationRecord的实现
音视频入门基础:H.264专题(22)——通过FFprobe显示H.264裸流每个packet的信息
=================================================================
通过FFprobe命令:
ffprobe -of json -show_packets XXX.h264
可以显示H.264裸流每个packet(也称为数据包或多媒体包)的信息:
其中:
codec_type:该数据包对应的这路流是视频还是音频。
stream_index:该数据包对应的这路流的流索引,即这路流是媒体文件中的第几路音视频流。
duration:即AVPacket结构体中的成员变量duration,为该视频packet占用的以AVStream的time_base为单位的时间值。
duration_time:该视频packet占用的以秒为单位的时间值。
size:即AVPacket结构体中的成员变量size,为AVPacket的成员变量data指向的缓冲区的大小,也就是该packet的大小(以字节为单位)。
这里对比通过同样的FFprobe命令显示WAV音频文件(具体参考:《音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现》)、AAC裸流(具体参考:《音视频入门基础:AAC专题(10)——FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现》)、FLV文件的信息,会发现通过FFprobe显示H.264裸流packet信息时没有显示pts和dts。这是因为H.264裸流是不携带任何时间戳信息的,时间戳是文件Header中携带的。比如对于FLV文件,其时间戳信息包含在每个Video Tag和Audio Tag的Tag header中。所以要想获取到H.264视频的时间戳得把H.264裸流封装成FLV或MP4等文件格式。