Android Mediarecorder录制的时候屏蔽掉声音
项目需求,在拍摄音视频时候将声音屏蔽,找了有关方面的资料,现总结下:
一、在原有工程中使用如下代码:
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
if (SettingsUtils.SETTINGS_SHOW_VOICE_SWITCH == 0){
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
}else{
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_UPLINK);
}
if (DrivingRecorderUtil.CURSDKVERSION >= 8) {
CamcorderProfile targetProfile = CamcorderProfile
.get(CamcorderProfile.QUALITY_HIGH);
mMediaRecorder.setProfile(targetProfile);
} else {
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
}
mMediaRecorder.setVideoSize(SettingsUtils.SETTINGS_SHOW_FRAME[0],SettingsUtils.SETTINGS_SHOW_FRAME[1]);
原因CamcorderProfile 设置不仅仅是分辨率,它还将设置的东西作为输出格式和编码器 (用于音频和视频),所以放弃此方法使用。
二、修改代码如下:
//start实现录像静音 /*mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setVideoSize(SettingsUtils.SETTINGS_SHOW_FRAME[0],SettingsUtils.SETTINGS_SHOW_FRAME[1]); //设置编码比特率,不设置会使视频图像模糊 mMediaRecorder.setVideoEncodingBitRate(5*1024*1024); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);*/ //end
三、参考:
下面是我的工作代码来记录结构视频和音频:
问题: 1) 为什么是 CamcorderProfile
需要? setProfile(...)
似乎无论 QUALITY_HIGH 给,但后来我设置我想要的尺寸设置尺寸 setVideoSize(...)
,它会重写此。然而,当我删除 CamcorderProfile 两条线,这款应用程序崩溃在setVideoSize(...)
与 LogCat E/MediaRecorder(19526): setVideoSize called in an invalid state: 2
。
2) 如何不录制音频?文件指出,如果 setAudioSource(...)
不是叫,会有没有音频轨道。然而,当我删除这条线时应用程序崩溃在 setProfile(...)
与 LogCat E/MediaRecorder(19946): try to set the audio encoder without setting the audio source first
。
3) 如果删除了这两个 CamcorderProfile 线和 setAudioSource(...)
线,它与 1 时崩溃)。
4) 我也试过添加行
recorder.setOutputFormat(OutputFormat.DEFAULT);
而不是 CamcorderProfile 线。但现在它崩溃在 perpare()
。如果 setAudioSource(...)
被称为 LogCat 是:E/MediaRecorder(20737): audio source is set, but audio encoder is not set
如果它不叫 LogCat 就是:E/MediaRecorder(20544): video source is set, but video encoder is not set
我有一家印花布互联网,我无法找到正确的方法,设置 MediaRecorder 的一个好例子。在这里它意味着在 API 8 后你应该使用 CamcorderProfile 类,但对我来说它急转弯的问题。
任何帮助就太好了!谢谢 !
代码 (如下面是在运行时的工作方式):
recorder = new MediaRecorder();
recorder.setCamera(<<camera>>);
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
recorder.setProfile(profile);
recorder.setOutputFile(<<Path String>>);
recorder.setVideoSize(<<Width>>, <<Height>>);
recorder.setPreviewDisplay(<<Surface>>);
recorder.setOrientationHint(0);
recorder.setMaxDuration(10000);
recorder.setOnInfoListener(this);
try
{
recorder.prepare();
recorder.start();
} catch ...
解决方法 1:
我没有很多的经验与 MediaRecorder 但我正在读一些相关的主题,我会尝试回答您的问题:
1、 3 和 4)CamcorderProfile 设置不仅仅是分辨率,它还将设置的东西作为输出格式和编码器 (用于音频和视频)。你给出错误,因为您可能需要使用 setOutputFormat
之前调用 setVideoSize
并且您需要致电 setVideoEncoder
和setAudioEncoder
在它之后,如果你不想要使用 CamcorderProfile。[根据这个答案]
2)再次,CamcorderProfile 还设置音频属性 (如比特率的编码解码器,SampleRate,...) 所以你需要在调用它,这就是为什么之前设置音频源应用程序崩溃。如果你不想录制音频请尝试下一个代码: (我没测试它所以我其实不知道如果它工作,但我敢肯定它不会)
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoSize(WIDTH, HEIGHT);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
recorder.setOutputFile(PATH);
recorder.setPreviewDisplay(SURFACE);
recorder.prepare();
recorder.start();
另外请注意,如果您不想使用 CamcorderProfile (你想对记录音频或视频只有的意思) 您可能需要设置其他参数,以保证你有你想要的质量。看看下面的代码示例:
recorder = new MediaRecorder();
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
// Following code does the same as getting a CamcorderProfile (but customizable)
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
// Video Settings
recorder.setVideoSize(WIDTH, HEIGHT);
recorder.setVideoFrameRate(FRAME_RATE);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
recorder.setVideoEncodingBitRate(VIDEO_BITRATE);
// Audio Settings
recorder.setAudioChannels(AUDIO_CHANNELS);
recorder.setAudioSamplingRate(SAMPLE_RATE);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setAudioEncodingBitRate(AUDIO_BITRATE);
// Customizable Settings such as:
// recorder.setOutputFile(PATH);
// recorder.setPreviewDisplay(SURFACE);
// etc...
// Prepare and use the MediaRecorder
recorder.prepare();
recorder.start();
...
recorder.stop();
recorder.reset();
recorder.release();
我希望这可以帮助您。
使用MediaRecorder類、Camera開發基於Android系統手機的錄像功能
獲得的視頻文件十分模糊,無法達到系統再帶的相機所錄製的效果
經過分析后,發現在錄像的時候沒有使用自動聚焦功能,從而導致視頻效果極差
但是添加了自動對焦的代碼后,SurfaceView中的預覽已經達到預期效果,但是問題是錄製的視頻卻是花屏
在这里我提高了帧频率,然后就清晰了
mMediaRecorder.setVideoEncodingBitRate(5*1024*1024);
相关推荐
在Android平台上,MediaRecorder是一个非常重要的类,用于处理多媒体数据的录制,如音频和视频。在本场景中,我们关注的是如何使用MediaRecorder录制视频并将其通过Socket发送到其他设备或服务器。以下是对这一主题...
例子引用isoviewer-1.0-RC-27.jar库,实现MediaRecorder录制视频的暂停与继续录制 ,demo中使用的是竖屏(4:3)录制,解决了竖屏时预览横向显示,同时,录制成功之后,写了一个SurfaceView进行播放。
在Android平台上,MediaRecorder是一个非常重要的工具类,用于录制音频、视频或同时录制。这个工具在许多应用场景中都非常实用,比如开发一款应用,需要在后台持续记录用户的活动或者监控环境。在你提到的场景中,...
为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制音频的过程很简单,步骤如下: Step1:创建MediaRecorder对象; Step2:调用MediaRecorder对象的setAudioSource()方法设置声音...
在Android开发中,`MediaRecorder` 是一个非常重要的类,用于录制音频、视频或混合媒体。这个`Android MediaRecorder Demo1` 是一个基础的录音应用示例,旨在帮助初学者了解如何使用`MediaRecorder` API。如果你是...
在Android平台上,MediaRecorder是一个非常重要的工具类,用于录制音频、视频或同时录制音频和视频。这个类提供了从各种输入源(如摄像头)捕获多媒体数据,并将其编码为适合存储或传输的格式的功能。在本例中,...
在Android平台上,MediaRecorder是一个非常重要的工具类,用于处理多媒体数据的录制,包括视频和音频。本篇文章将详细探讨如何使用MediaRecorder实现视频录制,并进行压缩解码。 首先,了解MediaRecorder的基本工作...
本项目利用了Android自带的`MediaRecorder`类进行视频录制,并借助第三方库`mp4parser`来完成视频的分段处理和最终的MP4文件合成。以下是对这些知识点的详细说明: 1. **MediaRecorder**:这是Android SDK中的一个...
`ExtAudioRecorder`是Android系统提供的一种扩展音频记录器,它允许开发者以更高级别的控制来录制音频,相比系统默认的`MediaRecorder`类,提供了更多的定制选项。下面我们将深入探讨如何使用`ExtAudioRecorder`来...
MediaRecorder类是Android提供给开发者的一个便捷的API,允许应用程序录制音频和视频。使用MediaRecorder进行视频录制通常包括以下几个步骤:准备录制环境、设置MediaRecorder参数、开始和停止录制,以及处理录制...
在Android平台上,MediaRecorder是一个非常重要的工具类,用于录制音频、视频或同时录制音频和视频。这个类提供了从各种输入源(如摄像头)到各种输出格式(如MP4文件)的录制功能。在本篇文章中,我们将深入探讨...
MediaRecorder是Android平台上用于录制音频和视频的API,它允许开发者通过简单的设置和控制来实现高质量的音视频录制功能。使用MediaRecorder进行视频录制的快速步骤如下: 1初始化MediaRecorder对象并设置必要的...
在Android平台上,MediaRecorder是一个非常重要的类,它用于录制音频、视频或同时录制。当我们想要在后台实现自动录视频的功能时,通常会结合Service来实现这一需求。Service是Android的一个组件,可以在没有用户...
首先,Android系统提供了一个名为`MediaRecorder`的类,它是用于处理多媒体数据录制的核心组件。使用`MediaRecorder`,我们可以设置录制的参数,如视频分辨率、编码格式、帧率等,并启动和停止录制。 以下是一些...
在Android平台上,MediaRecorder是一个非常重要的工具类,用于录制音频、视频或同时录制音频和视频。这个"MediaRecorder视频录制"项目,显然专注于利用MediaRecorder实现后台视频录制功能。在Android Studio环境下,...
在Android平台上,MediaRecorder是一个非常重要的类,它用于录制音频、视频或同时录制音频和视频。这个类提供了从数据源到输出文件的媒体流录制功能。在这个“Android 用MediaRecorder录像源码”主题中,我们将深入...
在Android平台上,MediaRecorder是一个非常重要的工具类,用于录制多媒体数据,如视频和音频。它提供了集成的功能,允许开发者在应用程序中轻松实现媒体记录功能。本文将深入探讨如何使用MediaRecorder来录制视频和...
在Android平台上,MediaRecorder是一个至关重要的组件,它用于录制多媒体数据,包括视频和音频。这个组件的架构设计是基于OpenCore(PacketVideo)库,并利用Android的Binder机制进行进程间通信,实现高效的多媒体...
使用MediaRecorder实现视频录制,以实现的功能包括:录制开始、录制暂停和计时,播放功能暂时没有,以后如果有机会补上。注意除了在AndroidManifest.xml文件中申请权限外,还需要手动开启存储和相机权限,否则真机...
在Android开发中,使用MediaRecorder类来录制视频是常见的任务,但可能会遇到一些问题,比如录制的视频过短。这个问题通常表现为调用MediaRecorder的`start()`和`stop()`方法之间的间隔不足1秒(有时即使超过1秒也...