使用MediaCodec和MediaExtractor解码和编码视频

G.T*_*.T. 5 video android bitmap mediacodec mediaextractor

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

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

  • 首先,在我阅读时,getFrameAtTime它用于创建缩略图,并且不保证返回正确的帧.这使视频滞后.
  • 其次,保存图像并将其读回需要很长时间.

我读到使用MediaExtractor进行解码的正确方法,这很好,但我只有示例直接将它呈现给a surfaceView.有什么方法可以将我转换outputBuffer为位图吗?

我需要它来使用16级及以上的api级别.

fad*_*den 8

您可以在bigflake网站上找到一些有用的示例.

特别是,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)或更高版本.