由于工作及学习的原因,需要研究移动端的多媒体视频编辑,自然也就接触到了FFmpeg以及MediaCodec。作为一种阶段性的总结,记录一下自己对于FFmpeg以及MediaCodec的一些经验。后面也会写一些例如带MediaCodec的FFmpeg的编译以及FFmpeg的使用或一些源码分析之类的…

对于FFmpeg于MediaCodec,首先最重要的问题是:FFmpeg是什么,MediaCodec是什么,各自有什么样的优缺点。

FFmpeg:FFmpeg本质上可以看做是媒体处理工具的集合,包含了很多的媒体文件处理工具,例如媒体文件格式解析工具、编解码器等,这些工具实际上就是一个个的库,而FFmpeg的命令行程序实际上就是对这些库的一种包装,在调用命令行程序时也是通过底下的这些库来完成操作。这些库有的是编译时可选的,而且FFmpeg也支持一些外部的库,例如x264、MediaCodec。FFmpeg由于提供了很多的编解码器,而且它的媒体操作也很丰富,所以可以支持非常多的媒体类型,同时很多的处理功能也已经由FFmpeg提供,使用者只需要去调用即可,所以不少的编辑处理功能可以相对简单地完成开发。缺点就是如果通过其自带的软编解码来完成移动端上的任务的话效率会比较低。

MediaCodec:MediaCodec提供的功能就相对单一,它基本上只用来完成编解码相关的功能。以整个视频转码流程举例,大致需要几个步骤:解封装->解码->滤镜处理等操作->编码->封装,MediaCodec只提供编解码功能,而其它的功能则需要其它组件,如MediaExtractor以及MediaMuxer来完成。但是MediaCodec在编解码时提供硬件编解码功能,其好处是非常明显的,效率很高,且CPU占用大幅降低。说实话如果不使用硬件编解码的话,很多的转码过程的时长实在长得是令人无法忍受,放到APP上简直就是无法使用的功能。毕竟一段很短的视频,转码要好几分钟,发烫还严重,体验肯定是不行的。MediaCodec的缺点就是一定程度上会依赖于设备,由于MediaCodec的硬解码实际上是由厂商所提供的,同时安卓设备的硬件相互之间差异很大,所以在硬解码实现上自然也有所差别,就导致了一样的程序,一些设备上可以正常跑,而在另一些设备上则可能会出问题,此时就需要自行提供兼容性上的支持。

作一个简单的比喻:FFmpeg就像一个工具箱,而MediaCodec就像一类功能强大,但是使用范围相对受限且不够灵活的工具。

有几个需要注意的点:
1.FFmpeg也有对MediaCodec的支持,在编译出合适的库后,可以通过FFmpeg的api来调用MediaCodec,但只能使用解码功能。
2.MediaCodec并非只代表硬编解码,它事实上可以看做是一种服务,厂商将自己的编解码方案预先注册于服务中,而用户在需要时再通过服务去调用相应的编解码器来完成任务。MediaCodec支持硬件编解码以及软件编解码,可以自行选择需要使用的编解码器。
3.FFmpeg在使用MediaCodec时,使用的方式和JAVA调用是类似的,FFmpeg会通过JNI的callXXmethod去调用MediaCodec的方法,这个过程其实和JAVA中的调用没有区别,但是FFmpeg通过封装MediaCodec的操作,使得MediaCodec可以按照FFmpeg的编解码流程进行调用。

FFmpeg与MediaCodec 简单总结相关推荐

  1. FFmpeg资料来源简单分析:libswscale的sws_getContext()

    ===================================================== FFmpeg库函数的源代码的分析文章: [骨架] FFmpeg源码结构图 - 解码 FFmp ...

  2. 如何用FFmpeg编写一个简单播放器详细步骤介绍

    如何用FFmpeg编写一个简单播放器详细步骤介绍(转载) FFMPEG是一个很好的库,可以用来创建视频应用或者生成特定的工具.FFMPEG几乎为你把所有的繁重工作都做了,比如解码.编码.复用和解复用. ...

  3. 如何用 FFmpeg 编写一个简单播放器.pdf

    An ffmpeg and SDL Tutorial.pdf 如何用 FFmpeg 编写一个简单播放器.pdf 中文版

  4. 【前端】使用ffmpeg+vue3实现简单的视频编辑器

    使用ffmpeg+vue3实现简单的视频编辑器 主要依赖 '@ffmpeg/ffmpeg','vue' 实现功能 视频转码,添加文字水印,添加图片水印,处理进度条和用时,文件编码信息,生成序列帧. 界 ...

  5. 基于Ffmpeg解码器的简单播放器(a simple audio player based on Ffmpeg)

    这是一个基于Ffmpeg解码器的简单播放器,怎么在Windows上编译Ffmpeg可以在网上找到很多,开发环境是Windows XP SP3+VS2008,其中DirectSound控制单元来自jdk ...

  6. Android视频编解码之MediaCodec简单入门

    本篇只是简单入门,后面会继续写文章详细讲解: 由于MediaCodec涉及内容众多,原本想一篇文章把所有内容概括,但是后来发现不太可能,限于自己能力,想要考虑全面太难,我也是刚开始学习需要借助网上的代 ...

  7. FFmpeg编写一个简单播放器 -1

    2019独角兽企业重金招聘Python工程师标准>>> 指导1:制作屏幕录像 概要   电影文件有很多基本的组成部分.首先,文件本身被称为容器Container,容器的类型决定了信息 ...

  8. ffmpeg工具的简单使用

    ====================== 分为三部分: 1.ffmpeg介绍,及简单使用 2.ffprobe介绍,及简单使用 3.ffplay介绍,及简单使用 ================== ...

  9. FFmpeg如何进行简单的音频转换

    英文原文:https://www.howtoforge.com/tutorial/ffmpeg-audio-conversion/ 这里有一个简单的FFmpeg,它将如何涵盖框架的一部分功能. 我们将 ...

最新文章

  1. Mac 解决IDEA无法启动的问题
  2. 13、创建触发器(CREATE TRIGGER)
  3. Java黑皮书课后题第8章:*8.13(定位最大的元素)编写下面的方法,返回二维数组中最大元素的位置。返回值是包含两个元素的一维数组,这两个元素表示二维数组中最大元素的行下标和列下标
  4. hdu 1806线段树 区间合并
  5. (z) 什么是好的硬件工程师
  6. 最高201万!华为高薪招应届生!专业是...
  7. 值传递和引用传递_C++ 中的值传递和引用传递
  8. [游戏开发]iOS 游戏开发教程资源
  9. 《大学之路》读书笔记(上)范文3700字
  10. 【笔试面试】75道逻辑推理题及答案
  11. 二维卷积与一维卷积区别
  12. Linux的磁盘分区、基本目录结构
  13. 62个程序员崩溃的瞬间,你经历过了吗?哈哈哈哈哈嗝~
  14. 对拍--from Altf4
  15. JAX-FLUIDS:可压缩两相流的完全可微高阶计算流体动力学求解器
  16. 搭建fabric开发环境
  17. java调用接口速度慢,Java 调用 webservice 接口,为什么这么慢
  18. 五月统考计算机,网络教育统考计算机复习资料 (4)
  19. 谷歌、Facebook等大公司都用什么语言?一张图带你看懂!
  20. 一文带你快速入门zabbix6.0的日常操作

热门文章

  1. 匿名用户访问vsftpd
  2. qt报错说no suitable kits found
  3. 牛客网--14407--甄总搬石头
  4. c语言课设抽奖系统(需在目录里创建一个文本文档a.txt)
  5. goroutine泄露
  6. c语言写程序思路考研题,快速解题 | 在考场C语言编程题
  7. 数据同步之全量同步与增量同步
  8. 如何启动ATS环境和实时库
  9. 快速安装Docker详细图文步骤教程
  10. 无锡设计培训——室内设计会用到软件有哪些?