FFmpeg解码音视频流(iOS)

FFmpeg编解码技术被广泛应用于直播或点播应用,网上有很多相关的资料,这些资料有的其实已经很详尽了,但是对于一些刚入行的小白来说看起来比较费时。近来有空,我就整合一下网上的资料,结合自己的经验,给大家做一个简单易懂的介绍。

首先我们来看一下编解码中常用到的结构体:

AVFormatContext:贯穿全局的基本结构体。主要用于音视频格式方面的处理。

AVStream:音频流信息

AVCodecContext:描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息

AVFrame:存储非压缩的数据(视频对应RGB/YUV像素数据,音频对应PCM采样数据)

AVPacket:存储压缩数据(视频对应H.264等码流数据,音频对应AAC/MP3等码流数据)

AVPicture:保存RGB图片信息

下面讲一下如何进行拉流并且进行解码

首先,弄清楚整个流程,有助于我们理解,大致流程如下

FFmpeg解码音视频流(iOS)_第1张图片

FFmpeg解码流程

//注册所有的编解码器

avcodec_register_all();

//初始化格式及传输协议

av_register_all();

//初始化全局网络组件

avformat_network_init();

//根据URL打开一个输入流或local视频文件并读取头部信息

avformat_open_input()

//检索视频流信息

avformat_find_stream_info()

//获取视频编码格式

avcodec_find_decoder()

//根据上面的视频格式打开编解码器

avcodec_open2()

读取数据

av_read_frame()

//将该帧解码,将h264(packet)解码成YUV(pFrame)

avcodec_decode_video2()

//yuv420p 转换成 rgb24

sws_scale()

解码的流程基本就这样,看完上文后,应该对解码有一定的了解。我根据自己的经验及网上资料写了个DEMO。项目里面对代码的注释非常的详细,特别容易理解。

你可能感兴趣的:(FFmpeg解码音视频流(iOS))