【问题标题】:Recording a Surface using MediaCodec使用 MediaCodec 记录表面
【发布时间】:2014-02-26 20:24:49
【问题描述】:

因此,在我的应用程序中,我可以使用 GPUImage 库为来自相机的视频显示效果(如模糊滤镜、高斯)。

基本上,我(库)将从相机获取输入,获取原始字节数据,将其从 YUV 格式转换为 RGBA 格式,然后将效果应用于此图像并显示在 GLSurfaceViewSurface 上OpenGL。最后,对于用户来说,它就像一个应用了效果的视频。

现在我想使用MediaCodec API 将Surface 的帧录制为视频。

但是这个discussion 表示我们不能将预定义的Surface 传递给MediaCodec

我在bigflake 看到了一些示例,他正在使用MediaCodec.createInputSurface() 创建Surface,但对我来说,Surface 来自GLSurfaceView

那么,如何将Surface 的帧录制为视频?

我将并行录制音频,使用 FFMPEG 合并视频和音频,并作为应用了效果的视频呈现给用户。

【问题讨论】:

    标签: android opengl-es ffmpeg glsurfaceview android-mediacodec


    【解决方案1】:

    您可以在Grafika 中查看完整示例。

    特别是,“显示 + 捕获相机”活动将相机输出记录为 .mp4。它还demonstrates 在 GL 着色器中应用了一些简单的图像处理技术。它使用GLSurfaceView 和一个复杂的舞蹈来保持录音跨越方向变化。

    同样可能令人感兴趣的是,“使用 FBO 记录 GL 应用程序”活动记录了 OpenGL ES 渲染的几种不同方式。它使用普通的SurfaceView,而且更直接。

    【讨论】:

    • 是否可以使用 MediaCodec 在后台(服务)录制视频,我现在使用 FFmpegFrameRecorder 进行录制,它工作正常,我开始我的活动,然后我将相机 onPreviewFrame 回调从活动重置为服务方法我在服务中获取字节以便能够用 FFmpeg 记录它。但是 MediaCodec 所有那些 GL 视图的东西呢?
    猜你喜欢
    • 2021-04-26
    • 1970-01-01
    • 2016-10-12
    • 2016-08-24
    • 1970-01-01
    • 2017-02-19
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多