http://www.cnblogs.com/elesos/p/6860865.html

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分辨率时,区别很大(左图软解,右图硬解,数字为每一帧解码耗费时间,单位毫秒,左右两图时间并非一一对应,仅比较量级)
视频为http://gitdown.bravovcloud.com/video/3.mp4
                                     
问题:软解出来的数据格式为YUV420P,直接使用libyuv转换即可;在我这台手机上硬解出来的数据格式为NV12
据网上博客所说,不同机器解码出来的数据格式不尽相同,这就导致解码出来后的数据,需要根据其类型来做转化,使用ffmpeg自带的转换函数非常简单通用,但是效率有待考察。
libyuv中包含neon加速,但是不包含通用转换函数,需要自行判断类型,而且还不包含ToRGBA的函数,主要包含ToARGB的函数,native window显示时,只支持RGBA8888,RGBX8888和RGB656,这样会在转换上增加了一些复杂度
https://www.polarxiong.com/archives/Android-MediaCodec%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%E7%A1%AC%E4%BB%B6%E8%A7%A3%E7%A0%81-%E9%AB%98%E6%95%88%E7%8E%87%E5%BE%97%E5%88%B0YUV%E6%A0%BC%E5%BC%8F%E5%B8%A7-%E5%BF%AB%E9%80%9F%E4%BF%9D%E5%AD%98JPEG%E5%9B%BE%E7%89%87-%E4%B8%8D%E4%BD%BF%E7%94%A8OpenGL.html
这篇博客讲述了android在api21之后,硬解指定格式的方法
附:
在libavcodec中的 mediacodec_common.c里面我找到了这个
注意ffmpeg里面也有jni.h,需要引入avcodec时加上路径,然后mk文件里面不引入到avcodec这一级目录。

ffmpeg mediacodec 硬解初探相关推荐

  1. MediaCodec硬解流程

    一 MediaCodec概述 MediaCodec 是Android 4.1(api 16)版本引入的低层编解码接口,同时支持音视频的编码和解码.通常与MediaExtractor.MediaMuxe ...

  2. Ubuntu18使用FFMPEG实现QSV硬解

    前言 由于项目需要,需要在一块I7-8850H上进行H264解码成YUV并显示的功能.由于系统是Ubuntu18,故打算使用QT+FFMPEG来实现.先前的一路软解发现CPU占用率去到了20%以上,我 ...

  3. VLC和WebRTC等开源库关于硬解软解的策略

    一.移动端OS角度硬解能力支持情况 Android 4.1.2以前:    不支持 4.1.2-5.0     Java侧MediaCodec 5.0以上    Java侧MediaCodec,C侧n ...

  4. 【干货】关于软解(ffmpeg)和硬解(MediaCodec、MediaPlayer)以及底层(OpenMax)的那点事

    现在各种视频软件上都有硬解软解这两个选择,但它们有什么区别呢?用哪个好呢?今天就跟随小编一起了解了解吧. 首先,了解下播放视频的基本流程: 解封装:就是将输入的封装格式的数据,分离成为音频流压缩编码数 ...

  5. 音视频开发(六):MediaCodec硬编解流程与实践

    目录 MediaCodec介绍 工作原理和基本流程 数据格式 生命周期 同步和异步模式 流控 实践:AAC解码为PCM同步和异步的两种实现 一.介绍 Android底层多媒体模块采用的是OpenMax ...

  6. 音视频系列八 ffmpeg使用mediacodec硬解码

    文章目录 重新编译ffmpeg 配置JavaVM 替换AVCodec 重新编译ffmpeg ffmpeg默认是没有开启mediacodec的,所以需要在配置文件上增加配置 --enable-media ...

  7. Android PC投屏简单尝试(录屏直播)2—硬解章(MediaCodec+RMTP)

    代码地址 :https://github.com/deepsadness/MediaProjectionDemo 想法来源 上一边文章的最后说使用录制的Api进行录屏直播.本来这边文章是预计在5月份完 ...

  8. ffmpeg使用bsf后码流从avcc格式变成annex-b造成硬解异常

    ffmpeg使用bsf后码流从avcc格式变成annex-b造成硬解异常 问题的产生 第一个ffmpeg拷贝(copy)第三方的流到源站,第二个ffmpeg进程的源流为第一个ffmpeg的输出,并使用 ...

  9. 英伟达CUVID硬解,并通过FFmpeg读取文件

    虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...

最新文章

  1. 2021年春节联欢晚会第三次联排亮点多
  2. 【Linux系统编程应用】 Linux输入子系统(二)
  3. qt绘制一圈圆_Qt绘制圆形,矩形等图形   绘制同心圆
  4. javascript要点_JavaScript要点:为什么您应该知道引擎如何工作
  5. 在电脑上怎么打印文件_电脑上怎么mov格式怎么转换成mp4
  6. 《21天学通HTML+CSS+JavaScript Web开发(第7版)》——1.4 统一资源定位符
  7. Laser Reflections solutions
  8. [功能改进]Ctrl+Enter直接提交评论
  9. java计算机毕业设计高校防疫物资管理系统MyBatis+系统+LW文档+源码+调试部署
  10. 微信小程序云开发项目——多肉植物销售小程序
  11. mac下面用ffmpeg抓取桌面以及摄像头推流进行直播
  12. 十年风雨,一个普通程序员的成长之路(七)膨胀、骄傲,程序员转项目经理的原罪...
  13. 数字化转型时代!你一定要了解的低代码
  14. 原链YCC战略定位:公链+私链(联盟链、私有链),实现价值传递
  15. 在python中用sql创建表_Python Pandas to_sql,如何用主键创建表?
  16. 常用传感器讲解十八--爆震传感器感器(KY-031)
  17. 像学画画一样的学程序研发
  18. OC语言1-前期准备
  19. 校园论坛网站设计设计与实现
  20. 治国修身齐家正心诚意!考研加油!

热门文章

  1. 童言无忌之小瑈与甲虫
  2. 深入浅出DPDK-第一章
  3. CALL是如何炼成的之ECX对象指针的应用
  4. 广东工业大学程序设计竞赛决赛 D
  5. DOTA数据集分割,并将txt转为xml
  6. 数电学习(三、半导体二极管门电路)(三)
  7. Excel如何巧妙计算结算日期
  8. SQL 小练习(简单:基础语句)—合集
  9. Ansible中的一些特殊变量与执行控制
  10. vue 和 uniapp 的密码框小眼睛(通用)