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

本文共 1369 字,大约阅读时间需要 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这一级目录。

转载于:https://www.cnblogs.com/elesos/p/6860865.html

你可能感兴趣的文章
Java语言概述
查看>>
关于BOM知识的整理
查看>>
使用word发布博客
查看>>
面向对象的小demo
查看>>
微服务之初了解(一)
查看>>
GDOI DAY1游记
查看>>
收集WebDriver的执行命令和参数信息
查看>>
数据结构与算法(三)-线性表之静态链表
查看>>
mac下的mysql报错:ERROR 1045(28000)和ERROR 2002 (HY000)的解决办法
查看>>
Hmailserver搭建邮件服务器
查看>>
django之多表查询-2
查看>>
快速幂
查看>>
改善C#公共程序类库质量的10种方法
查看>>
AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>