Я использую WebRTC с Asterisk и получаю сообщение об ошибке примерно в 5% случаев, когда нет звука из-за ошибки при сигнализации.Простое исправление: если звук не проходит, остановите соединение и попробуйте снова.Я знаю, что это бандит, пока я исправляю реальную проблему.Однако сейчас я сделаю ставку на свой код.
Чтобы получить звук, я делаю следующее:
var remoteStream = new MediaStream();
peerConnection.getReceivers().forEach((receiver) => {
remoteStream.addTrack(receiver.track);
});
callaudio.srcObject = remoteStream;
callaudio.play();
Проблема в том, что удаленный поток всегда добавляет дорожку, даже когданет звука из динамиков.
Если вы проверите chrome: // webrtc-internals , вы увидите, что звук не отправляется, но приемник по-прежнему существует.Вы можете посмотреть на медиапоток и увидеть, что действительно есть аудиодорожка.Есть все, что подтверждает тот факт, что я должен что-то слышать, но я ничего не слышу в 5% случаев.
Мое решение состоит в том, чтобы получить данные с трека приемника и проверить, не происходит ли что-нибудь там,но я понятия не имею, как читать эти данные.У меня работает веб-аудио API , но он работает, только если в данный момент воспроизводится звук.Иногда человек на другом конце не разговаривает 10 секунд.Мне нужен способ прочитать необработанные данные и увидеть, что что-то происходит через это.Я просто хочу знать, есть ли ЛЮБЫЕ данные на MediaStream !
Если вы сделаете remoteStream.getAudioTracks()
, вы получите звуковую дорожку, потому что она есть, просто нет звука, проходящего через неетрек.