博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ffmpeg mediacodec 硬解初探
阅读量:6949 次
发布时间:2019-06-27

本文共 1319 字,大约阅读时间需要 4 分钟。

ffmpeg mediacodec
硬解初探
1
编译:
ffmpeg
3.1
版本加入了android mediacodec
硬解支持,解码器如图
硬件加速器如图(还不清楚硬件加速器的功能)
编译带h264_mediacodec版本的库需要开启以下选项
--enable-jni
--enable-mediacodec
--enable-decoder=h264_mediacodec
--enable-hwaccel=h264_mediacodec
(不知道有什么用,还是开了)
 
2
使用:
首先在JNI_OnLoad
函数,或者使用解码器之前调用
av_jni_set_java_vm(vm, NULL);
(位于libavcodec/jni.h
来设置java
虚拟机(反调mediacodec
时会用到)
 
其次,由于h264_mediacodec
解码器和h264
解码器
id
相同
所以,软解时,通过
avcodec_find_decoder
id
)来寻找解码器
而想使用mediacodec
硬解时,使用
avcodec_find_decoder_by_name("h264_mediacodec");
寻找指定解码器
 
之后所有步骤和软解完全相同,不需要更改任何内容
 
3
暂时的现象和问题:
现象:
不知道是否和播放器本身架构设计和实现有关,对比h264
软解和硬解,cpu
使用率并没有明显下降,多数下相差不大,有一部分视频能出现5%-10%
的下降
但较为明显提升的是
解码速度
,解码640X360
分辨率时,已有明显区别(左图软解,右图硬解,数字为每一帧解码耗费时间,单位毫秒,左右两图时间并非一一对应,仅比较量级)
视频为http://ips.ifeng.com/video19.ifeng.com/video09/2015/02/28/3019136-102-008-1929.mp4
 
                               
 
 
 
解码1920X1080
分辨率时,区别很大(左图软解,右图硬解,数字为每一帧解码耗费时间,单位毫秒,左右两图时间并非一一对应,仅比较量级)
视频为
         
                                     
 
问题:
软解出来的数据格式为
YUV420P
,直接使用
libyuv
转换即可;在我这台手机上硬解出来的数据格式为
NV
12
据网上博客所说,不同机器解码出来的数据格式不尽相同,这就导致解码出来后的数据,需要根据其类型来做转化,使用
ffmpeg
自带的转换函数非常简单通用,但是效率有待考察。
 
libyuv
中包含
neon
加速,但是不包含通用转换函数,需要自行判断类型,而且还不包含
ToRGBA
的函数,主要包含
ToARGB
的函数,
native window
显示时,只支持
RGBA8888
RGBX8888
RGB656
,这样会在转换上增加了一些复杂度
这篇博客讲述了android
api21
之后,硬解指定格式的方法
附:
在libavcodec中的 mediacodec_common.c里面我找到了这个
注意ffmpeg里面也有jni.h,需要引入avcodec时加上路径,然后mk文件里面不引入到avcodec这一级目录。

转载地址:http://nehnl.baihongyu.com/

你可能感兴趣的文章
PCA(主成分分析)的简单理解
查看>>
[Asp.net web api]缓存
查看>>
结构化、半结构化和非结构化数据
查看>>
thinkPHP 快速上手
查看>>
IaaS,SaaS,PaaS的区别
查看>>
查看nvidia的GPU
查看>>
C#的提交表单方式主要有两种WebClient与HttpWebRequest
查看>>
UVA 4857 Halloween Costumes 区间背包
查看>>
爬虫框架webmagic与spring boot的结合使用--转
查看>>
安防工程商必须知道的PoE供电真相
查看>>
使用 Python & Flask 实现 RESTful Web API
查看>>
R语言学习 第二篇:矩阵和数组
查看>>
在服务器端png转jpg
查看>>
MarkDown 编辑数学公式
查看>>
Docker(五):Docker 三剑客之 Docker Machine
查看>>
SQLite中的WHERE子句
查看>>
移动端底部input被弹出的键盘遮挡
查看>>
dubbo 部分 配置的关系-dubbo github 官方案例
查看>>
SpringBoot JMS(ActiveMQ) 使用实践
查看>>
如何用Tensorflow训练模型成pb文件和和如何加载已经训练好的模型文件
查看>>