cpp-ffmpeg 如何解决不推荐使用的警告?

cpp-ffmpeg how to resolve deprecated warning?

我正在使用 FFmpeg Lib,我收到警告,我的代码如下:

if ( avformat_find_stream_info( pFormatCtx, NULL ) < 0 ) {
        std::cout << "Get Stream Information Error 13" << std::endl;
        avformat_close_input( &pFormatCtx );
        pFormatCtx = NULL;
        return -13;
 }
av_dump_format( pFormatCtx, 0, filenameSrc, 0 );

for ( unsigned int i = 0; i < pFormatCtx->nb_streams; i++ ) {
        if (pFormatCtx->streams[i]->codec->coder_type == AVMEDIA_TYPE_VIDEO) {
            video_stream_index = i;
            break;
        }
 }

我在以下行遇到警告:pFormatCtx->streams[i]->codec->coder_type == AVMEDIA_TYPE_VIDEO

警告:AVCodecContext::coder_type’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:2815) [-Wdeprecated-declarations]

我不明白这个警告是什么意思以及如何解决它。

任何人都可以帮助我!

感谢

正如您在警告消息中看到的以及在 ffmpeg docs 中看到的那样,直接使用 AVCodecContext::coder_type 已被弃用。

但是在文档中您可以看到您还可以做什么,改用编码器私有选项

你在一些 AVCodec 的基础上创建你的 AVCodecContext。然后你可以使用 AVCodec::type。或者您可以像这样从 AVCodecContext 再次获取它:

AVCodec *codec = avcodec_find_encoder(codec_context->codec_id);
int coder_type = codec->type;

在您的情况下,您可以像这样更改代码:

for(unsigned int i = 0; i < pFormatCtx->nb_streams; i++)
{
    if(avcodec_find_encoder(pFormatCtx->streams[i]->codec->codec_id)->type == AVMEDIA_TYPE_VIDEO)
    {
        video_stream_index = i;
        break;
    }
}

请禁用 Visual Studio 的 SDL 检查。

在项目/属性/C/C++/常规/SDL 检查中, 从 Yes(/sdl) 更改为 No(/sdl-).

这是在 Visual Studio 2017 年测试的。

尝试使用 codecpar 中的 codec_type:

if (pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
        video_stream_index = i;