一、介紹
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();
}
如果沒有錄音許可權,則需要申請錄音許可權。
原創文章,作者:FCKT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135345.html
微信掃一掃
支付寶掃一掃