成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android中實現系統聲音錄制-RK3399開發板源碼修改

移動開發 Android
Android中可以通過使用MediaRecorder.AudioSource.REMOTE_SUBMIX來實現系統聲音的錄制,這個屬性只有系統應用能夠使用。

前言

這幾天做系統聲音錄制,通過改源碼編譯后成功的;那就詳細介紹下內置聲源的錄制方案。

Android中可以通過使用MediaRecorder.AudioSource.REMOTE_SUBMIX來實現系統聲音的錄制,這個屬性只有系統應用能夠使用。

而且這個屬性會截掉耳機和揚聲器的聲音,聽不到手機中播放音樂或者視頻時的聲音。

這個時候我們就要來改系統源碼。

一、錄音的簡單實現

AudioRecord  audioRecord = new AudioRecord(MediaRecorder.AudioSource.REMOTE_SUBMIX
, captureSampleRate
, captureChannel
, AudioFormat.ENCODING_PCM_16BIT
, recordBufferSize);
new Thread(new Runnable() {
@Override
public void run() {
final byte[] bytes = new byte[recordBufferSize];
audioRecord.read(bytes, 0, bytes.length);
audioRecord.setPositionNotificationPeriod(captureSampleRate / 25);
audioRecord.setRecordPositionUpdateListener(new AudioRecord.OnRecordPositionUpdateListener() {
@Override
public void onMarkerReached(AudioRecord recorder) {
}
@Override
public void onPeriodicNotification(AudioRecord recorder) {
singleThreadPool.execute(new Runnable() {
@Override
public void run() {
try {
if(audioRecord!=null){
audioRecord.read(bytes, 0, bytes.length);
PcmBuffer.clear();
PcmBuffer.put(bytes, 0, recordBufferSize);
audioFrameParam.sampleRate = ZEGO_AUDIO_SAMPLE_RATE_44K;
//聲音的處理
}
}catch (Exception e){
e.printStackTrace();
}
}
});
}
});
audioRecord.startRecording();
}
}).start();

二、AudioSource輸入源介紹?

public final class AudioSource {
private AudioSource() {}
/** Default audio source **/
public static final int DEFAULT = 0;
/** Microphone audio source */
public static final int MIC = 1;
/** Voice call uplink (Tx) audio source */
public static final int VOICE_UPLINK = 2;
/** Voice call downlink (Rx) audio source */
public static final int VOICE_DOWNLINK = 3;
/** Voice call uplink + downlink audio source */
public static final int VOICE_CALL = 4;
/** Microphone audio source with same orientation as camera if available, the main
* device microphone otherwise */
public static final int CAMCORDER = 5;
public static final int VOICE_RECOGNITION = 6;
public static final int VOICE_COMMUNICATION = 7;
public static final int REMOTE_SUBMIX = 8;
}
  • DEFAULT:默認為MIC,android.permission.RECORD_AUDIO。
  •  MIC:麥克風,android.permission.RECORD_AUDIO。
  • VOICE_UPLINK:電話錄音上行線路,android.permission.CAPTURE_AUDIO_OUTPUT,系統權限不允許第三方app使用 。
  • VOICE_DOWNLINK:電話錄音下行線路,android.permission.CAPTURE_AUDIO_OUTPUT,系統權限不允許第三方app使用。
  •  VOICE_CALL:電話錄音上下線路,android.permission.CAPTURE_AUDIO_OUTPUT,系統權限不允許第三方app使用 。
  • CAMCORDER:攝像頭的麥克風,android.permission.RECORD_AUDIO。
  • VOICE_RECOGNITION:語音識別,android.permission.RECORD_AUDIO。
  • VOICE_COMMUNICATION:網絡電話,android.permission.RECORD_AUDIO。
  • REMOTE_SUBMIX:傳輸到遠程的音頻混合流,默認情況下如果用該項錄音,本地揚聲器或者耳機的聲音將會被截走,android.permission.CAPTURE_AUDIO_OUTPUT,系統權限不允許第三方app使用。

REMOTE_SUBMIX使用的注意事項

(1)需要系統權限 。

(2)會截走揚聲器和耳機的聲音,也就是說再錄音時本地無法播放聲音。

對于系統權限,需要在在AndroidManifest.xml添加 android:sharedUserId="android.uid.system",然后使用系統簽名來打包應用,這樣就第三方應用打包為系統應用,就可以使用系統權限了。

三、源碼修改

1、Android 10及以下的錄屏

frameworks\av\services\audiopolicy\enginedefault\src\Engine.cpp
if(mAvailableOutputDevices.getDevice(AUDIO_DEVICE_OUT_REMOTE_SUBMIX, String8("0")) != 0) {
device2 = availableOutputDeviceTypes & AUDIO_DEVICE_OUT_REMOTE_SUBMIX;
}

修改為:

if (mAvailableOutputDevices.getDevice(AUDIO_DEVICE_OUT_REMOTE_SUBMIX, String8("0")) != 0) {
device2 = availableOutputDeviceTypes & AUDIO_DEVICE_OUT_REMOTE_SUBMIX;
device2 |= (availableOutputDeviceTypes & AUDIO_DEVICE_OUT_WIRED_HEADPHONE);
device2 |= (availableOutputDeviceTypes & AUDIO_DEVICE_OUT_SPEAKER);
}

2、Android 11

目標frameworks\av\services\audiopolicy\enginedefault\src\Engine.cpp
if ((remoteSubmix = availableOutputDevices.getDevice(
AUDIO_DEVICE_OUT_REMOTE_SUBMIX, String8("0"),
AUDIO_FORMAT_DEFAULT)) != nullptr) {
devices2.add(remoteSubmix);
}

修改為?:

if ((remoteSubmix = availableOutputDevices.getDevice(
AUDIO_DEVICE_OUT_REMOTE_SUBMIX, String8("0"),
AUDIO_FORMAT_DEFAULT)) != nullptr) {
devices2 = availableOutputDevices.getDevicesFromTypes({
AUDIO_DEVICE_OUT_REMOTE_SUBMIX, AUDIO_DEVICE_OUT_WIRED_HEADPHONE, AUDIO_DEVICE_OUT_SPEAKER});
}

總結?

要實現安卓錄制系統聲音,正常情況下是獲取不到的,這個方案是修改源碼的方式來實現。

后面可以介紹下系統是怎么實現的,可以把源碼貼出來,大家一起學習。

圖片

責任編輯:姜華 來源: Android開發編程
相關推薦

2022-03-03 19:21:50

Harmony鴻蒙操作系統

2021-09-08 15:23:51

鴻蒙HarmonyOS應用

2023-03-07 15:54:45

鴻蒙Mesa庫

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2017-01-06 14:39:43

芯片

2020-12-16 10:05:48

鴻蒙開發板Onenet平臺

2020-12-02 11:55:40

OLED

2023-08-18 14:34:09

HDF驅動框架

2022-04-01 15:54:01

DHCP網絡協議開發板

2020-10-20 09:32:43

HiSparkWi-FiIoT

2022-05-31 16:06:24

udp通信wifi鴻蒙

2022-04-14 11:44:25

LiteOS線程鴻蒙

2022-10-14 15:55:24

環境搭建鴻蒙

2022-01-07 21:11:27

鴻蒙HarmonyOS應用

2021-05-25 14:47:43

鴻蒙HarmonyOS應用

2021-12-29 16:13:03

鴻蒙HarmonyOS應用

2020-11-17 12:15:36

MQTT開發

2022-09-19 13:49:55

操作系統鴻蒙

2022-02-24 16:39:41

OpenHarmonNiobe開發鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜精品久久久久久久久久久久 | www.久 | 亚洲伊人精品酒店 | 妞干网av | 三级黄色片在线 | 成人av一区 | 亚洲av毛片成人精品 | 中文字幕视频在线观看免费 | 日本黄色激情视频 | 免费黄色成人 | 欧美精品乱码久久久久久按摩 | 天天综合久久 | 成人在线中文字幕 | 亚洲国产精品99久久久久久久久 | 欧美色综合天天久久综合精品 | 日韩有码一区 | 日韩av一区二区在线观看 | av综合站| 日韩综合在线 | 深夜爽视频 | 午夜电影一区 | 国产午夜久久久 | 欧美午夜在线 | 欧美精品一区二区在线观看 | 久久精品欧美电影 | 国产一区久久 | 亚洲网址在线观看 | 欧美性网 | 日韩国产黄色片 | 九九久久国产 | 欧洲精品在线观看 | 色婷婷一区二区三区四区 | 一区二区三区四区在线视频 | 99综合| 天天操天天干天天曰 | 亚洲 自拍 另类 欧美 丝袜 | 男女网站免费观看 | 国产激情一区二区三区 | 久久精品久久综合 | 日韩在线视频一区 | 羞羞视频在线观看 |