ijkplayer录像改造功能的问题集

FFmpeg中 avcodec_copy_context和codec deprecated方案如下:

将之前https://www.jianshu.com/p/e35566f0965a网上的ios录像功能函数在开始录像函数的里面要修改,由于上面提到int ffp_start_recording_l(FFPlayer*ffp,constchar*file_name)函数冲突问题,修改如下:

for(inti =0; i < is->ic->nb_streams; i++) {

.........

 AVCodec*codec =avcodec_find_decoder(in_stream->codecpar->codec_id);

        AVStream *out_stream = avformat_new_stream(ffp->m_ofmt_ctx, codec);//avformat_new_stream(ffp->m_ofmt_ctx, in_stream->codec->codec);

...........

AVCodecContext *pCodecCtx = avcodec_alloc_context3(codec);

        intret =avcodec_parameters_to_context(pCodecCtx, in_stream->codecpar);

        //if (avcodec_copy_context(out_stream->codec, in_stream->codec) < 0)

        if(ret <0)

        {

            av_log(ffp, AV_LOG_ERROR, "Failed to copy context from input to output stream codec context\n");

            goto end;

        }

        pCodecCtx->codec_tag=0;

        if(ffp->m_ofmt_ctx->oformat->flags&AVFMT_GLOBALHEADER) {

            pCodecCtx->flags|=CODEC_FLAG_GLOBAL_HEADER;

        }

        ret =avcodec_parameters_from_context(out_stream->codecpar, pCodecCtx);              

        if(ret <0) {

            printf("Failed to copy context input to output stream codec context\n");

            goto end;

        }

        //out_stream->codec->codec_tag = 0;

//        if (ffp->m_ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER) {

//            out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;

//        }

}

对应修改看上面注释都是和新修改是一一对应的。

参考资料:

 https://www.jianshu.com/p/e35566f0965a

https://www.2cto.com/kf/201704/634731.html

https://blog.csdn.net/leixiaohua1020/article/details/25422685

你可能感兴趣的:(ijkplayer录像改造功能的问题集)