温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

FFmpeg AVStream::codec被声明为已否决

发布时间:2020-07-18 23:07:41 来源:网络 阅读:4603 作者:fengyuzaitu 栏目:编程语言

场景说明
            当前使用FFmpeg3.4版本的开发库,编译过程中出现:'AVStream::codec': 被声明为已否决的异常错误,并且提示:Using AVStream.codec … deprecated, use AVStream.codecpar instead。从提示可以看出,需要使用AVStream.codecpar替代AVStream.codec,前者类型是AVCodecParameters,后者的类型是AVCodecContext.

历史说明
            旧版本使用AVStream.codec是因为在打开码流(avformat_open_input),探测视频数据(avformat_find_stream_info)的时候,很容易获取源视频的一些信息,然后在解码的时候直接打开×××,开始解码

网上方案
    将VS的SDL检查关闭

原因分析
            新版本的FFmpeg中AVStream的codec成员不再推荐使用,而是要求使用codecpar。FFmpeg中所谓的“被声明为已否决”就是因为函数或者结构体属性被标示为attribute_deprecated,很有可能在未来的版本中就删除了。
所以我们最好的解决方案就是使用新的被推荐使用的函数、结构体等。在后续中因为要解决avformat_find_stream_info探测流慢的问题,会针对codecpar进行相应的赋值


FFmpeg3.x版本之前的代码
pAVCodecContext = pAVFormatContext->streams[videoIndex]->codec;

FFmpeg3.x最佳解决方案
    pAVCodecContext = avcodec_alloc_context3(NULL);  
    if (pAVCodecContext == NULL)  
    {  
        printf("Could not allocate AVCodecContext\n");  
        return -1;  
    }  
    avcodec_parameters_to_context(pAVCodecContext, pAVFormatContext->streams[videoIndex]->codecpar);  

 

新旧版本FFmpeg对比

新                                            旧

AVPixelFormat                       PixelFormat

codecpar                                AVStream::codec

av_image_fill_arrays               avpicture_fill

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI