You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:45:22