Linphone改变电话通话采样率由8000变为16000处理遇到的问题

本文介绍了在尝试将Linphone的电话通话采样率从8000Hz提升至16000Hz以优化语音识别效果时遇到的挑战。作者详细阐述了修改alaw.c和ortp avprofile.c文件的过程,以及在调整后发现采样率变更未生效的问题。进一步分析发现,Linphone在通话过程中会根据双方的配置匹配音频编解码,导致原本预期的PCMA格式被替换为PCMU。作者通过跟踪源代码,揭示了这一匹配过程涉及的函数和方法,如`linphone_call_start_audio_stream`、`audio_stream_from_io`、`make_profile`等,并指出在`sdp_process`中的`match_payloads`函数中,本地和远程payload的比较导致了问题的出现。
摘要由CSDN通过智能技术生成

采用linphone 进行语音通话,获取语音数据进行识别的时候发现效果不是很好,由于通话采用的采样率是8000,我想将linphone的通话采样率变为16000,看看实际效果如何:

默认采用的是PCMA的格式,由于语音识别接口只接受PCM或者wav这种不压缩的格式,所以我没有想修改linphone通话的payload类型,直接去将pcma的采样率变成16000,使用代码管理,到时候不需要了也能直接回退。

具体修改的地方:
1.将alaw.c 文件中获取sample的方法返回值由8000变为16000;
2.将ortp中avprofile.c文件中 PCMA格式的clock_rate 由8000变为16000;

这2个是在获取和设置采样率的时候会用到的,但是在配置这2个后,发现
只是resample 这个filter 将采样率由48000变为了16000, 但是打log 发现 PCMA格式的clock_rate 还是8000,比较困惑 ,重新看了下linphone 接电话的流程。
Linphone 有读配置文件,然后我将配置文件中的PCMA格式改为了16000,发现linphone通话payload不再使用PCMA,改为PCMU了。

我从 linphone_core_invite_address_with_params 开始查看到payload选择的整个过程。
一个比较关键的函数是:linphone_call_start_audio_stream 这个函数是通话流开始也就是接通前会调用的,里面调用了audio_stream_from_io这个方法,这个方法中和payload相关的函数是make_profile函数,这个函数关键的参数是call->resultdesc,所以找到这个在

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值