public string StartRecordingAudio() { string fullfilename = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/" + Android.OS.Environment.DirectoryDownloads; fullfilename += "/" + String.Format("myAudio_{0}.mp4", Guid.NewGuid()); try { _recorder = new Android.Media.MediaRecorder(); _recorder.SetAudioSource(Android.Media.AudioSource.Mic); _recorder.SetOutputFormat(Android.Media.OutputFormat.Mpeg4); _recorder.SetAudioEncoder(Android.Media.AudioEncoder.AmrNb); _recorder.SetOutputFile(fullfilename); _recorder.Prepare(); _recorder.Start(); timer.Start(); saveAudio = false; _recordingFile = fullfilename; return(fullfilename); } catch (Exception) { return(""); } }
public PlatformSystem(Activity activity) { m_Activity = activity; this.m_ConnectivityManager = (ConnectivityManager)Application.Context.GetSystemService(Context.ConnectivityService); //record audios timer.Interval = 1000; timer.Elapsed += Timer_Elapsed; _recorder = new Android.Media.MediaRecorder(); _player = new Android.Media.MediaPlayer(); _player.Completion += (sender, e) => { _player.Reset(); }; }
private void initRecorder(int width, int height) { mMediaRecorder = new Android.Media.MediaRecorder(); // 遇到的坑 -- 用户权限没有赋予 Mic 会报错 "setAudioSource failed.", 故此处进行判断是否含有麦克风权限 if (Xamarin.Essentials.DeviceInfo.Version.Major >= 6) { Android.Content.PM.Permission permission = mAppActivity.CheckSelfPermission(Android.Manifest.Permission.RecordAudio); if (permission == Android.Content.PM.Permission.Granted) { // mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder.SetAudioSource(Android.Media.AudioSource.Mic); } } // mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mMediaRecorder.SetVideoSource(Android.Media.VideoSource.Surface); // mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mMediaRecorder.SetOutputFormat(Android.Media.OutputFormat.ThreeGpp); // mediaRecorder.setOutputFile(getsaveDirectory() + System.currentTimeMillis() + ".mp4"); // 遇到的坑 -- 目录没有创建会报出 Java.IO.FileNotFoundException, 要先判断 Dir 是否存在, 不存在则进行创建 var mp4FileInfo = MyAndroidScreenRecord.GetScreenVideoFileInfo(mImageFileDateTime, mDirName); if (mp4FileInfo.Directory.Exists == false) { mp4FileInfo.Directory.Create(); } mMediaRecorder.SetOutputFile(mp4FileInfo.FullName); // mediaRecorder.setVideoSize(width, height); mMediaRecorder.SetVideoSize(width, height); // mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mMediaRecorder.SetVideoEncoder(Android.Media.VideoEncoder.H264); // 遇到的坑 -- 用户权限没有赋予 Mic 会报错 "setAudioSource failed.", 故此处进行判断是否含有麦克风权限 if (Xamarin.Essentials.DeviceInfo.Version.Major >= 6) { Android.Content.PM.Permission permission = mAppActivity.CheckSelfPermission(Android.Manifest.Permission.RecordAudio); if (permission == Android.Content.PM.Permission.Granted) { // mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mMediaRecorder.SetAudioEncoder(Android.Media.AudioEncoder.AmrNb); } } // mediaRecorder.setVideoEncodingBitRate(5 * 1024 * 1024); mMediaRecorder.SetVideoEncodingBitRate(5 * 1024 * 1024); // mediaRecorder.setVideoFrameRate(30); mMediaRecorder.SetVideoFrameRate(mDpi); try { mMediaRecorder.Prepare(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("MyAndroidScreenRecord - initRecorder 捕获到错误"); System.Diagnostics.Debug.WriteLine(ex.GetFullInfo()); System.Diagnostics.Debugger.Break(); throw ex; } }