FFMPEG自学一 音视频解封装

文章详细介绍了MP4文件中包含的音视频数据,如编码方式H264,帧率,采样率等,并阐述了音视频解封装的过程,包括avformat_open_input、avformat_find_stream_info等关键函数的使用,以及在处理FLV和H264文件时可能遇到的延迟问题。

一、音视频包含哪些数据

对于一个mp4文件我们可以通过音视频分析软件打开查看内部信息。

从两图可以看出mp4文件一般包含 音频流 视频流等。

对于上面的字段大致分析如下

Format

编码方式

AVC

现在大部分视频都是这种编码方式,即H264。

CodecId

编码器id

avc1

H264封装有2种格式:h264和avc1,avc1一般通过ffmpeg转码生成的视频 不带起始码0×00000001的

Duration

播放时间

可以在解码时获取显示

Bit rate

比特率

1929Kbps

指视频或音频文件在单位时间内使用的数据流量

Frame rate

帧率

25

一秒钟显示的图片数

Chroma Subsampling

采样排列方式

4:2:0

4:4:4表示完全取样。

4:2:2表示2:1的水平取样,垂直完全采样。

4:2:0表示2:1的水平取样,垂直2:1采样。

4:1:1表示4:1的水平取样,垂直完全采样

Channel

声道数

2channels

双声道(音频才有)

Sampling Rate

采样率

44.1KHZ

每秒钟采样的次数

二、音视频解封装流程

封装格式相关函数

avformat_alloc_context();负责申请一个AVFormatContext

结构的内存,并进行简单初始化

avformat_free_context();释放该结构里的所有东西以及该

结构本身

avformat_close_input();关闭解复用器。关闭后就不再需要

使用avformat_free_context 进行释放。

avformat_open_input();打开输入视频文件

avformat_find_stream_info():获取视频文件信息

av_read_frame(); 读取音视频包

avformat_seek_file(); 定位文件

av_seek_frame():定位文件

区分不同的码流

AVMEDIA_TYPE_VIDEO视频流

video_index = av_find_best_stream(ic,AVMEDIA_TYPE_VIDEO,-1,-1, NULL, 0);

AVMEDIA_TYPE_AUDIO音频流

audio_index = av_find_best_stream(ic,AVMEDIA_TYPE_AUDIO,-1,-1, NULL, 0)

三、解封装分析

avformat_open_input和avformat_find_stream_info分别用于打开一个流和分析流信息。

在初始信息不足的情况下(比如FLV和H264文件),

avformat_find_stream_info接口需要在内部调用

read_frame_internal接口读取流数据(音视频帧),然后再分

析后,设置核心数据结构AVFormatContext。

由于需要读取数据包,avformat_find_stream_info接口会带来

很大的延迟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rnwater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值