android中使用mediarecorder进行录像详解(视频录制)

Android中使用MediaRecorder进行录像详解(视频录制)

在Android开发中,我们常常需要使用到视频录制功能。Android系统提供了许多方式来实现这个功能,其中最常用的是使用MediaRecorder类进行录像。

相关准备工作

在使用MediaRecorder录像前,需要我们先进行一些准备工作:

添加权限

在AndroidManifest.xml文件中添加以下权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

创建录像需要使用的SurfaceView

<SurfaceView
    android:id="@+id/surface_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

初始化MediaRecorder对象

MediaRecorder mediaRecorder = new MediaRecorder();

开始录像

首先,我们需要在SurfaceView上创建一个预览画面:

SurfaceView surfaceView = findViewById(R.id.surface_view);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            camera.setPreviewDisplay(holder);
            camera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }
});

接下来,我们就可以开始录像了:

mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置音频源为麦克风
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);// 设置视频源为摄像头
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);// 设置输出格式为MP4
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);// 设置音频编码格式为AAC
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);// 设置视频编码格式为H264
mediaRecorder.setVideoSize(640, 480);// 设置视频分辨率
mediaRecorder.setVideoEncodingBitRate(3 * 1024 * 1024);// 设置视频编码码率
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mediaRecorder.setOutputFile(outputFile.getAbsolutePath());
mediaRecorder.prepare();
mediaRecorder.start();

上述代码中,我们设置了录像的各种参数,然后调用prepare方法准备录制,接着调用start方法开始录制。

停止录像

我们可以在代码中设置一个时间段,到达后停止录像:

handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        mediaRecorder.stop(); // 停止录制
        mediaRecorder.release(); // 释放资源
        camera.release(); // 释放摄像头资源
    }
}, 10 * 1000);

总结

使用MediaRecorder进行录像非常方便,只需要设置好参数就可以录制出高质量的视频。但是在使用MediaRecorder时也需要注意一些问题,例如:调用stop方法后要记得调用release方法释放资源,否则会出现资源占用的情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android中使用mediarecorder进行录像详解(视频录制) - Python技术站

(0)
上一篇 2023年3月29日
下一篇 2023年3月29日

相关文章

  • C语言编程深入理解取整取余取模问题示例分析

    C语言编程深入理解取整取余取模问题示例分析 什么是取整、取余、取模? 在C语言中,/ 可以用来进行整除(取整)操作,% 可以用来进行取余或取模操作。 当两个整数相除时,如果能够整除,则结果即为商;否则,结果则包括商和余数,其中商为取整结果,而余数则为取余或取模的结果。 取整:将一个浮点数四舍五入或向下取整成整数,例如: int a = 5.6 / 2; //…

    other 2023年6月26日
    00
  • 纯css多种方法实现div中单行文字、多行文字及嵌套div垂直水平居中

    纯CSS多种方法实现div中单行文字、多行文字及嵌套div垂直水平居中攻略 在本攻略中,我将介绍多种纯CSS的方法来实现以下布局需求: 单行文字在div中水平居中。 多行文字在div中水平垂直居中。 嵌套div在父div中水平垂直居中。 单行文字在div中水平居中 要实现单行文字在div中水平居中,可以使用以下CSS样式: div { display: fl…

    other 2023年7月28日
    00
  • yarn使用简介

    Yarn使用简介 什么是Yarn? Yarn 是一个强大的包管理工具,它可以替代你的默认包管理工具 npm,可以更高效和更可靠地安装和管理 JavaScript 依赖项。Yarn 由 Facebook、Google、Exponent 和 Tilde 等公司的工程师共同开发和维护,得到了广泛的支持和认可。 Yarn的安装 安装 Yarn 非常简单,官网提供了多…

    其他 2023年3月28日
    00
  • Bootstrap3.0学习笔记之栅格系统案例

    Bootstrap 3.0 学习笔记之栅格系统案例攻略 Bootstrap 是一个流行的前端开发框架,它提供了一套强大的栅格系统,用于创建响应式的网页布局。本攻略将详细介绍如何学习和使用 Bootstrap 3.0 的栅格系统,并提供两个示例说明。 1. 学习 Bootstrap 3.0 栅格系统 1.1 栅格系统概述 栅格系统是 Bootstrap 的核心…

    other 2023年7月28日
    00
  • WIN7版本查看详细图解

    WIN7版本查看详细图解攻略 1. 打开文件资源管理器 首先,我们需要打开文件资源管理器来查看详细图解。可以通过以下步骤打开文件资源管理器: 单击任务栏上的“开始”按钮。 在开始菜单中,选择“计算机”或直接点击“计算机”图标。 2. 导航到文件夹 在文件资源管理器中,导航到包含详细图解的文件夹。可以通过以下步骤导航到文件夹: 在左侧的导航窗格中,选择包含详细…

    other 2023年8月3日
    00
  • 荣耀50pro开发者选项如何开启?荣耀50pro打开开发者选项的方法

    荣耀50pro的开发者选项可以通过以下简单步骤来进行开启: 1. 打开“设置”应用 在荣耀50pro的主屏幕上,点击图标为“设置”的应用,打开设备的系统设置。 2. 进入设备信息页面 在“设置”应用主页中,向下滚动直至找到“关于手机”选项,点击进入。 3. 点击版本号 在“关于手机”页面中找到“版本号”选项,并持续点击此选项,直至屏幕上显示“您已成为开发者”…

    other 2023年6月26日
    00
  • Androd 勇闯高阶性能优化之布局优化篇

    Android 勇闯高阶性能优化之布局优化篇攻略 1. 优化布局层次结构 在 Android 应用中,布局层次结构的复杂度会直接影响应用的性能。通过优化布局层次结构,可以提高应用的渲染速度和响应性能。 示例说明 1: 使用 <merge> 标签 当布局文件中的根布局只包含一个子视图时,可以使用 <merge> 标签来减少布局层次结构的…

    other 2023年8月21日
    00
  • jquery 触发/失去焦点事件例子详解

    jQuery触发/失去焦点事件例子详解 在Web开发中,我们经常需要使用JavaScript来控制页面元素的交互,其中事件是最关键的一环。通过事件可以实现用户与页面的交互反馈,从而提高用户体验。本文将详细介绍jQuery中触发/失去焦点事件的例子,并且给出详细的代码实现。 什么是触发/失去焦点事件? 当一个元素被选中时,称之为”获得焦点”。相反,当元素从选中…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部