javascript - 通过 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 的截图。第一个是无声去电,第二个是有声来电
解决方案
该问题已从 IT 方面解决。JsSIP或代码没有问题
推荐阅读
- discord.js - 无法读取未定义的属性“成员”(discord.js)
- qt - 更改显示 DPI 比例时如何自动调整所有小部件的大小?
- c++ - 这个 std::upper 在这段代码中到底做了什么?
- algorithm - 关于最短路径的非常困难和优雅的问题
- python - 每个与 Python 相关的可执行文件都损坏了:“致命的 Python 错误:init_import_size:导入站点模块失败”
- django - Django仅在一个范围内根据月份和日期过滤日期时间
- node.js - 打字稿节点表达路由器和第二个参数。Typescript-eslint/no-misused-promises
- python - Flask:在根目录之外看不到 .env
- amazon-web-services - 基准 AWS lambda 性能
- python - 如何使用 Dash、Plotly 绘制 CSV 文件中的数据