![](/img/trans.png)
[英]Android MediaCodec & MediaExtractor For video and audio playing
[英]Use MediaCodec and MediaExtractor to decode and code video
我需要将视频解码为一系列位图,以便我能够修改它们,然后将它们压缩回android中的视频文件。
我计划通过使用getFrameAtTime
并将其保存到图像序列来管理它。 然后我可以修改序列中的图像并将其编码回电影。 但我有两个问题:
getFrameAtTime
用于创建缩略图,并且不保证返回正确的帧。 这使视频滞后。 我读到使用MediaExtractor进行解码的正确方法,这很好,但我只有示例将它直接渲染到surfaceView
。 有什么方法可以将outputBuffer
转换为位图吗?
我需要它来使用16级及以上的api级别。
您可以在bigflake网站上找到一些有用的示例。
特别是, ExtractMpegFramesTest
演示了如何将.mp4文件解码为Bitmap
, DecodeEditEncodeTest
对H.264流进行解码和重新编码,使用GLES着色器修改帧。
许多示例使用API 18中引入的功能,例如MediaCodec
Surface
输入(避免了许多颜色格式问题)和MediaMuxer
(允许您将来自MediaCodec
的原始H.264基本流转换为.mp4文件)。 某些设备允许您将视频提取到ByteBuffer
YUV数据,对其进行修改并对其进行重新编码,但其他设备会提取为专有的YUV颜色格式,这些格式可能会被API 16版本的MediaCodec
拒绝。
我建议编写API 18(Android 4.3“Jellybean”MR2)或更高版本。
有很多人说从不调用onFrameAvailable()
方法。 好吧, 监听器应该在与主线程不同的线程中。 要设置监听器,请执行以下操作:(这是实现SurfaceTexture.IOnFrameAvailableListener
的类监听SurfaceTexture.IOnFrameAvailableListener
):
mSurfaceTexture.SetOnFrameAvailableListener(this);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.