美文网首页ios开发专题
ijkplayer录像改造功能的问题集

ijkplayer录像改造功能的问题集

作者: zl520k | 来源:发表于2020-03-27 13:46 被阅读0次

    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录像改造功能的问题集

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