使用MediaCodec和MediaExtractor对视频进行解码和编码

2024-03-27

我需要将视频解码为一系列位图,以便我能够修改它们,然后将它们压缩回 android 中的视频文件。

我计划通过使用来管理这个getFrameAtTime并将其保存到图像序列中。然后我可以修改序列中的图像并将其编码回电影。但我对此有两个问题:

  • 首先,当我读到它时,getFrameAtTime用于创建缩略图,并不能保证返回正确的帧。这使得视频滞后。
  • 其次,保存图像并读取它需要很长时间。

我读到进行解码的正确方法是使用 MediaExtractor,这很好,但我只有将其直接渲染到的示例surfaceView。有什么办法可以让我转换outputBuffer位图?

我需要它才能在 16 及以上的 api 级别上工作。


您可以在以下位置找到一系列有用的示例bigflake http://bigflake.com/mediacodec/ site.

特别是,ExtractMpegFramesTest演示如何将 .mp4 文件解码为Bitmap,以及DecodeEditEncodeTest解码并重新编码 H.264 流,使用 GLES 着色器修改帧。

许多示例使用 API 18 中引入的功能,例如Surface输入到MediaCodec(这避免了许多颜色格式问题),以及MediaMuxer(它允许您转换来自的原始 H.264 基本流MediaCodec到 .mp4 文件中)。某些设备允许您将视频提取为 YUV 数据ByteBuffer、修改它并重新编码,但其他设备提取为专有的 YUV 颜色格式,可能会被 API 16 版本拒绝MediaCodec.

我建议针对 API 18(Android 4.3“Jellybean”MR2)或更高版本进行编码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用MediaCodec和MediaExtractor对视频进行解码和编码 的相关文章

随机推荐

  • Python 字典中数组的交集

    我有数组字典 如下所示 y dict 1 np array 5 124 169 111 122 184 2 np array 1 2 3 4 5 6 111 184 3 np array 169 5 111 152 4 np array 0
  • TabControl的SelectionChanged事件问题

    我正在 WPF 上工作 我正在创建一个 userControl 其中包含一个 TabControl 其中有一些 TabItem 当所选选项卡更改时 我需要执行一些操作 因此 我尝试做的是使用该事件myTabControl Selection
  • 如何在 PHP 中查找并打印两个数字之间的所有数字?

    现在我要求用户提供两个号码 我正在尝试打印 one 和 two 之间的数字 假设 one 小于 two range http php net manual en function range php给出一个包含所有数字的数组 您可以迭代它
  • 字符串到整数

    假设你有字符串 Hi 你如何得到一个值8 9 H 是字母表中的第 8 个字母 并且 i 是第 9 个字母 然后说 添加1到这些整数并使其9 10然后可以将其重新放入字符串中 Ij 是否可以 Note卡里 斯沃夫兰 Cary Swovelan
  • 创建独特的页面标题 slugs php

    我有一个为页面标题创建独特的标题的功能 它检查该 slug 在页面表中是否可用 然后通过相应地添加 int 来创建唯一的 slug 该函数对于前三个条目运行良好 例如 输入三次 test slug 将创建 test slug 1 test
  • R:如何组合三个数据帧的A列和B列相同的行,并添加相应的C列[重复]

    这个问题在这里已经有答案了 我有一些数据框 如果它们的前两列相同 我想合并它们 并添加相应的第三列 例如 我有三个数据框 如下所示 gt dump1 a b c q 12 2 w 23 3 e 34 4 gt dump2 a b c q 1
  • 将 ldapjs 与 Bluebird Promise 结合使用

    我在这里发布了类似的内容 使用带有 Promise 的 ldapjs https stackoverflow com questions 30682597 use ldapjs with promise 不幸的是 它仍然没有解决 这次我尝试
  • 查找临时表的列名[重复]

    这个问题在这里已经有答案了 我需要找到列名 of 临时表 如果它是物理表那么我们可以使用sys columns or Information schema columns系统视图来查找列名称 同样 有没有办法找到临时表中存在的列名 SELE
  • 寻找一种简单、简约的方式在云端存储小数据包

    我正在寻找一个非常简单且免费的小数据包云存储 基本上 我想编写一个 Greasemonkey 脚本 用户可以在具有共享数据集的多台计算机上运行该脚本 数据主要只是一个数字 每个用户八个字节就足够了 这一切都归结为以下要求 易于开发 这是一个
  • MATLAB 支持嵌套变量作用域吗?

    MATLAB 可以定义像以下类伪 C 代码那样的变量吗 int a 0 int b c int a 42 b a c a 我们可以使用嵌套函数来 模拟 这一点 我们可以不使用函数来做到这一点吗 我问这个问题是因为我想将一些 C 代码转换为
  • 如何在 MPAndroidChart 中从右向左绘制数据?

    我最近更新了MPAndroid图表 https github com PhilJay MPAndroidChart从1 7 4到2 0 9的库 我忘记了我做了什么自定义折线图以使数据从右到左显示 有人知道吗 我想知道是否有一种方法可以调用来
  • 访客模式示例

    public class Song public string Genre get protected set public string Name get protected set public string Band get prot
  • GUI 被 uibackgroundmodes= voip, audio 困住

    我有基于选项卡栏的应用程序 当我放入 plist UIBackgroundModes 时 我的应用程序应该支持 voip GUI 不会加载 它在启动屏幕上很糟糕 并且不会加载第一个选项卡视图 当我从 info plist 中删除 UIBac
  • UIImage 减少字节大小

    我正在使用以下代码来调整图像大小 一切正常且符合预期 以正确的方式调整 UIImage 的大小 http vocaro com trevor blog 2009 10 12 resize a uiimage the right way 我使
  • 具有 ArrayList 成员变量的不可变对象 - 为什么可以更改该变量?

    我有一个包含各种成员变量的类 有一个构造函数 有 getter 方法 但没有 setter 方法 事实上 这个对象应该是不可变的 public class Example private ArrayList
  • 如何让matplotlib显示所有x坐标?

    例如在下面的代码中 import numpy as np import matplotlib pyplot as plt N 10 x 1 2 3 4 5 6 7 8 9 10 y np random rand N plt scatter
  • Android动态资源加载

    我正在尝试找到一种方法来打开名称仅在运行时确定的资源 更具体地说 我想要一个引用应用程序 apk 中的一堆其他 XML 文件的 XML 为了便于解释 我们假设主要的 XML 是main xml其他 XML 是file1 xml file2
  • 如何在 CSSResource 中使用非标准 CSS 选择器

    我正在尝试在 webkit 中使用滚动条的样式 CSS 选择器如下所示 webkit scrollbar corner webkit scrollbar track piece disabled 等等 当我在 ClientBundle 中使
  • 如何在 Ubuntu 上将 R 版本 3.2.2 降级到版本 3.1.1

    我使用 apt get 安装了它 现在显示 3 2 2 这是一个有问题的版本 如何降级到 3 1 1 Update install packages c batch bitops boot caTools data table doMC d
  • 使用MediaCodec和MediaExtractor对视频进行解码和编码

    我需要将视频解码为一系列位图 以便我能够修改它们 然后将它们压缩回 android 中的视频文件 我计划通过使用来管理这个getFrameAtTime并将其保存到图像序列中 然后我可以修改序列中的图像并将其编码回电影 但我对此有两个问题 首