新版本中FFmpeg的avcodec_copy_context被avcodec_parameters_to_context和avcodec_parameters_from_context所替代,因此需要将原本的写法修改一下。
旧API版本如下:
if (avcodec_copy_context(out_stream->codec, in_stream->codec) < 0) {
printf( "Failed to copy context from input to output stream codec context\n");
goto end;
}
out_stream->codec->codec_tag = 0;
if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
替换新API版本如下:
AVCodecContext *codec_ctx = avcodec_alloc_context3(in_Codec);
if(avcodec_parameters_to_context(codec_ctx, in_stream->codecpar) <0 ){
printf("Failed to copy in_stream codecpar to codec context\n");
goto end;
}
codec_ctx->codec_tag = 0;
if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
codec_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
if(avcodec_parameters_from_context(out_stream->codecpar, codec_ctx)<0){
printf("Failed to copy codec context to out_stream codecpar context\n");
goto end;
}