android打普通电话时的音频数据是否流经软件层?是否可以被修改?

__linux__ 2011-08-30 02:25:29
android打voip电话时,语音数据流肯定是流经软件层的。但是,打普通电话时,RIL却只向GSM模块发了AT指令。至于通话语音数据,好像没有经过RIL吧。我现在想对android打普通电话时的语音数据进行加密,因此必须要截获语音数据,加密之后再放回去。

希望有高手能解答以下几个问题,非常感谢:

1、android打普通电话时,音频数据不流经android软件层的任何一部分吗?也就是说,通话过程中的声音从MIC,到GSM模块,空中传输,再到对方的GSM模块,再到对方的话筒。整个过程中,通话中产生的声音流完全不接触android的软件层?而是从硬件直接到硬件?

2、android不是有一个audio部分吗?按理说任何声音的输入、输出,不是都要流经audio才对吗?难道打电话的时候例外?

3、android系统中也有电话录音软件,如果电话通话中的声音不流经软件层,那么怎么可能使用软件来录音?

4、android上还有一些通话背景设置软件,接听电话时,自动播放预定的噪音。模拟通话的噪音场景,例如:会议、晚餐、在路上、在雨中、机场、看比赛、音乐会等等。那么,这是不是意味着,通话时的声音数据不仅流经了android软件层,并且还可以在程序中被修改?
...全文
2233 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
shukunn 2013-10-31
  • 打赏
  • 举报
回复
打电话时,数据由Modem进来,如果modem采用PCM模式,则数据通过PCM送到音频codec, 随后codec再进行解码和选择播放通路,在内核中完成。不经过android.但modem到codec传输是数字信号。
小Z同学 2013-10-19
  • 打赏
  • 举报
回复
这个问题有没有被解决啊?
fsy351 2013-05-04
  • 打赏
  • 举报
回复
同求思路啊。。。。。。。。。。。。
jinchats 2012-10-24
  • 打赏
  • 举报
回复
同意13楼的说法。一般来说,打电话的时候,数据跟AP无关,MIC数据从硬件通路上直接到Modem;但是你也可改变VOICE CALL的通路,先让MIC数据到AP,加密后再从AP到Modem,这需要你的codec支持,这样的话估计延时比较大,而且平台通用性不好。如果modem端能切入,还是在modem端来做加密比较合理。
__linux__ 2012-10-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
不知道LZ是用的什么方案的GSM,小弟正好是驱动做modem这块语音的,也和很多AP接触过,说一点东西吧:
MIC从AP侧的CODEC芯片采到,直接通过PCM接口和modem芯片相连,根本不需要和AP侧的安卓有任何关系,modem侧拿到采到的PCM数据后会有自己的语音增强、编码处理,然后才给物理层到空口
之前也做过语音加密的方案,一般是外部提供一个加解密库,然后modem采到PCM数据后进行语音增强、编码,再调用接口进行加密,再送给物理层到空口

语音通话这一块儿其实和AP侧没什么关系,AP侧只控制了codec芯片,其他什么都没做[/Quote]
谢谢,也就是说,打电话这事,android只负责发送控制指令(如打电话的AT指令),但实现打电话的过程,就不是android的事了,而是modem的事情了,相当于android只是通知modem:哥们,打个电话。至于具体的通话过程,就由modem接手负责,和android没啥关系了。这也好理解,在没有智能手机和android的时代,电话不是照样打么,只要有手机内的modem就成了。

那么,这样的话,要进行android手机上的普通电话语音加密,就必须要获取基带的源码(并且能够成功修改之后烧写到机器上),因为基带是modem的软件,是否可以这样理解?
shunlongyang_sh 2012-07-26
  • 打赏
  • 举报
回复
不知道LZ是用的什么方案的GSM,小弟正好是驱动做modem这块语音的,也和很多AP接触过,说一点东西吧:
MIC从AP侧的CODEC芯片采到,直接通过PCM接口和modem芯片相连,根本不需要和AP侧的安卓有任何关系,modem侧拿到采到的PCM数据后会有自己的语音增强、编码处理,然后才给物理层到空口
之前也做过语音加密的方案,一般是外部提供一个加解密库,然后modem采到PCM数据后进行语音增强、编码,再调用接口进行加密,再送给物理层到空口

语音通话这一块儿其实和AP侧没什么关系,AP侧只控制了codec芯片,其他什么都没做
binger19900504 2012-06-19
  • 打赏
  • 举报
回复
楼主解决了没?我也遇到了这种问题,楼主给指点指点吧!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
PengPengPro 2012-04-27
  • 打赏
  • 举报
回复
可以把你要播放的声音通过扬声器播放出来, 然后MIC也就可以采集到了
qc_jmy 2011-11-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lxdhq1011 的回复:]
我也遇到跟lz类似的问题,想做一个自动应答的软件,但目前还不知道如何给对方发送事先录制好的音频,比如“听到D声后请留言”。个人想象的解决方式是,把声音播放的输出设置成mic,这样对方就可以听到了,请高手指点
[/Quote]


你这个解决方案实现了。
lxdhq1011 2011-09-28
  • 打赏
  • 举报
回复
我也遇到跟lz类似的问题,想做一个自动应答的软件,但目前还不知道如何给对方发送事先录制好的音频,比如“听到D声后请留言”。个人想象的解决方式是,把声音播放的输出设置成mic,这样对方就可以听到了,请高手指点
__linux__ 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 downloadtookit 的回复:]
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
可以录制上下行端口的通话语音
[/Quote]
可以录制应该没有问题,但是并不能对原先的通话语音数据进行改变吧。录制只是相当于复制了一份,但如果要对通话语音加密的话,就必须具备能改变原先通话语音的能力。
如果只是录制的话,那相当于截获了语音,但还是没有办法把它修改之后再放回去。
冰天狼 2011-09-06
  • 打赏
  • 举报
回复
学习了
DownloadTookit 2011-09-06
  • 打赏
  • 举报
回复
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
可以录制上下行端口的通话语音
daviddb7 2011-08-31
  • 打赏
  • 举报
回复
我的理解如下,未必正确,仅供参考。
声音在编码之前应该是可以获取的,编码是通过硬件来做的,编码以后才到RIL。
------------
通话过程中的声音从MIC,到GSM模块,空中传输,再到对方的GSM模块,再到对方的话筒。
------------
这中间应该还有一个部分,是MIC/话筒和GSM之间,应该是还有一个编解码的过程。如果需要截获语音数据,那应该是在MIC接收到声音这个部分来做的吧。
__linux__ 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 runer 的回复:]
暂时不可行的
[/Quote]
感谢回答,能否说的详细一些呢。不可行是指普通电话的音频数据不能被软件层截取并修改吗?如果是这样,能说一下为什么不可行吗?是不是原因就是我上面提到的:“通话中产生的声音流完全不接触android的软件层,而是从硬件直接到硬件”?
daviddb7 2011-08-31
  • 打赏
  • 举报
回复
MIC硬件之后是要过软件的。至少要通过驱动吧。
可能还会经过更上层的管理软件。不过我不清楚在Android对应的是哪个模块。
然后由软件处理,应该走到哪个应用程序去。我想你应该在这里就截获数据。

如果当前是语音通话,才会走接下来的编码。
编码不一定是硬件,也可能是软件。
从编码开始的流程估计就不好插入你自己的代码了。

你画的流程里都是硬件,但是这些硬件也是通过软件来控制的,可以查一下android跟这些硬件相关的API看看。
__linux__ 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 daviddb7 的回复:]
我的理解如下,未必正确,仅供参考。
声音在编码之前应该是可以获取的,编码是通过硬件来做的,编码以后才到RIL。
------------
通话过程中的声音从MIC,到GSM模块,空中传输,再到对方的GSM模块,再到对方的话筒。
------------
这中间应该还有一个部分,是MIC/话筒和GSM之间,应该是还有一个编解码的过程。如果需要截获语音数据,那应该是在MIC接收到声音这个部分……
[/Quote]

非常感谢您的答复。但是从回答的内容来看,你的意思是:mic和gsm之间有编解码过程,因此可以在这个中间截取,但是你上面又说了,编码是硬件做的。那整个过程还是没有经过软件层呀,那怎么截取呢?
加入您提到的编解码过程后的数据流如下:
MIC(硬件) ——> 编码(硬件) ——> GSM模块(硬件) ——> 空中传输(硬件) ——> 对方的GSM模块(硬件) ——> 对方的话筒(硬件)
可以看到,整个过程好像都是硬件在起作用啊,没有流经android的软件层,因此无法截取?
runer 2011-08-30
  • 打赏
  • 举报
回复
暂时不可行的

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧