Articles of android mediarecorder

MediaRecorder在启动时崩溃

我search了很多主题,但没有直接的答案。 我有这个代码: recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setOutputFile(mFileName); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); if(!mStartRecording) { btn.setText("Stop Recording"); try { recorder.prepare(); } catch (IOException e) { e.printStackTrace(); } recorder.start(); mStartRecording = true; } else { btn.setText("Start Recording"); mStartRecording = false; recorder.stop(); recorder.reset(); recorder.release(); recorder = null; } 我已经添加了: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> (看到joinSTORAGE的地方解决了它,对我来说没有好处) 我正在开发API级别7(Android […]

使用表面视图android录制video

我必须创build一个Android应用程序,我正在尝试使用曲面视图来loggingvideo和捕捉图像。 到目前为止,我能够捕捉video,但在录制video时遇到问题。 我的video录制代码是 – onCreate(){ .. surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); startRecording(); . . } protected void startRecording() throws IOException { if(mCamera==null) mCamera = Camera.open(); String filename; String path; path= Environment.getExternalStorageDirectory().getAbsolutePath().toString(); Date date=new Date(); filename="/rec"+date.toString().replace(" ", "_").replace(":", "_")+".mp4"; File file=new File(path,filename); mrec = new MediaRecorder(); mCamera.lock(); mCamera.unlock(); mrec.setCamera(mCamera); mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA); mrec.setAudioSource(MediaRecorder.AudioSource.MIC); mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mrec.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mrec.setPreviewDisplay(surfaceHolder.getSurface()); mrec.setOutputFile(path+filename); […]

我怎样才能在Android中暂停录音?

我的目标是暂停录制文件。 我在Android开发人员网站上看到它的Media Recorder没有暂停选项。 Java支持以编程方式合并两个audio文件,但在android中不起作用。 join两个来自Java的WAV文件? 而且我也使用默认的设备录音机应用程序在所有设备上都可用,但在三星几乎没有设备录音path。 Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); startActivityForResult(intent,REQUESTCODE_RECORDING); 任何一个帮助录音暂停function。

无法在iOS 5+中播放来自Android的录制audio文件

我正在开发也支持iOS的Android应用程序。 我想录制audio,并在Android设备以及iOS设备中播放。 我使用以下设置在Android中录制audio MediaRecorder audioRecorder = new MediaRecorder(); audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); audioRecorder.setAudioSamplingRate(44100); audioRecorder.setAudioChannels(1); audioRecorder.setAudioEncodingBitRate(12800); audioRecorder.setOutputFile(<recordedSoundFilePath>); audioRecorder.prepare(); audioRecorder.start(); 在iOS端,设置如下 //audioRecorder is object of AVAudioRecorder NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] initWithCapacity:10]; NSNumber *formatObject; formatObject = [NSNumber numberWithInt: kAudioFormatMPEG4AAC ]; [recordSettings setObject:formatObject forKey: AVFormatIDKey]; [recordSettings setObject:[NSNumber numberWithFloat:44100.0] forKey: AVSampleRateKey]; [recordSettings setObject:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey]; [recordSettings setObject:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey]; [recordSettings […]

当执行eglSwapBuffer和eglMakeCurrent时性能低下

我正在开发一个允许用户logging他/她的游戏玩法的Android Unity插件 我的解决scheme概述: 使用OpenGl FrameBufferObject(FBO)使Unity渲染离开这个FBO 获得这个FBO的离线纹理,然后用于2个目的: 渲染到video表面 重绘到设备屏幕 每帧执行stream程: 绑定我的FBO 渲染场景到FBO(统一码) 解开我的FBO 设置video表面 configuration表面大小(仅限第一次执行) 保存egl状态 使video表面电stream 使用FBO的离屏纹理绘制到video表面 恢复到默认的表面 将演示时间设置为video帧 从video表面交换缓冲区到默认窗口 恢复egl状态 使默认的表面电stream 通知编码器线程数据已准备好写入 我的问题是录制时的performance不好。 三星Galaxy S4的FPS从60降低到40。 我试图logging渲染操作的执行时间,并认识到最影响性能操作是使video表面当前操作和从video表面到默认窗口操作的交换缓冲区。 以下是他们的代码 public void makeCurrent() { if (!EGL14.eglMakeCurrent(this.mEGLDisplay, this.mEGLSurface, this.mEGLSurface, this.mEGLContext)) throw new RuntimeException("eglMakeCurrent failed"); } public boolean swapBuffers() { return EGL14.eglSwapBuffers(this.mEGLDisplay, this.mEGLSurface); } 执行当前操作的时间为1〜18 ms 交换缓冲区的执行时间为4〜14 ms 其他操作的执行时间通常为0〜1 […]

setOrientationHint在一些手机的前置摄像头(HTC)上逆时针旋转video

问题:某些Android设备(问题底部列出)在使用前置摄像头拍摄的video的setOrientationHint(int degrees)function时会出现意外的行为。 预期的行为是video顺时针旋转,但这些设备逆时针旋转video。 我的目标:在相机设置或硬件方向内识别variables,使我可以预知何时会发生这种情况。 具体来说, 我想避免在我的代码中特别套住这些手机! 更多解释:我使用标准的MediaRecorder对象录制video,在准备录制时,使用setOrientationHint()设置video的方向。 在setOrientationHint()的文档中,为degrees参数指定了以下内容: 度 – 以度数顺时针旋转的angular度。 支持的angular度是0,90,180和270。 该function旨在添加包含旋转angular度的合成matrix,以便video播放器可按预期显示video。 所以,我所做的是使用CameraInfo类获取相机硬件的方向, CameraInfo其用作setOrientationHint fn中的degrees参数。 (我已经尝试使用AOSP作为指导,对此代码进行修改,但是我得到了完全相同的结果。) 一个真实的例子:三星Galaxy S3前置摄像头(以及其他大多数其他摄像头)的硬件方向将为270,因此在录制时使用此方式,并且所得video显示正确。 HTC Vivid同样会为相同的相机返回270的硬件方向,但只有在setOrientationHint fn中使用90 degrees作为degrees参数时才能正确显示。 如果我像其他手机一样使用270的硬件定位,则video将会颠倒。 注意: setOrientationHint()函数包含一个警告: 请注意,某些video播放器可能会在播放期间忽略video中的构图matrix。 但是,这不是发生的事情,因为我可以很容易地解决这个问题,如果我假装它,把90而不是270。 我曾见过的手机具体展示了这个问题:运行Android 4.0.3的HTC Vivid(PH39100),运行Android 4.0.3的HTC EVO 4G(PG86100),运行Android 2.3.4的HTC Thunderbolt(ADR6400L)。 注意他们都是HTC手机。 也许有人在HTC错误顺时针逆时针。

如何将通过MediaRecorder录制的video长度读取到通过context.getFilesDir()构build的私有应用程序存储目录中?

我有一个奇怪的问题,通过使用MediaRecorder读取设备相机logging的video文件的长度/持续时间。 该文件被logging到应用程序的专用存储目录中,其设置如下所示: mMediaRecorder.setOutputFile(context.getFilesDir() + "/recordings/webcam.3gpp"); 录制完成后,我尝试用这些方法读取video的长度: 方法1: MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever(); mediaMetadataRetriever.setDataSource(context.getFilesDir() + "/recordings/webcam.3gpp"); String time = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); return Long.parseLong(time); 方法2: MediaPlayer mp = MediaPlayer.create(context, Uri.parse(context.getFilesDir() + "/recordings/webcam.3gpp")); long duration = mp.getDuration(); mp.release(); return duration; 没有任何方法的工作。 mediaMetadataRetriever.extractMetadata返回null, MediaPlayer.create将以IOExceptionexception失败。 我已经validation该文件存在。 重要说明:如果将录制内容保存到“/sdcard/recordings/webcam.3gpp”,则不会发生此问题。 出于某种原因,我只是不能读取文件在属于应用程序的私人文件目录中的持续时间。 此外,这个问题只发生在我的三星Droid充电,运行Android 2.3。 它不会发生在运行Android 4.2的三星Galaxy S4和运行Android 4.3的Asus Nexus 7。 编辑: 如果我把相同的文件复制到SD卡上,然后阅读它的长度,一切正常。 是什么赋予了? copy(new File(context.getFilesDir() […]

Android录制无video的video

Android可以在没有audiostream的情况下从相机录制video吗? 目标:减less输出文件的大小。

Android mediarecording错误启动失败-19 runTimeException

我的媒体logging遇到问题。 我正在尝试使用前置摄像头进行录制。 这给了我一个错误(但预览正在工作)。 每当我使用后视镜,一切正常,我觉得这很奇怪。 可能是什么问题,可能是什么解决scheme? 我的代码和错误如下所示。 编辑。 使用vga前置摄像头录制似乎不起作用。 这怎么可能? 虽然与HTC相机应用程序是可能的logging。 提前感谢你。 protected void startRecording() throws Exception { mrec = new MediaRecorder(); mCamera.unlock(); mrec.setCamera(mCamera); mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA); mrec.setAudioSource(MediaRecorder.AudioSource.MIC); mrec.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); //mrec.setPreviewDisplay(surfaceHolder.getSurface()); File picDirectory = new File(Environment.getExternalStorageDirectory() +"/TrouwApp"); picDirectory.mkdirs(); File mediaStorageDir = new File(Environment.getExternalStorageDirectory() +"/TrouwApp", "Videos"); // Create the storage directory if it does not exist if (! mediaStorageDir.exists()){ if […]

Android:从片段调用活动

我在一个活动中使用片段。 我正在使用MediaRecorder进行录音。 我有两个部分的活动。 第一本身将列出logging文件的活动。 在右侧,当selectlogging新文件时,将调用AudioRecording Activity。 当select任何列出的文件时,我正在使用AudioPlayer播放录制的文件。 我在这里能够将活动转换为片段,但是当我按下停止它正在终止应用程序。 请任何人都可以回答。 我的audiorecorder工作正常,当我用它作为简单的活动。 任何解决scheme,如果我可以在该片段或类似的东西中调用该活动。 如果有人知道,请帮助我。