• Android mtk单路录音问题


    在单路录音中,有两种情况导致底层录音资源被占用的问题:

    1 开启vmLog后,拨打一个电话,挂断电话。如果挂断电话后,没有关闭vmlog进程,则会导致其它AP 无法得到底层的录音资源,从而无法录音。

    2 打开第三方录音软件,第三方录音软件在后台getinput,一直占用底层资源,不释放的情况话,则会导致其它AP 无法得到底层的录音资源,从而无法录音。

        当第三方录音软件退出后,由于后台一直占用底层资源,没有释放mic source,也会导致其它AP 无法得到底层的录音资源,从而无法录音。

        当第三方录音软件退出前,把它得到的getinput交给别的AP,没有释放mic source,也会导致其它AP 无法得到底层的录音资源,即使重启手机也无法录音。

        当第三方录音软件退出后,重启手机,第三方录音软件的后台自动运行,然后会getinput source的动作,这样后台会一直占用input source,也会导致其它AP 无法得到底层的录音资源,即使重启手机也无法录音。

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    目前mtk的75,15,77,17平台硬件上只支持单路录音,不支持多路录音,后续89平台在这块已经做了改进,多路录音需要硬件支持,后续更高阶的平台是可以支持多路录音的。
    PDXXXX是mtk77平台,硬件上只支持单路录音,不支持多路录音。
    开发分析是因为使用第三方微信的时候,一直占用底层的录音资源,没有释放资源造成的。(当问题出现后,把微信进程从后台服务中杀掉或卸载掉后,重启手机就会恢复)
    建议第三方微信,在不用的时候及时释放底层录音资源,使其他AP及时获得底层录音资源,可以正常录音。
    第三方微信被占用的mtklog如下所示:

    第三方微信被占用的mtklog:
    11-29 09:10:52.891   116   346 D AudioRecord: getInput(): fail retry 0
    11-29 09:10:52.891   116   346 D AudioYusuPolicyManager: getDeviceForInputSource()input source 1, device 00040000
    11-29 09:10:52.891   116   346 D AudioYusuPolicyManager: getInput() inputSource 1, samplingRate 48000, format 1, channelMask c, acoustics 7
    11-29 09:10:52.891   116   346 D AudioStreamHandler: +openInputStream devices = 40000 format = 1 channelCount = 12 samplerate = 48000
    11-29 09:10:52.891   116   346 D AudioStreamHandler: openInputStream :: no free stream available
    11-29 09:10:52.891   116   346 V AudioFlinger: openInput() openInputStream returned input 0x0, SamplingRate 48000, Format 1, Channels c, status 1098266528
    11-29 09:10:52.891   116   346 D AudioYusuPolicyManager: getInput() failed opening input: samplingRate 48000, format 1, channelMask 12
    11-29 09:10:52.896   116   346 D AudioRecord: getInput(): fail retry 1
    11-29 09:10:52.896   116   346 D AudioYusuPolicyManager: getDeviceForInputSource()input source 1, device 00040000
    11-29 09:10:52.896   116   346 D AudioYusuPolicyManager: getInput() inputSource 1, samplingRate 48000, format 1, channelMask c, acoustics 7
    11-29 09:10:52.896   116   346 D AudioStreamHandler: +openInputStream devices = 40000 format = 1 channelCount = 12 samplerate = 48000
    11-29 09:10:52.896   116   346 D AudioStreamHandler: openInputStream :: no free stream available
    11-29 09:10:52.896   116   346 V AudioFlinger: openInput() openInputStream returned input 0x0, SamplingRate 48000, Format 1, Channels c, status 1098266528
    11-29 09:10:52.896   116   346 D AudioYusuPolicyManager: getInput() failed opening input: samplingRate 48000, format 1, channelMask 12
    11-29 09:10:52.901   116   346 D AudioRecord: getInput(): fail retry 2
    11-29 09:10:52.901   116   346 D AudioYusuPolicyManager: getDeviceForInputSource()input source 1, device 00040000
    11-29 09:10:52.901   116   346 D AudioYusuPolicyManager: getInput() inputSource 1, samplingRate 48000, format 1, channelMask c, acoustics 7
    11-29 09:10:52.901   116   346 D AudioStreamHandler: +openInputStream devices = 40000 format = 1 channelCount = 12 samplerate = 48000
    11-29 09:10:52.901   116   346 D AudioStreamHandler: openInputStream :: no free stream available
    11-29 09:10:52.901   116   346 V AudioFlinger: openInput() openInputStream returned input 0x0, SamplingRate 48000, Format 1, Channels c, status 1098266528
    11-29 09:10:52.901   116   346 D AudioYusuPolicyManager: getInput() failed opening input: samplingRate 48000, format 1, channelMask 12
    11-29 09:10:52.901   116   346 E AudioRecord: Could not get audio input for record source 1
    11-29 09:10:52.901   116   346 E StagefrightRecorder: audio source is not initialized
    11-29 09:10:52.901   116   346 D StagefrightRecorder: start done status=-2147483648
    11-29 09:10:52.901   612   612 E MediaRecorder: start failed: -2147483648
    11-29 09:10:52.902   612   612 E MediaRecorderWrapper: MediaRecorder start errorjava.lang.RuntimeException: start failed.

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    目前,PDXXXX是Android4.0平台,对于3gpp格式的录音文件,其编码方式是采用16K采样率,处理数据的比特率128K,双声道。3gpp格式的录音文件,在电脑上播放时,与该播放器的解码器相关。如果此播放器的解码器 支持16K采样率,处理数据的比特率128K,双声道,将可以正常播放,如PotPlayer可以正常播放。用户可以使用支持此编码方式的播放器,像PotPlayer播放器进行播放.
    而amr格式的录音文件其编码方式为8K采样率,处理数据的比特率12.2k,单声道,而电脑上的播放器的解码器都是支持此编码方式,所以amr格式的录音文件在电脑和手机上都是可以播放的。

    改善方案及临时措施:建议用户使用支持3gpp格式的播放器,如PotPlayer进行播放。同时建议:建议将amr格式的录音文件设置为默认的录音文件,他的编码方式和解码方式在手机和电脑上都是支持的,普遍性比较好。
    长期改善措施:建议将amr格式的录音文件设置为默认的录音文件,他的编码方式和解码方式在手机和电脑上都是支持的,普遍性比较好。对于3gpp格式的录音文件,它是专用移动多媒体录音文件,没有amr格式的录音文件通用性强。

    目前mtk的75,15,77,17平台硬件上只支持单路录音,不支持多路录音,后续89平台在这块已经做了改进,多路录音需要硬件支持,后续MTK更高阶的平台是可以支持多路录音的。
    开启语音唤醒后,它会一直占用底层录音资源(此情况已经和做语音唤醒的吴华琛核实),不释放的情况下,如果是单路录音,则会导致其它AP无法得到底层的录音资源,从而无法录音。
    PD1216B是6589平台所以1216B无此现象,PD1224T是17平台所以不可以。

  • 相关阅读:
    Java学习笔记-Java中的常用类
    Java学习笔记-Java中的常用类
    Java学习笔记-泛型
    GeoIP简介与资源,定位经纬度,获取用户IP
    【插代码】手机号码所在地查询,引用代码
    最后一个对象属性后边不要加豆号的bug,血淋淋的教训啊,模块化开发IE7下的严重错误,养成好习惯
    CSS自定义滚动条样式
    css实现input文本框的双边框美化
    在函数内部定义的变量加与不加var的区别,匿名函数和有名函数内声明变量的区别
    js定时器关闭,js定时器停止,一次关闭所有正在运行的定时器,自定义函数clearIntervals()一次关闭所有正在运行的定时器
  • 原文地址:https://www.cnblogs.com/maifengqiang/p/3795457.html
Copyright © 2020-2023  润新知