您的位置:

利用Android MediaRecorder实现音视频录制功能

一、介绍

Android系统提供了多种方式实现音视频录制,其中比较常用的一种是使用MediaRecorder类。

MediaRecorder类提供了对音视频的配置以及录制功能的实现,可以通过设置各种参数来满足不同的需求。

二、实现步骤

1、准备工作

在AndroidManifest.xml文件中添加录音和摄像头权限。

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

2、初始化MediaRecorder对象

在需要录制音视频的Activity中创建MediaRecorder对象,并设置相关参数。

private MediaRecorder mMediaRecorder;
private void initRecorder() {
    mMediaRecorder = new MediaRecorder();
    //设置音频来源
    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    //设置视频来源
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    //设置输出格式
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    //设置音频编码格式
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    //设置视频编码格式
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    //设置输出文件路径
    mMediaRecorder.setOutputFile(getVideoFilePath());
}

3、开始录制

在需要开始录制的地方调用MediaRecorder对象的start()方法。

private void startRecording() {
    try {
        mMediaRecorder.prepare();
        mMediaRecorder.start();
        //显示录制图标
        mRecordButton.setImageResource(R.drawable.ic_recording);
        mIsRecording = true;
    } catch (IOException e) {
        e.printStackTrace();
    }
}

4、停止录制

在需要停止录制的地方调用MediaRecorder对象的stop()方法,并释放资源,同时更新UI。

private void stopRecording() {
    mMediaRecorder.stop();
    mMediaRecorder.release();
    mMediaRecorder = null;
    //显示录制按钮
    mRecordButton.setImageResource(R.drawable.ic_record);
    mIsRecording = false;
}

三、实例代码

public class MainActivity extends AppCompatActivity {
     
    private MediaRecorder mMediaRecorder;
    private boolean mIsRecording = false;
    private Button mRecordButton;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        mRecordButton = findViewById(R.id.record_button);
        mRecordButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mIsRecording) {
                    stopRecording();
                } else {
                    startRecording();
                }
            }
        });
    }
     
    private void initRecorder() {
        mMediaRecorder = new MediaRecorder();
        //设置音频来源
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        //设置视频来源
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        //设置输出格式
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        //设置音频编码格式
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        //设置视频编码格式
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        //设置输出文件路径
        mMediaRecorder.setOutputFile(getVideoFilePath());
    }
     
    private void startRecording() {
        try {
            mMediaRecorder.prepare();
            mMediaRecorder.start();
            //显示录制图标
            mRecordButton.setImageResource(R.drawable.ic_recording);
            mIsRecording = true;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
     
    private void stopRecording() {
        mMediaRecorder.stop();
        mMediaRecorder.release();
        mMediaRecorder = null;
        //显示录制按钮
        mRecordButton.setImageResource(R.drawable.ic_record);
        mIsRecording = false;
    }
     
    private String getVideoFilePath() {
        File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
        String fileName = "Record_" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".mp4";
        return file.getAbsolutePath() + "/" + fileName;
    }
}

四、小结

通过MediaRecorder类的使用,我们可以快速实现Android音视频录制功能,并且可以根据需要对录制参数进行自定义设置。

需要注意的是,在Android 7.0及以上版本中,需要特殊处理录音权限。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_RECORD_AUDIO_PERMISSION);
    } else {
        initRecorder();
    }
} else {
    initRecorder();
}

如果没有录音权限,则需要申请录音权限。

利用Android MediaRecorder实现音视频录制

2023-05-14
实现Android音视频录制功能的技术方案研究

2023-05-14
Android应用实现多媒体功能的技巧

2023-05-14
Android MediaRecorder: 详解多方位的使

2023-05-21
使用Python编写Android录音线程

2023-05-14
使用Python实现Android音频播放功能

一、Android音频播放功能简介 在Android上播放音频是很常见的需求,可以用于音乐播放器、游戏声音效果、语音播报等场景。Android平台本身提供了MediaPlayer来进行音频播放,但是M

2023-12-08
使用Android ExoPlayer实现高质量视频播放体验

一、介绍 随着移动端技术的不断发展,视频成为了用户越来越重要的需求之一。而在Android平台上,ExoPlayer是Google推出的一款强大的多媒体播放器,能够实现高质量、流畅的视频播放体验,并且

2023-12-08
php语音连续播放,php语音连续播放不了

2022-12-02
Android麦克风权限:如何在应用程序中请求并使用麦克风?

2023-05-14
php语音聊天系统,php语音聊天系统怎么用

2022-11-20
golang音频,golang音频转码

2022-11-27
Android Media:提升用户体验的音视频处理方案

在移动互联网时代,作为一项不可或缺的娱乐内容,音视频应用已经成为人们日常生活中不可少的一部分,因此,在Android平台上提供出色的音视频播放器和处理方案对于用户来说非常重要。在本文中,我们将介绍如何

2023-12-08
Android Media:提升用户体验的音视频处理方案

在移动互联网时代,作为一项不可或缺的娱乐内容,音视频应用已经成为人们日常生活中不可少的一部分,因此,在Android平台上提供出色的音视频播放器和处理方案对于用户来说非常重要。在本文中,我们将介绍如何

2023-12-08
提升用户体验,实现Android音频播放功能

2023-05-14
Android音频焦点详解

2023-05-18
深入解析Android 5.0

2023-05-21
Android音视频播放神器:VLC

2023-05-14
用Python为Android应用实现实时视频直播功能

2023-05-14
Android VLC:高效的视频播放器

2023-05-14
php即时聊天实现,PHP聊天系统

2022-11-28