FFmpeg软硬解和多线程解码
一. 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软硬解和多线程解码的更多相关文章
- FFmpeg详解
认识FFMPEG FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式.多媒体传输协议以及音视频编解码器.因此,对于从事多媒体技术开发的工程师来说,深入研究FFM ...
- FFmpeg: 一个简单测试手机解码效率的方法
先写一个获取当前时间戳的方法 long long GetNowMs() { struct timeval tv; gettimeofday(&tv, NULL); ; // 为了简化计算,否则 ...
- ffmpeg 详解
来源:http://blog.itpub.net/9399028/viewspace-1242300/ FFMPEG详解 认识FFMPEG FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几 ...
- 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)
在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...
- MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!
MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!2017年06月15日 19:59:44 蓝色-鸢尾 阅读数:2062版权声明:本文为博主原创文章,如需转 ...
- 3——FFMPEG之解复用器-----AVInputFormat(转)
1. 数据结构: AVInputFormat为FFMPEG的解复用器对象,通过调用av_register_all(),FFMPEG所有的解复用器保存在以first_iformat为链表头的链表中,且还 ...
- FFmpeg(9)-解码器解码代码演示(FFmpeg调用MediaCodec实现硬解码、多线程解码、及音视频解码性能测试)
一.AVFrame 用来存放解码后的数据. [相关函数] AVFrame *frame = av_frame_alloc(); // 空间分配,分配一个空间 ...
- FFmpeg学习5:多线程播放视音频
在前面的学习中,视频和音频的播放是分开进行的.这主要是为了学习的方便,经过一段时间的学习,对FFmpeg的也有了一定的了解,本文就介绍了 如何使用多线程同时播放音频和视频(未实现同步),并对前面的学习 ...
- FFmpeg(二) 解封装相关函数理解
一.解封装基本流程 ①av_register_All()////初始化解封装,注册解析和封装的格式. ②avformat_netword_init()//初始化网络,解析rtsp协议 ③avforma ...
随机推荐
- linux下静默安装 weblogic12.2.1.3中间件
第一步:准备需要的安装包文件,这里注意 weblogic12.2.*需要的最低JDK版本为1.8以上 1.查看当前的镜像列表:docker images 2.运行镜像,并进入容器,这里运行基本的cen ...
- nginx反向代理架构与安装配置(一)
这里我们准备四台虚拟机,二台负载均衡(LB01,LB02),二台web服务器(WEB01,WEB02). 这里默认所有软件都安装在/data目录下. 四台虚拟机的初始安装是centos7的最小 ...
- Python3编程技巧
高效处理数据类型方法: In []: from random import randint In []: data=[randint(-,) )] In []: data Out[]: [-, -, ...
- gis笔记 wms wfs等OGC标准
WFS 和WMS的区别 WFS是基于地理要素级别的数据共享和数据操作,WFS规范定义了若干基于地理要素(Feature)级别的数据操作接口,并以 HTTP 作为分布式计算平台.通过 WFS服务,客户端 ...
- 06 爬虫框架:scrapy
爬虫框架:scrapy 一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前S ...
- 2018年UI设计趋势概览
互联网产品的用户界面设计趋势是根据用户的不同需求而不断变化的.在仔细分析了过去几年用户界面设计的趋势和创新之后,我们可以发现其背后的一些规律,2018年UI界面设计的趋势如下. 渐变色 在过去的几年 ...
- asp.net core 2.1 增加Nlog日志到sql server数据库
一.增加引用 <PackageReference Include="NLog.Extensions.Logging" Version="1.2.1" /& ...
- 直压到亚马逊AWS平台,阿里云OSS平台或者腾讯云COS平台
GTX Compressor (直压上云技术预览版) Powered by GTXLab of Genetalks. 技术预览版本下载地址: https://github.com/Genetalks/ ...
- Spring Boot集成Quartz注入Spring管理的类
摘要: 在Spring Boot中使用Quartz时,在JOB中一般需要引用Spring管理的Bean,通过定义Job Factory实现自动注入. Spring有自己的Schedule定时任务,在S ...
- Linux服务器部署系列之一—Apache篇(上)
Linux系统的应用越来越广泛了,学习linux系统的网管兄弟也有增加的趋势.很久以前就有些想法,要将自己学的linux知识整理一下.最近,终于下定决心,挤出时间开始动手写些东西了.虽然不一定好,不过 ...