网易首页 > 网易号 > 正文 申请入驻

ffmpeg3.3新版本AVStream的封装流参数由codec替换codecpar(解码)

0
分享至

ffmpeg新版本中(封装流)AVStream的codec参数要被codecpar参数所替代,这样替代我们要注意什么,为什么要替代,我们先来看下ffmpeg的代码。

代码分析和新参数优势

typedef struct AVStream { #if FF_API_LAVF_AVCTX /** * @deprecated use the codecpar struct instead */ attribute_deprecated AVCodecContext *codec; #endif 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 /* * Codec parameters associated with this stream. Allocated and freed by * libavformat in avformat_new_stream() and avformat_free_context() * respectively. * * - demuxing: filled by libavformat on stream creation or in * avformat_find_stream_info() * - muxing: filled by the caller before avformat_write_header() */ AVCodecParameters *codecpar; }

从代码中我们可以看出codec参数在58版本及之后就不会支持了,需要由codecpar参数所替代。这样做的目的我想主要是将编码和封装彻底分离,之前封装和编码使用的参数都是存放在codec中,这样的好处是代码简洁,不需要额外给封装传递参数,但坏处是把编码和封装的代码融合在一块耦合性较大,有很多需求,我们只需要编码并不需要做封装,比如我们做自己的推流协议,直接吧编码后h264数据通过自定义的协议发送。

再比如直播推流中我们编码和封装推流会在不同的线程中处理,如果共用一个上下文肯定还需要处理互斥问题,分开就不会存在这个问题。

既然必须要替换我们如何处理;

比如原来的视频播放处理方式是这样(错误处理省略):

//打开多媒体文件,我们假定视频流索引为0 AVFormatContext *ic = NULL; avformat_open_input(&ic, "test.mp4", 0, 0); //找到视频解码器,比如H264 AVCodec *codec = avcodec_find_decoder(ic->streams[0]->codec->codecid); //打开视频解码器,打开音频解码器用的也是同一个函数 avcodec_open2(enc, ic->streams[0]->codec, NULL);

看代码我们知道avformat_open_input之后音视频的配置信息已经被写在了codec中,解封装和解码用同一套参数。但是如果替换为codecpar ,那解码器是独立创建的,那是否还要手动填写一遍解码参数,理论上是需要的,不过还好ffmpeg提供给我们一个函数做参数复制

int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par);

那我们codec参数替换为codecpar 代码就可以这样写了(错误处理省略)

//打开多媒体文件,我们假定视频流索引为0 AVFormatContext *ic = NULL; avformat_open_input(&ic, "test.mp4", 0, 0); //找到视频解码器,比如H264 AVCodec *codec = avcodec_find_decoder(ic->streams[0]->codecpar->codec_id); //独立的解码上下文 AVCodecContext * vc = avcodec_alloc_context3(codec); avcodec_parameters_to_context(vc, ic->streams[0]->codecpar); avcodec_open2(vc, codec, NULL);

代码改变后解码上下文就是独立的,后面解码也不需要与解封装上下文关联,包括清理。

解码器的ID号也变为从codecpar->codec_id成员获取。

更多的资料也可以关注我51cto上的视频课程

夏老师的课堂 http://edu.51cto.com/lecturer/12016059.html

C++编程FFMpegSDK美颜直播推流实战-基于qt5,opencv视频课程

http://edu.51cto.com/course/10840.html

本文出自 “夏曹俊” 博客,请务必保留此出处http://xiacaojun.blog.51cto.com/12016059/1958914

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
女子深夜打车回家,发现司机绕路她准备报警,司机:你仔细看后面

女子深夜打车回家,发现司机绕路她准备报警,司机:你仔细看后面

千秋文化
2026-02-12 20:06:26
你知道什么是降维打击吗?网友:符合高中学历的认知

你知道什么是降维打击吗?网友:符合高中学历的认知

带你感受人间冷暖
2026-02-13 21:51:11
王菲春晚状态引热议,57岁的她终于活成了普通人

王菲春晚状态引热议,57岁的她终于活成了普通人

娱娱娱影在线
2026-02-20 00:58:35
2026春节档总票房破30亿

2026春节档总票房破30亿

界面新闻
2026-02-19 19:30:39
为什么说中国以后都不会再申办奥运会了?原因其实并不复杂。

为什么说中国以后都不会再申办奥运会了?原因其实并不复杂。

百态人间
2026-02-12 15:30:16
雷军吹的牛实现了!小米YU7累计交付超20万辆:20万+市场击败特斯拉

雷军吹的牛实现了!小米YU7累计交付超20万辆:20万+市场击败特斯拉

快科技
2026-02-19 15:41:04
中国三大长寿食物,鱼只能排到第三,第一名很多人想不到!

中国三大长寿食物,鱼只能排到第三,第一名很多人想不到!

江江食研社
2026-02-12 12:30:10
孩子越大,越要告诉他这五句人生真相:比成绩更重要的,是活好这一生

孩子越大,越要告诉他这五句人生真相:比成绩更重要的,是活好这一生

青苹果sht
2026-02-20 05:52:21
春晚主持人刘心悦透露体重仅93斤:压力瘦,收获近年体重最低

春晚主持人刘心悦透露体重仅93斤:压力瘦,收获近年体重最低

大象新闻
2026-02-17 22:43:05
漫才兄弟登春晚口碑两极!语速快到倍速无字幕,北方观众像听天书

漫才兄弟登春晚口碑两极!语速快到倍速无字幕,北方观众像听天书

眼光很亮
2026-02-17 09:30:11
贬值最狠的4样东西出炉,普通人碰了就是血亏,尤其是最后一样

贬值最狠的4样东西出炉,普通人碰了就是血亏,尤其是最后一样

一盅情怀
2026-02-19 16:04:57
回顾:上海杀妻案朱晓东被处死刑,狱中对妻子的评价,让人胆寒

回顾:上海杀妻案朱晓东被处死刑,狱中对妻子的评价,让人胆寒

谈史论天地
2026-02-11 13:30:11
上海收购“老破小”,市场要变天了?

上海收购“老破小”,市场要变天了?

巢客HOME
2026-02-19 10:25:03
“流水220万,利润0” 2026开年多了个新词——无利润繁荣

“流水220万,利润0” 2026开年多了个新词——无利润繁荣

餐饮界
2026-02-13 19:49:19
中方不救美元,游戏已结束,特朗普在空军一号喊话中国,措辞强烈

中方不救美元,游戏已结束,特朗普在空军一号喊话中国,措辞强烈

知鉴明史
2026-02-19 18:37:08
65岁以上必看:这七种行为堪比作死,最后一种能把你吓个半死

65岁以上必看:这七种行为堪比作死,最后一种能把你吓个半死

暖风吹过竹林
2026-02-04 18:52:24
尼泊尔“一妻多夫”该如何生活?妻子苦不堪言:一点都不幸福。

尼泊尔“一妻多夫”该如何生活?妻子苦不堪言:一点都不幸福。

百态人间
2025-11-06 05:45:02
59岁李琰彻底封神:16年5届冬奥带队全拿金牌 又蹦又跳像个小女孩

59岁李琰彻底封神:16年5届冬奥带队全拿金牌 又蹦又跳像个小女孩

风过乡
2026-02-20 06:57:14
一届诞生9个全明星,前三顺位无一水货,他们是被遗忘的一届新秀

一届诞生9个全明星,前三顺位无一水货,他们是被遗忘的一届新秀

大卫的篮球故事
2026-02-10 22:05:51
七十万开店演成“战国七雄”,惠州七闺蜜把生意做成了“散伙饭”

七十万开店演成“战国七雄”,惠州七闺蜜把生意做成了“散伙饭”

阿芒娱乐说
2026-02-20 05:52:10
2026-02-20 07:35:00
老夏课堂
老夏课堂
老夏课堂的编程技术
22文章数 70关注度
往期回顾 全部

头条要闻

美专家:美国若武力介入台湾 或致美数十万人死亡

头条要闻

美专家:美国若武力介入台湾 或致美数十万人死亡

体育要闻

不想退役!徐梦桃:希望能参加第6次冬奥

娱乐要闻

霍启山恋情再添实锤 和娜然同游意大利

财经要闻

面条火腿香菇酱!上市公司这些年请你吃

科技要闻

怒烧45亿,腾讯字节阿里决战春节

汽车要闻

量产甲醇插混 吉利银河星耀6甲醇插混版申报图

态度原创

艺术
旅游
健康
手机
公开课

艺术要闻

李白若在世,诺贝尔文学奖会是他的囊中物吗?

旅游要闻

拓印、剪纸、糖画“圈粉”外籍游客 沉浸式感受传统文化体验喜庆中国年

转头就晕的耳石症,能开车上班吗?

手机要闻

三星 Galaxy S26 Ultra跑分曝光,独占防窥屏功能

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版