FFmepg解码

作者: Shirley_iOS | 来源:发表于2016-06-28 22:32 被阅读274次

FFmepg是音视频开发最常用的编解码库,功能很强大,是所有音视频开发人员必须要啃下去的硬骨头,对于没有底层开发基础的,学习他并不是很容易,这里着重介绍下FFmepg解码功能。参考代码:https://github.com/ShirleyiOS/iOSH264PlayDemo

注册FFmepg所有库,这是使用FFmepg的入口

av_register_all();

因为这里使用的是FFmepg解码功能,还要同时注册下其编解码库

avcodec_register_all();

查找解码器,因为这里是解码h264的数据,所以参数选择CODEC_ID_H264

m_pcodec = avcodec_find_decoder(CODEC_ID_H264);

初始化AVPacket,在h264中,一个packet对应一个nal单元

m_packet = new AVPacket;
av_init_packet(m_packet);

给编解码器分配内存

m_context = avcodec_alloc_context3(m_pcodec);

初始化编解码器的AVCodecContext

avcodec_open2(m_context, m_pcodec, NULL)

给视频帧分配内存

m_picture = av_frame_alloc();

以上都是解码的准备工作,下面介绍拿到h264的视频数据时,怎样将其解码成yuv数据

填充AVPacket结构体,data是h264数据,length是数据长度

m_packet->data = (unsigned char*)data;
m_packet->size = length;

下面是真正的解码函数

int nBytesConsumed = avcodec_decode_video2(m_context, m_picture, &nGotPicture, (const AVPacket*)m_packet);

得到的m_picture就是我们需要的数据,m_picture->data[0]存y,m_picture->data[1]存u, m_picture->data[2]存V,把这些数据处理成我们想要的就行。

最后别忘了释放相应的数据,这里不在贴相关代码,具体请参考文章一开始的demo程序。

相关文章

  • FFmepg解码

    FFmepg是音视频开发最常用的编解码库,功能很强大,是所有音视频开发人员必须要啃下去的硬骨头,对于没有底层开发基...

  • iOS利用FFmpeg解码音频数据并播放

    需求 利用FFmepg解析并解码音频流数据,然后将解码后的音频数据送给Audio Queue以实现播放. 实现原理...

  • ffmpeg-OpenSLES播放音频数据

    前言 ndk调试命令 上两篇文章FFmpeg - 初探ffmepg并解码数据FFmpeg-多线程解码播放下面是基于...

  • FFmpeg C++ Video || Audio 解码

    ---------- FFmepg官网 -------------------- FFmepg简介 -------...

  • FFMEPG音视频编解码

    1. FFMPEG 1.1基本组成: AVFormat: 封装模块,媒体封装/解封装格式,RTMP/RTSP/MM...

  • FFmpeg-多线程解码播放

    数据音频重采样 在上篇文章FFmpeg - 初探ffmepg并解码数据我们已经可以获取到音频的数据了,也解决内存上...

  • 第4讲-FFmepg-视频解码

    内容一:FFmpeg-命令行补充? 内容二:FFmpeg-视频解码? 第一点:确定音视频编解码流程学习? 第二点:...

  • 第5讲-FFmepg-音频解码

    其实和我们视频解码流程是一致的(没有太大区别)->代码逻辑发生一些改变 执行过程 示例代码 实例工程 iOS实例 ...

  • FFmpeg - 初探ffmepg并解码数据

    流程分析 av_register_all():的作用是初始化所有组件,只有调用了该函数,才能使用复用器和编解码器 ...

  • iOS -FFMEPG

    1.FFmepg编译环境及结构 下载FFmepg FFmpeg配置选项介绍 下载gas-preprocessor....

网友评论

    本文标题:FFmepg解码

    本文链接:https://www.haomeiwen.com/subject/paitjttx.html