首页 > 解决方案 > 通过 JsSIP (Asterisk) 拨打电话时没有声音

问题描述

我正在尝试调试现有系统,其中调用是通过 Asteriks 进行的。接听来电时,一切正常,但在拨出电话时显然没有声音(但我接受'addstream'事件并将流附加到音频)。生产代码需要 500 行,但这段代码的作用几乎相同,但效果不佳

const socket = new JsSIP.WebSocketInterface('wss://callwss.agdevelopments.net');
socket.via_transport = 'wss';
const configuration = {
    password: "SIP4003!",
    realm: "callws,s.agdevelopments.net",
    register: true,
    session_timers: false,
    uri: "sip:4003@callwss.agdevelopments.net",
    sockets: [socket]
}
const ua = new JsSIP.UA(configuration)

//     Setup events
ua.on('connected', function () {
    console.log('Connected')
})
ua.on('disconnected', function () {
    console.log('Connected')
})

//    Make a call

const eventHandlers = {
    'progress': function (e) {
        console.log('call is in progress');
    },
    'failed': function (e) {
        console.log('call failed with cause: ' + (e.data ? e.data.cause : 'no cause'), e);
    },
    'ended': function (e) {
        console.log('call ended with cause: ' + (e.data ? e.data.cause : 'no cause'), e);
    },
    'confirmed': function (e) {
        console.log('call confirmed');
    },
    'addstream': (e) => {
        console.log('Add stream (event handlers)')
        audio.srcObject = e.stream
        audio.play()
    }
};

const options = {
    'eventHandlers': eventHandlers,
    'mediaConstraints': {'audio': true, 'video': false}
};

const audio = new window.Audio()

ua.on('registered', function () {
    const session = ua.call('0513887341', options)

    if (session.connection) {
        console.log('Connection is valid')

        session.connection.addEventListener('addstream', e => {
            console.log('Add stream')
            audio.srcObject = e.stream
            audio.play()
        })

        session.on('addstream', function(e){
            // set remote audio stream (to listen to remote audio)
            // remoteAudio is <audio> element on page
            const remoteAudio = audio
            remoteAudio.src = window.URL.createObjectURL(e.stream);
            remoteAudio.play();
        });
        session.connection.addEventListener('peerconnection', e => {
            console.log('Peer connection')
            audio.srcObject = e.stream
            audio.play()
        })
    } else {
        console.log('Connection is null')
    }
})

ua.on('newRTCSession', (data) => {
    console.log('New RTC Session')
    const session = data.session
    session.on('addstream', function(e){
        // set remote audio stream (to listen to remote audio)
        // remoteAudio is <audio> element on page
        const remoteAudio = audio
        remoteAudio.src = window.URL.createObjectURL(e.stream);
        remoteAudio.play();
    });

})

ua.start()

还附上了来自 Asterisk 的截图。第一个是无声去电,第二个是有声来电

在此处输入图像描述

在此处输入图像描述

标签: javascriptasteriskjssip

解决方案


该问题已从 IT 方面解决。JsSIP或代码没有问题


推荐阅读