先来看两个编解码有关的数据结构:
AVCodec:包含了编解码器的一些方法,比如在解码时将packet发给解码器时的代码如下:

re = avcodec_send_packet(av, pkt);

将指向编解码器的指针与pkt一起给avcodec_send_packet函数
AVCodecContext:作为编解码器的上下文,包含了编解码器的环境,简单来说,AVCodec是说如何编解码,这个就是告诉他相应属性设置,如对应视频来说,长宽,以及编码相应设置是否包含B桢,GOP是多少等。

 ///02找视频解码器,const AVCodec *vcodec=avcodec_find_decoder(ic->streams[videoindex]->codecpar->codec_id);if (!vcodec){cout << "can't find the codec id" << ic->streams[videoindex]->codecpar->codec_id << endl;getchar();return -1;}cout<< " find the video codec id"<< ic->streams[videoindex]->codecpar->codec_id << endl;///03创建解码器上下文AVCodecContext *vc=avcodec_alloc_context3(vcodec);///04配置解码器上下文参数avcodec_parameters_to_context(vc, ic->streams[videoindex]->codecpar);//八线程解码vc->thread_count = 8;///05打开解码器上下文re = avcodec_open2(vc, 0, 0);if (re != 0){char buf[1024] = { 0 };av_strerror(re, buf, sizeof(buf) - 1);cout << "open audio codec failed!" << buf << endl;getchar();return -1;}cout << "video codec success!" << endl;

01注册解码器

avcodec_register_all()也被弃用了,在新版ffmpeg中不需要注册

02找视频解码器

在读帧前进行该操作,可通过av_find_best_stream()来找:

先定义一个指向AVcodec的常量指针vcodec,
av_find_best_stream()的第五个参数为AVCodec的二级指针,用于改变vcodec的指向
但这样的话解码和解封装在一起,耦合度太大,这里用id号获取

const AVCodec *vcodec=avcodec_find_decoder(ic->streams[videoindex]->codecpar->codec_id);

但有可能找不到流中的解码器号,这里要做个判断看看是否找到解码器

if (!vcodec)
{cout << "can't find the codec id" << ic->streams[videoindex]->codecpar->codec_id << endl;getchar();return -1;
}

03创建解码器上下文

AVCodecContext *vc=avcodec_alloc_context3(vcodec);

将指向解码器的指针传入,开辟一块空间用于放置解码器相关的信息,该空间用vc标记

04配置解码器上下文参数

avcodec_parameters_to_context(vc, ic->streams[videoindex]->codecpar);

将流中的codec参数复制到解码器上下文中

05打开解码器上下文

re = avcodec_open2(vc, 0, 0);
第二个参数是解码器codec,但在03创建上下文的时候已经传进去了,这里就不用再传了,设为0就行了
if (re != 0)
{char buf[1024] = { 0 };av_strerror(re, buf, sizeof(buf) - 1);//用buf存放错误信息cout << "open audio codec failed!" << buf << endl;getchar();return -1;
}

打开音频解码同理,改下名字就行了:

///01注册解码器//avcodec_register_all()也被弃用了///02找视频解码器,在读帧前进行该操作,可通过av_find_best_stream()来找,但这样的话解码和解封装在一起,耦合度太大,这里用id号获取const AVCodec* acodec = avcodec_find_decoder(ic->streams[audioindex]->codecpar->codec_id);//有可能找不到流中的解码器号,这里要做个判断看看是否找到解码器if (!vcodec){cout << "can't find the codec id" << ic->streams[audioindex]->codecpar->codec_id << endl;getchar();return -1;}cout << " find the audio codec id" << ic->streams[audioindex]->codecpar->codec_id << endl;///03创建解码器上下文AVCodecContext* ac = avcodec_alloc_context3(acodec);//将指向解码器的指针传入,开辟一块空间用于放置解码器相关的信息///04配置解码器上下文参数avcodec_parameters_to_context(ac, ic->streams[audioindex]->codecpar);//将流中的codec参数复制到解码器上下文中//八线程解码vc->thread_count = 8;///05打开解码器上下文re = avcodec_open2(ac, 0, 0);//第二个参数是解码器codec,但在创建上下文的时候已经传进去了,这里就不用再传了if (re != 0){char buf[1024] = { 0 };av_strerror(re, buf, sizeof(buf) - 1);//用buf存放错误信息cout << "open audio codec failed!" << buf << endl;getchar();return -1;}cout << "video codec success!" << endl;

播放器实战08 打开AVCODEC相关推荐

  1. 播放器实战28 总结

    至此,播放器的基本功能已经实现,进行一个总结: 一,仅进行播放时的函数调用流程 只做一个大致的梳理且不涉及seek等操作): 01.QT中的整个控件为QWidget类,Xplay2类为其继承,在mai ...

  2. 播放器实战19 Xaudio打开音频

    1.xaudio.h #pragma once class xaudioplay {public:static xaudioplay* get();xaudioplay();//一定得是虚析构函数,d ...

  3. Windows10环境下设置播放器默认软件打开方式

    咳咳咳-简单的记录一下,毫无技术含量的高端操作. 1.设置默认播放器 2.设置默认PDF等类型的文件打开 OK end.........

  4. vue实现音乐播放器实战笔记

    一.项目说明 该播放器的是基于学习vue的实战练习,不用于其他途径.应用中的全部数据来自于 QQ音乐 移动端(https://m.y.qq.com/),利用 jsonp 以及 axios 代理后端请求 ...

  5. 基于 Vue 的直播播放器实战

    原文地址:点击进入 前言 时下直播的盛行让很多人对直播技术产生浓厚的兴趣,orange 本人也不例外,本文借着实战的目的完成一个 demo,并没有深入的讲解直播技术的实现原理以及推流和拉流的实现,为什 ...

  6. 阿里web播放器微信浏览器打开进度条设置和时间获取

    解决的问题: 1.阿里云的web播放器:移动端(安卓是红米手机和苹果11)在微信浏览器打开适用,pc端谷歌浏览器打开适用,其他没测. 2.全代码直接用,进度条没办法完全禁止拖动,只能快进就让他回到上一 ...

  7. vue 判断同一数组内的值是否一直_前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目

    项目名称:vue-fds_music 项目作者:符道胜 开源许可协议:Apache-2.0 项目地址:https://gitee.com/fudaosheng/vue-fds_music 项目简介 V ...

  8. 妙味课堂H5音乐播放器实战视频课程 ajax实战教程

    课程介绍: 本次课程涉及的知识点包括移动端H5.CSS3.JS.滑屏.HTTP协议.AJAX.跨域.前后端交互.PHP.mySql.jQuery--配合这些知识点,讲师写了一个H5播放器demo,用来 ...

  9. 后端实体类接收数组_前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目...

    项目名称:vue-fds_music 项目作者:符道胜 开源许可协议:Apache-2.0 项目地址:https://gitee.com/fudaosheng/vue-fds_music 项目简介 V ...

最新文章

  1. dev里timeedit控件如何赋值_抽奖程序里的字节跳动模式和时长控制,让抽奖更有仪式感!...
  2. 什么样的人贷款更容易?
  3. 有效的Java –所有对象通用的方法
  4. Jelinek-Merer与Absolute discounting 平滑方法
  5. mybatis-config.xml常用的配置信息
  6. 记录自己的第一次实习
  7. java 图片处理工具类(图片简单处理 java原生)
  8. SketchUp 有哪些实用的插件?
  9. 软件测试之测试的分类
  10. 非常全面详细的Sklearn介绍
  11. 406个银英稀有精英名称
  12. 小武学fpgaStep2
  13. 百度“文心一言”首批生态合作伙伴公布,Moka接入打造人力资源数字化人AI服务
  14. win10配置apache
  15. 人工智能技术在银行客服中心的应用风险-笔记
  16. MindMapper 总结SQL Server
  17. 现代计算机之父—冯·诺依曼
  18. CVE-2016-2183 解决方法
  19. 人脸识别的关键技术及原理
  20. 计算机科学文献中英文对照,计算机科学和技术英文文献.doc

热门文章

  1. 微信小程序 界面从右边滑出_微信小程序页面溢出左右滑动问题
  2. 未能找到类型或命名空间名称“DllImport“(是否缺少using指令或程序集引用?)
  3. python两个csv表数据合并_python – 根据列中的数据合并两个CSV文件
  4. 服务器系统部署方案,系统部署方案.doc
  5. 在剧里跟“刘亦菲”学营销:地推撬动“社交播传”
  6. LoRaWAN协议-物理层(PHY)详解
  7. linux 操作excel文件,Linux下输出excel文件
  8. 【数据结构Python描述】手动实现一个list列表类并分析常用操作时间复杂度
  9. 生成式对抗网络(GAN)简介
  10. 嵌入式面试(笔试)笔记2