【发布时间】:2013-11-17 02:07:27
【问题描述】:
Android 相机有一个 onPreviewFrame 回调,它会返回一个帧作为 byte[] 数据。
我已将相机设置为以 1280 x 720 返回数据(NV21 格式)byte[] 数据。
我想做的事:
我想将一些帧保持在 1280 x 720 分辨率(转 jpeg)。
并以较低的分辨率(例如 720 x 480)生成 mp4 基本流。
问题
如果 MediaFormat.Key_Width 和 MediaFormat.Key_Height 不等于 onPreviewFrame 的宽度和高度,MediaCodec 会出错。
我想知道是否可以将我的 byte[] 数据(NV21)从 1280 x 720 缩放到更低的分辨率,例如 720 x 480 分辨率,然后将其提供给编码器?
如果可能,将 NV21 的 1280 x 720 分辨率的 byte[] 数据转换为较低分辨率的步骤是什么。
感谢您的阅读,如果有任何建议或帮助,我们将不胜感激。
【问题讨论】:
-
如果您使用 Surface 预览输出,您可以以您想要的任何分辨率进行渲染——GPU 会完成所有工作。您无法在此模式下直接获取像素,因此要保存帧,您需要将其第二次渲染到全尺寸 pbuffer 并从中读取。有关示例,请参见 bigflake.com/mediacodec/#CameraToMpegTest。
-
...和bigflake.com/mediacodec/#ExtractMpegFramesTest 以任意分辨率将帧保存为 PNG 的示例。
-
...和 github.com/google/grafika,这是一款 Android 应用程序,其中包含一个在屏幕上显示相机预览并同时进行录制的示例。
标签: android android-camera android-mediacodec