Android中实现录制内置声音

Android中实现对内置声源的录制有两种方案

一、将应用打包为系统应用

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",然后使用系统签名来打包应用,这样就第三方应用打包为系统应用,就可以使用系统权限了。 

对于系统签名,如果系统使用的是原生的系统,就可以直接在AOSP发布的Android源码获取签名证书

https://github.com/aosp-mirror/platform_build/tree/master/target/product/security

用signapk.jar对应用进行签名  

java -jar signapk.jar platform.x509.pem platform.pk8 app-unsigned.apk signed.apk

signapk获取地址:

https://github.com/techexpertize/SignApk

https://github.com/maks/aosp-signapk

  • 对于截走扬声器和耳机的声音问题 

修改frameworks下av/services/audiopolicy/AudioPolicyManager.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);

}

现在就可以使用MediaRecorder.AudioSource.REMOTE_SUBMIX实现内录功能了。

该方案只适用于知道系统签名或者自己编译系统源码的情况

参考文章:

https://www.jianshu.com/p/916ede1d1f48 https://blog.csdn.net/liuhaitao_share/article/details/41249175 https://blog.csdn.net/jinzhuojun/article/details/33748031

二、使用Root权限修改底层驱动

第二种方法来自开源项目:

https://github.com/iwo/SCR-Screen-Recorder-app

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android TV是一种基于安卓操作系统的智能电视平台,可以通过它来实现电视直播。使用Android TV的优势是它提供了许多内置的应用程序和功能来满足用户的需求。 首先,通过安装电视直播应用程序,如电视直播软件或电视直播平台的官方应用程序,用户可以从电视上直接观看实时的电视节目。这些应用程序可以提供各种电视频道的直播流,包括电视频道、体育频道、娱乐频道等。用户只需通过遥控器或手机应用程序选择所需的频道,即可实时观看电视节目。 其次,在Android TV上,用户可以通过电视直播应用程序录制和回放节目。许多电视直播应用程序提供了录制功能,用户可以通过设置指定的时间来录制他们喜欢的节目。这使得用户可以随时回顾他们错过的节目,或者将节目保存下来以备将来观看。 此外,Android TV还支持电视直播应用程序的多屏互动功能。通过将智能手机或平板设备与Android TV连接,用户可以将他们的设备作为遥控器或第二屏幕使用。这使得用户可以在手机或平板上查看节目指南、选择频道、调整音量等,并同时在电视上观看实时节目。 总之,通过使用专门的电视直播应用程序, Android TV可以实现电视直播功能。这使用户能够实时观看各种电视节目,并提供了录制、回放和多屏互动等功能,带来更加丰富的观影体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值