У меня есть веб-приложение для аудиовызовов между клиентами. В качестве сервера я использую FreeSwitch с SIP (используя SIP.js) через безопасный веб-сокет. Когда я звоню между firefox и firefox, все работает нормально, но когда я звоню между firefox и chrome, я ничего не слышу в клиенте Chrome На клиенте Firefox я слышу, что было отправлено из Chrome.
Используя Wireshark, я обнаружил, что поток достигает клиентского компьютера и является правильным. После долгих проб и ошибок я обнаружил, что помогает создать тег audio
в js-коде и назначить ему удаленный поток как srcObject
(адаптация решения из WebRTC не работает с AudioContext ).
const audioContext = (window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.oAudioContext || window.msAudioContext);
var aaaudio = new Audio(); <--- adding those lines helps
aaaudio.srcObject = sipSession.mediaHandler.getRemoteStreams()[0]; <--- adding those lines helps
audioContext.createMediaStreamSource(sipSession.mediaHandler.getRemoteStreams()[0])
var gainNode = ctx.createGain();
gainNode.gain.value = .5;
source.connect(gainNode);
gainNode.connect(ctx.destination);
Я действительно не знаю, почему это не работает без звукового тега и как я могу исправить это, чтобы работать без него. Я что-то упустил?
Есть ли в Chrome какой-либо механизм, блокирующий вывод звука из потока, подключенного в js, без создания явного нового тега аудио?
Информация: Chrome был запущен как с отключенной, так и с включенной политикой cors