Android音频,视频录制,涉及到AudioRecorder,MediaRecorder,其中,AudioRecorder只能录制声音,MediaRecorder可以录制声音和视频。还有许多音视频编码格式,文件格式等,详见https://developer.android.com/guide/topics/media/media-formats.html。整理的音视频录制,及播放,Android 7.0 亲测代码,可运行(其中SurfaceView需要具体指定)。转载请载明出处,https://blog.csdn.net/sdbzmyh0/article/details/79947850
邮箱:sdbzmyh@163.com,qq:279931514,微信:sdbzmyh
import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Handler; import android.os.Message; import android.view.SurfaceHolder; import android.view.SurfaceView; import java.io.File; import java.io.IOException; /** * Created by Administrator on 2018-04-11. */ public class MediaUtil{ MediaRecorder mediarecorder; SurfaceView surfaceView=null;//需要在Activity中指定 SurfaceHolder surfaceHolder=null; MediaPlayer mediaPlayer; File mAudioFile; String mFilePath; long startTime; private void recordAudioAAC() { //创建MediaRecorder对象 mediarecorder = new MediaRecorder(); //创建录音文件,.m4a为MPEG-4音频标准的文件的扩展名 mAudioFile = new File(mFilePath + System.currentTimeMillis() + ".m4a"); //创建父文件夹 mAudioFile.getParentFile().mkdirs(); try { //创建文件 mAudioFile.createNewFile(); //配置mMediaRecorder相应参数 //从麦克风采集声音数据 mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置保存文件格式为MP4 mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //设置采样频率,44100是所有安卓设备都支持的频率,频率越高,音质越好,当然文件越大 mediarecorder.setAudioSamplingRate(44100); //设置声音数据编码格式,音频通用格式是AAC mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); //设置编码频率 mediarecorder.setAudioEncodingBitRate(96000); //设置录音保存的文件 mediarecorder.setOutputFile(mAudioFile.getAbsolutePath()); //开始录音 mediarecorder.prepare(); mediarecorder.start(); //记录开始录音时间 startTime = System.currentTimeMillis(); } catch (Exception e) { e.printStackTrace(); mediarecorder.stop(); if (null != mediarecorder) { mediarecorder.release(); mediarecorder = null; } } } private void Media3gp(){ mediarecorder = new MediaRecorder(); /*Camera camera = Camera.open(); Camera.Parameters parameters = camera.getParameters(); // parameters.setRotation(90); parameters.setPreviewSize(640, 480); parameters.setPictureSize(640, 480); camera.setParameters(parameters); camera.setDisplayOrientation(90); camera.unlock(); mediarecorder.setCamera(camera); mediarecorder.reset();*/ /*mediarecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() { @Override public void onInfo(MediaRecorder mr, int what, int extra) { } }); mediarecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() { @Override public void onError(MediaRecorder mr, int what, int extra) { } });*/ /*mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);*/ mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); mediarecorder.setVideoSize(640,480); //mediarecorder.setVideoFrameRate(20); /*CamcorderProfile cProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); mediarecorder.setProfile(cProfile);*/ //mediarecorder.setVideoEncodingBitRate(9995*1024*1024);// 设置帧频率,然后就清晰了 mediarecorder.setVideoEncodingBitRate(5*1920*1080);// 设置帧频率,然后就清晰了 //mediarecorder.setOrientationHint(90);// 输出旋转90度,保持竖屏录制 mediarecorder.setPreviewDisplay(surfaceHolder.getSurface()); mediarecorder.se