一. AVCodecContext解码上下文

  1.avcodec_register_all() : 注册所有的解码器

  2.AVCodec *avcodec_find_decoder(enum AVCodecID id)  :  查找解码器(法一 :  通过ID去查找)

   AVCodecID ------> AVStream->codecpar->codec_id : 就是解封装后的ID ----------->这个是软解码的查找解码器的方式

  3.AVCode *avcodec_find_decoder_by_name(const char *name) : 查找解码器(法二 :  通过名字去查找)--------->avcodec_find_decoder_by_name("h264_mediacodec")---------------->这个是硬解码查找的编码器方式

       2和3做一个对比 : 通过ID去查找编码器为软解码

           通过名字去查找编码器为硬解码  

  4.AVCodecContext  *avcodec_alloc_context3(const  AVCodec *codec)  :  创建AVCodec空间

  5. void avcodec_free_context(AVCodecContext  **avctx)  :  释放AVCodec的空间

  6.int avcodec_open2(AVCodecContext *avctx , const AVCodec *codec , AVDictionary  **options) :  打开avcodec编码器

  AVDictionary  **options  -------------> /libavcodec/options_table.h(这里面是存key--value键值对)

  7. int thread_count : 使用CPU的数量

  8. time_base : 时间的基数

  9. avcodec_parameters_to_context : 把AVStream复制到avcodec里面

二. AVFrame : 存放解码后的数据

  1.AVFrame *frame  =  av_frame_alloc() : 分配一个空间并且初始化

  2.void av_frame_free(AVFrame **frame) :  释放创建的空间

  3.int av_frame_ref(AVFrame *dst , const AVFrame *src) : 引用计数+1

  4.AVFrame *av_frame_clone(const AVFrame *src) : 分配一个空间并且引用计数=1

  5.void av_frame_unref(AVFrame *frame) : 引用计数-1

  6.uint8_t  *data[AV_NUM_DATA_POINTERS]  :  用来数据的存放Y[0]U[1]V[2]

  7.int linesize[AV_NUM_DATA_POINTERS] :  视频:一行数据的大小 音频:一个通道数据的大小(这两个地方是一个坑,以后仔细看看这一块的东西)

       data[0]:存放着Y,linesixe[0]代表存放着data[0]里面的所有数据量 

  8.int width

  9.int height

  10.int nb_samples : 音频 : 单通道的样本数据量

  11.int64_t   pts : 显示时间

  12.int64_t  pkt_dts :

  13.format : 视频: 像素格式(YUV420)   音频:采样率的格式(8bit or 16bit)

三. 

  avcodec_send_packet(AVCodecContext *avctx , AVPacket * avpkt) : 把Packet数据放入解码队列中

  avcodec_receive_frame(AVCodecContext *avctx , AVFrame *frame) : 从解码空间取出数据

  JNI_Onload ------>硬解码初始化,进入java程序之前会调用这个函数入口,然后把java上层应用的环境传给FFmpeg进行调用.

  

  

FFmpeg软硬解和多线程解码的更多相关文章

  1. FFmpeg详解

    认识FFMPEG FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式.多媒体传输协议以及音视频编解码器.因此,对于从事多媒体技术开发的工程师来说,深入研究FFM ...

  2. FFmpeg: 一个简单测试手机解码效率的方法

    先写一个获取当前时间戳的方法 long long GetNowMs() { struct timeval tv; gettimeofday(&tv, NULL); ; // 为了简化计算,否则 ...

  3. ffmpeg 详解

    来源:http://blog.itpub.net/9399028/viewspace-1242300/ FFMPEG详解   认识FFMPEG FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几 ...

  4. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

    在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...

  5. MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!

    MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!2017年06月15日 19:59:44 蓝色-鸢尾 阅读数:2062版权声明:本文为博主原创文章,如需转 ...

  6. 3——FFMPEG之解复用器-----AVInputFormat(转)

    1. 数据结构: AVInputFormat为FFMPEG的解复用器对象,通过调用av_register_all(),FFMPEG所有的解复用器保存在以first_iformat为链表头的链表中,且还 ...

  7. FFmpeg(9)-解码器解码代码演示(FFmpeg调用MediaCodec实现硬解码、多线程解码、及音视频解码性能测试)

    一.AVFrame 用来存放解码后的数据. [相关函数] AVFrame *frame = av_frame_alloc();                       // 空间分配,分配一个空间 ...

  8. FFmpeg学习5:多线程播放视音频

    在前面的学习中,视频和音频的播放是分开进行的.这主要是为了学习的方便,经过一段时间的学习,对FFmpeg的也有了一定的了解,本文就介绍了 如何使用多线程同时播放音频和视频(未实现同步),并对前面的学习 ...

  9. FFmpeg(二) 解封装相关函数理解

    一.解封装基本流程 ①av_register_All()////初始化解封装,注册解析和封装的格式. ②avformat_netword_init()//初始化网络,解析rtsp协议 ③avforma ...

随机推荐

  1. ubuntu 安装 google Gtest

    1.安装源代码 在ubuntu的桌面上,右键选择打开终端,在终端中输入如下命令: $ sudo apt-get install libgtest-dev 下载源码后,apt将会在目录/usr/src/ ...

  2. 清除Pycharm设置的方法

    Mac 按需运行下面的 rm 删除命令 # Configuration rm -rf ~/Library/Preferences/PyCharm* # Caches rm -rf ~/Library/ ...

  3. 挪过来的spring mvc 的入门 介绍

    目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...

  4. BZOJ4407 于神之怒加强版 - 莫比乌斯反演

    题解 非常裸的莫比乌斯反演. 但是反演完还需要快速计算一个积性函数(我直接用$nlogn$卷积被TLE了 推荐一个博客 我也不想再写一遍了 代码 #include<cstring> #in ...

  5. ubuntu下设置DNS服务器

    当网卡通过DHCP获取IP地址时,DHCP会根据DHCP服务器配置,自动给系统分配DNS服务器地址,此时执行 ping www.baidu.com 动作,会将百度的域名在本地转换成ip地址,然后走路由 ...

  6. [SoapUI] 通过正则表达式从xml格式的response中提取ID

    import com.eviware.soapui.support.GroovyUtils import java.util.regex.* //Get response def groovyUtil ...

  7. Python 版本之 Anaconda

    https://www.anaconda.com/download/#linux Anaconda概述 Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windo ...

  8. python的基础操作2

    一 字符串格式化 占位符 %s和%d %s是属于字符串的占位符,而%d是属于数字类型的占位符 #占位符 %s %d # a="我叫%s,年龄%d,就是一个%s"%("al ...

  9. 2018.09.02 Atcoder Regular Contest 102简要题解

    比赛传送门 T1 Triangular Relationship 分析之后发现有两种情况: 1. n为奇数,那么所有数都是k的倍数. 2. n为偶数,那么所有数都是k/2的倍数. 然后就可以愉快A题了 ...

  10. 47 On Interpersonal Relationship 关于人际关系

    47 On Interpersonal Relationship 关于人际关系 ①Since we are social beings, the quality of our lives depend ...