如何去除 录像开始和结束时 的噔噔噔噔声音
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()方法了。
我们使用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()方法了。
相关文章推荐
- Postgres 中如何取得周的起始和结束日期?(周是从周一开始算起)
- Cocos2d-x 程序是如何开始运行与结束的
- cocos2d-x 引擎分析:程序是如何开始运行与结束的?
- 在sql语句中,如何获取一个日期的周开始日期,周结束日期
- 如何得出两个日期间各个季、月、周的开始日期、结束日期?
- 开始时间小于结束时间 WdatePicker这个控件是如何处理的
- Cocos2d-x 程序是如何开始运行与结束的
- Cocos2d-x 程序是如何开始运行与结束的
- Android 如何监听一个线程的开始和结束
- 在js中如何获取上一个季度的开始、结束日期
- Cocos2d-x 程序是如何开始运行与结束的
- Cocos2d-x 程序是如何开始运行与结束的
- arcgis for ios 如何监听地图滑动开始,变化,结束
- C# 下面的代码示例演示如何结束异步操作以获取请求的流,然后开始一个请求以获取响应。....
- Cocos2d-x 程序是如何开始运行与结束的
- Cocos2d-x 程序是如何开始运行与结束的
- JAVA如何根据jsp页面时间(开始到结束时间)和checkbox选择不同的多少出现不同的曲线
- 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改的记录数
- 迅捷屏幕录像工具如何录制视频的鼠标指针声音?
- [转]Cocos2d-X 程序是如何开始运行与结束的