如何在pjsua2 Python库通话中发送音频文件
使用pjsua2 Python库接通通话后立即播放音频失败的问题
我尝试用pjsua2 Python库发起通话,希望在对方接通后自动播放音频,但在通话进入PJ SIP_INV_STATE_CONFIRMED状态时直接执行播放代码无法正常工作;如果等通话建立3-4秒后再执行相同逻辑的代码,却能正常播放音频。
无效的代码实现
class Call(pj.Call): def __init__(self, acc): pj.Call.__init__(self, acc) def onCallMediaState(self, prm): print("Call media state changed") ci = self.getInfo() if ci.state == pj.PJSIP_INV_STATE_CONFIRMED: print("Call is confirmed, starting audio playback") player = pj.AudioMediaPlayer() player.createPlayer("/root/audio.wav") aud_med = self.getAudioMedia(-1) player.startTransmit(aud_med)
延迟执行可正常工作的代码
player = pj.AudioMediaPlayer() player.createPlayer("/root/audio.wav", pj.PJMEDIA_FILE_NO_LOOP) aud_med = call.getAudioMedia(-1) player.startTransmit(aud_med)
完整项目代码
import pjsua2 as pj ep_cfg = pj.EpConfig() ep = pj.Endpoint() ep.libCreate() ep.libInit(ep_cfg) ep_cfg.uaConfig.threadCnt = 0 sipTpConfig = pj.TransportConfig() sipTpConfig.port = 5060 tp = ep.transportCreate(pj.PJSIP_TRANSPORT_UDP, sipTpConfig) ep.libStart() acfg = pj.AccountConfig() acfg.idUri = "caller_id <sip:username@sip.example.com>" acfg.regConfig.registrarUri = "sip:sip.example.com" acfg.sipConfig.authCreds.append(pj.AuthCredInfo("digest", "*", "username", 0, "password")) # Create the account acc = pj.Account() acc.create(acfg) call = pj.Call(acc) prm = pj.CallOpParam(True) call.makeCall('sip:phone_number@sip.example.com', prm)
内容的提问来源于stack exchange,提问作者dummyuser4
相关产品推荐
相关产品推荐

