文章目录

  • 重新编译ffmpeg
  • 配置JavaVM
  • 替换AVCodec

重新编译ffmpeg

ffmpeg默认是没有开启mediacodec的,所以需要在配置文件上增加配置

--enable-mediacodec

默认就会增加mediacodec支持的解码器,但是如果你禁用了所有的解码器,那根据自己需要手动打开,参考以下配置

--enable-decoder=h264_mediacodec
--enable-decoder=hevc_mediacodec
--enable-decoder=mpeg4_mediacodec
--enable-decoder=mpeg2_mediacodec
--enable-decoder=vp8_mediacodec
--enable-decoder=vp9_mediacodec

具体的编译详见前文。

配置JavaVM

在JNI_OnLoad方法中调用av_jni_set_java_vm方法,示例如下。

    av_jni_set_java_vm(vm, 0);

ffmpeg是通过jni回调Mediacodec Java层的API实现硬解的,如果有信心,不嫌麻烦,追求极致性能可以自己使用MediaCodec Native层的API实现。

替换AVCodec

在MediaCodec支持的编码下通过avcodec_find_decoder_by_name方法找到对应的编码器,其他与软解流程一样,以H264为例,参考代码如下。

        AVCodec *avCodec = nullptr;AVCodecID videoCodecID = avFormatContext->streams[video_index]->codecpar->codec_id;if (videoCodecID == AV_CODEC_ID_H264) {avCodec = avcodec_find_decoder_by_name("h264_mediacodec");if (avCodec == nullptr) {avCodec = avcodec_find_decoder(videoCodecID);}} else {avCodec = avcodec_find_decoder(videoCodecID);}

需要注意的是经过测试硬解得到的Frame的best_effort_timestamp可能恒等于AV_NOPTS_VALUE

音视频系列八 ffmpeg使用mediacodec硬解码相关推荐

  1. linux编译ffmpeg_[Cmake-Android音视频]ffmpeg3.4编译支持neon,硬解码

    编译环境 Ubuntu16.04 x86_64 Ffmpeg3.4 ndk-r14b 编译前的准备 ubuntu16.04 64位 Index of /releases/16.04.3​release ...

  2. 音视频系列:FFmpeg和NDK在Centos7上交叉编译

    更新: 2022.01.15:因应用商店需要上传64位APK,发现之前的脚本编译的arm64-v8a库,在使用时报错: java.lang.UnsatisfiedLinkError: dlopen f ...

  3. 音视频系列四 ffmpeg配合opensl es播放音频

    文章目录 一 解码成PCM 二 opensl es创建引擎,混音器 创建引擎 创建混音器 创建播放器,注册回调函数 一 解码成PCM 流程其实和视频差不多,参考播放视频的代码,稍作增改 先定义后面需要 ...

  4. datagrid 重载本地数据_音视频系列3:使用ffmpeg + nginx搭建本地转发服务器

    本文与csdn博客同步:https://blog.csdn.net/Hanghang_/article/details/104893135,欢迎关注,点赞,评论. 前言 音视频系列: HectoorZ ...

  5. 音视频系列2:ffmpeg将H.264解码为RGB

    音视频系列2:ffmpeg将H.264解码为RGB 前言 源码 前言 喜大普奔,终于更新啦,上期说到,如何使用ffmpeg+rtmp进行拉流,不熟悉的小伙伴们,可以先看上一期.今天我们要实现的是使用f ...

  6. ffmpeg rtmp 不清晰_音视频系列3:使用ffmpeg + nginx搭建本地转发服务器

    本文与csdn博客同步:https://blog.csdn.net/Hanghang_/article/details/104893135,欢迎关注,点赞,评论. 前言 音视频系列: HectoorZ ...

  7. ffmpeg rtmp 花屏_音视频系列6:ffmpeg多线程拉流

    本文与csdn博客同步:https://blog.csdn.net/Hanghang_/article/details/105302384,欢迎关注,点赞,评论. 前言 本篇博客是音视频系列的续集与改 ...

  8. 音视频常见概念:软解硬解、IBP帧、GOP、YUV编码

    音视频常见概念 软解与硬解 IBP帧 GOP YUV编码 RGB与YUV相互转换 参考资料 软解与硬解 视频解码分为软解和硬解. 所谓"软解"就是通过软件让 CPU 进行视频解码处 ...

  9. 音视频同步原理[ffmpeg]

    音视频同步原理[ffmpeg] output_example.c 中AV同步的代码如下(我的代码有些修改),这个实现相当简单,不过挺说明问题. 阅读前希望大家先了解一下时间戳的概念. /* compu ...

最新文章

  1. linux 内核调试方法
  2. unity 继承了 获取_获取继承链
  3. 8.6 多元高斯分布模型-机器学习笔记-斯坦福吴恩达教授
  4. 苹果看好医疗健康产业 AI技术将变革
  5. wxWidgets:事件和事件处理
  6. Oracle ASM 进程之ASMB
  7. AOP框架Dora.Interception 3.0 [1]: 编程体验
  8. Spring全家桶,永远滴神!
  9. Pytorch——Window上Pytorch的安装教程
  10. android曲线水波纹录音动画,Android-贝塞尔曲线实现水波纹动画
  11. 堪称神级的Spring Boot手册,从基础入门到实战进阶
  12. dex2jar java 1.8_dex2jar最新版下载-dex2jar下载 2.0官方版--pc6下载站
  13. Microsoft Visual Studio .NET 2003 编译xvidcore-1.1.3
  14. 【昊鼎王五】Windows的Git客户端安装步骤
  15. 电子签批板那个品牌好用?国产柜台电子签名板推荐
  16. win10共享打印机链接失败错误代码0x0000011b
  17. Domoticz 中接入斐讯 M1 空气质量检测仪
  18. 周志华西瓜书学习笔记(一)
  19. 万国数据登陆纳斯达克 宣布首次公开发行股票定价
  20. <动手学深度学习>之pytorch版本,配置d2lzh_pytorch包

热门文章

  1. Git新手学习使用总结
  2. 500台计算机分配方案,局域网超过500台电脑如何分配ip?有无假如方案?
  3. 【飞桨特色模型挑战赛】CTRGCN的轻量化
  4. PyQt5的日期和时间
  5. 【C语言】汉诺塔问题。
  6. php捉迷藏,物理学家捉迷藏(一)
  7. 台式电脑降噪解决方案zz
  8. 小皮面板有php环境吗,php环境搭建详解
  9. 十年翱翔 筑梦成长——北京市基础教育阶段创新人才培养十年总结会隆重召开
  10. android开发者应该收藏的优秀博客和技术网站