Android實現錄音、播音、錄製視頻功能

智能手機操做系統IOS與Android平分天下(PS:WP與其餘的直接無視了),而Android的免費招來了一大堆廠商分分向Android示好,故Android可能會有「較好」的前景。android

Android實現簡單的錄音、播音與視頻錄製功能。固然了、不管是出場綁定的仍是第三方都有不少很好的應用。可是對於一名開發人員來講及時作的UI再醜、功能再爛那也是一種成就!

實現錄音、錄製視頻功能須要調用【MediaRecorder】類,播放音頻則須要【MediaPlayer】類。那簡單以實現錄音、錄製視頻、播放音頻爲例寫一個本身的SoundRecordingHelper類。

思路:Android已經封裝好了這兩個類只須要進行簡單的設置就能夠實現這三個功能了
一、須要在工程文件中添加須要的權限
二、設置佈局文件
三、調用本身封裝的SoundRecordingHelper類。下面主要講SoundRecordingHelper類,實現功能直接調用此類中的Start與Stop方法便可。

package com.clown.tools;

import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/*
 * Android錄音輔助類 
 * 須要添加的權限:
 * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
 * <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
 * <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
 * 視頻錄製添加的權限:
 * <uses-permission android:name="android.permission.CAMERA" />  
 * <uses-permission android:name="android.permission.RECORD_AUDIO" />  
 * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
 * 文件格式:Environment.getExternalStorageDirectory().getAbsolutePath() + "/TonFun.amr"
 */
public class SoundRecordingHelper implements SurfaceHolder.Callback {

// 文件路徑 private String strFilePath = ""; // 數據上下文 private Context context = null; // 媒體播放對象 private MediaPlayer mPlayer = null; // 媒體錄音對象 private MediaRecorder mRecorder = null; // 用來顯示視頻的一個接口,我靠不用還不行,也就是說用mediarecorder錄製視頻還得給個界面看 // 想偷偷錄視頻的同窗能夠考慮別的辦法。。嗯須要實現這個接口的Callback接口 private SurfaceHolder surfaceHolder;ide

public String getStrFilePath() { return strFilePath; }函數

public void setStrFilePath(String strFilePath) { this.strFilePath = strFilePath; }佈局

/*this

  • 音頻錄製的構造函數 */ public SoundRecordingHelper(Context context, String strFilePath) { this.context = context; this.strFilePath = strFilePath; }

/*編碼

  • 視頻錄製的構造函數 */ @SuppressWarnings("deprecation") public SoundRecordingHelper(Context context, SurfaceView surfaceview, String strFilePath) { this.context = context; this.surfaceHolder = surfaceview.getHolder(); this.surfaceHolder.addCallback(this); // 加入回調接口 this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); // 這個方法已通過時了,可是爲了兼容低版本必須設置 this.strFilePath = strFilePath; }

/*操作系統

  • 開始錄音 */ public boolean startSoundRecording() { boolean bResult = false; mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 設置音頻來源(MIC表示麥克風) mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // 設置音頻輸出格式 mRecorder.setOutputFile(strFilePath); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); // 設置音頻編碼 try { mRecorder.prepare(); mRecorder.start(); bResult = true; } catch (Exception ex) { System.out.println("Error:錄音失敗、" + ex.getMessage()); bResult = false; } return bResult; }

/*.net

  • 中止錄音 */ public boolean stopSoundRecording() { boolean bResult = false; if (mRecorder != null) { mRecorder.stop(); mRecorder.release(); mRecorder = null; bResult = true; } else { bResult = false; } return bResult; }

/*code

  • 開始播放音頻 */ public boolean startPlay() { boolean bResult = false; mPlayer = new MediaPlayer(); try { mPlayer.setDataSource(strFilePath); mPlayer.prepare(); mPlayer.start(); bResult = true; } catch (Exception ex) { System.out.println("Error:播放失敗、" + ex.getMessage()); bResult = false; } return bResult; }

/*orm

  • 中止播放音頻 */ public boolean stopPlay() { boolean bResult = false; if (mPlayer != null) { mPlayer.stop(); mPlayer.release(); mPlayer = null; bResult = true; } else { bResult = false; } return bResult; }

/*

  • 調用攝像頭進行視頻錄製 nWidth:視頻的寬
  • nHeight:視頻的高nRate:視頻幀數nType:視頻格式(MediaRecorder.OutputFormat.THREE_GPP) */ public boolean startVideoRecording(int nWidth, int nHeight, int nRate, int nType) { boolean bResult = false; mRecorder = new MediaRecorder(); mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 設置視頻源爲攝像頭 mRecorder.setOutputFormat(nType);// 設置錄製完成後視頻的封裝格式THREE_GPP爲3gp.MPEG_4爲mp4 mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); // 設置錄製的視頻編碼h263 // h264 mRecorder.setVideoSize(nWidth, nHeight);// 設置視頻錄製的分辨率。必須放在設置編碼和格式的後面,不然報錯 mRecorder.setVideoFrameRate(nRate);// 設置錄製的視頻幀率。必須放在設置編碼和格式的後面,不然報錯 mRecorder.setPreviewDisplay(surfaceHolder.getSurface()); // 設置顯示預覽 mRecorder.setOutputFile(strFilePath); // 設置輸出路徑 try { mRecorder.prepare(); mRecorder.start(); bResult = true; } catch (Exception ex) { System.out.print("Error:視頻錄製錯誤、" + ex.getMessage()); bResult = false; } return bResult; }

/*

  • 中止視頻錄製 */ public boolean stopVideoRecording() { boolean bResult = false; if (mRecorder != null) { mRecorder.stop(); mRecorder.release(); mRecorder = null; bResult = true; } else { bResult = false; } return bResult; }

/*

  • SurfaceHolder.Callback接口實現方法 */ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub System.out.println(holder.toString()); }

@Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub System.out.println(holder.toString()); }

@Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub if (context != null) { context = null; } if (mPlayer != null) { mPlayer = null; } if (mRecorder != null) { mRecorder = null; } } }

注:實現視頻錄製時須要在UI佈局中添加 Surfaceview控件,用以實時預覽視頻。如分辨率太低是會致使視頻花屏!

相關文章
相關標籤/搜索