前言
其实使用原生FFmpeg的软解和硬解很简单,硬解以iOS为例只需要编译的库里面含有videotoolbox模块。 注意:如果是使用ijk编译的库是直接调用硬解是不会成功的
软解流程
1.注册所有解码器
avcodec_register_all();
2.找到h264编解码器信息
AVCodec * codec_dec = avcodec_find_decoder(AV_CODEC_ID_H264);
3.通过编解码器信息创建上下文
AVCodecContext * c_dec = avcodec_alloc_context3(codec_dec);
4.通过配置参数初始化具体的解码器(第三个参数为AVDictionary可以配置解码器的具体参数)
if (avcodec_open2(c_dec, codec_dec,NULL) < 0)
{
av_free(c_dec);
return NULL;
}
5.初始化AVFrame
用于接收解码后的数据
AVFrame * pic_tmp = av_frame_alloc();
if(pic_tmp == NULL)
{
avcodec_close(c_dec);
av_free(c_dec);
return ;
}
6.Socket收到数据包后在CADisplayLink中调用解码
FramePacket
:是自定义的传输数据包- XYQCodecCtx:就是
AVCodecContext