您的位置:首页 > 其它

如何去除 录像开始和结束时 的噔噔噔噔声音

2014-05-08 19:07 204 查看
转自: http://blog.csdn.net/dxpqxb/article/details/8510096
我们使用sipdroid做服务端时,每次收到rtsp的play请求或teardown请求时,我们的手机或pad都会发出 ‘蹦’的一声。这个声音有时候挺讨厌的,至少我希望不要发出这个声音。

那这个声音是哪里来的呢?

浏览了一遍源码,没有播放声音的代码。那就是系统层发出的声音了。

其实当你进系统自动的相机,点击录像按钮时,你的手机或pad也会发出 ‘蹦’的一声。那说明这个声音是camera或者mediarecorder整出来的。

一、先看相机,当我们点击相机的录制按钮时,会调用

->videocamera.java的onShutterButtonClick();

->startVideoRecording(){

......

if (effectsActive()) {

try {

mEffectsRecorder.startRecording();

......

}

effectsrecorder.java 的startRecording(){

......

mCameraSound.playSound(CameraSound.START_VIDEO_RECORDING);

......

}

CameraSound.START_VIDEO_RECORDING对应的文件就是"/system/media/audio/ui/VideoRecord.ogg"。

那么修改的方法就有很多了,最暴力的,删除videorecord.ogg;

温柔的,可以修改effects,看看调用条件:

private boolean effectsActive() {

return (mEffectType != EffectsRecorder.EFFECT_NONE);

}

而mEffectType = CameraSettings.readEffectType(mPreferences);

看看camerasetting.java的readEffectType方法,是读取camera应用的SharedPreferences文件的pref_video_effect_key这一键值。

camera应用的SharedPreferences文件在/data/data/com.android.camera/shared_prefs 目录下。

二、那么如果我们直接调用mediarecorder 的api又是怎样呢?

->mediarecorder.java 的start();

......

->mediarecorder.cpp 的start();

......

->cerdaxrecorder.cpp的start();

->mCamera->startRecording();

->也就是cameraservice.cpp的 startRecording();

->startCameraMode(CAMERA_RECORDING_MODE);

->startRecordingMode()

->mCameraService->playSound(SOUND_RECORDING);

而mSoundPlayer[SOUND_RECORDING] = newMediaPlayer("/system/media/audio/ui/VideoRecord.ogg");

原来mediarecorder的开始录像也会最终调用cameraservice的播放声音。而且这个调用时没有条件的调用,修改起来比较麻烦。

当然了,三个诸葛亮抵不过一巴掌,直接删除videorecord.ogg,啥声音都没了。

要不就只有修改cameraservic.cpp的startRecordingMode()方法了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: