Потоковое аудио файла во время звонка через JavaScript - PullRequest
0 голосов
/ 29 июня 2018

Что я пытаюсь сделать:

  1. Я звоню из браузера, нажимая на любой номер
  2. вызов соединяется, и я могу говорить и слушать, какой бы ни был приемник говорить

Я использовал API WebRtc для доступа к аудио через браузер,

Теперь, что я хочу сделать больше:

1) Когда я звоню и отвечаю на автоответчик, я хочу оставить предварительно записанную голосовую почту одним щелчком мыши.

Итак, я хочу этого, я просто передаю этот аудиофайл через микрофон, но я не понимаю, как это сделать,

this.audioTest = function() {
    console.log("Testing function");
    var a1 =  document.getElementById("remote");
    var pc = this.session.sessionDescriptionHandler.peerConnection;
    var backgroundMusic = audioContext.createMediaElementSource(document.getElementById("remoteMedia"));
    var mixedOutput = audioContext.createMediaStreamDestination();
    backgroundMusic.connect(mixedOutput);
    console.log(mixedOutput);
    var remoteStream = new MediaStream();
    pc.getSenders().forEach(function (sender) {
        var track = mixedOutput.stream;
        if (track) {
            remoteStream.addTrack(track);
        }
    });
    a1.srcObject = remoteStream;
}

Вот мой код, я сначала проигрываю аудио, а затем пытаюсь передать его через микрофон, Но не получая никакого лидерства, Если кто-нибудь может помочь или предложить что-нибудь, это было бы здорово.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я не думаю, что вам нужно передавать ваш аудиофайл (голосовое сообщение) через микрофон. Вы можете переключать поток (передаваемый в WebRTC) с микрофона на голосовое сообщение.

const micStream; // user MediaStream
const msgStream; // voice message MediaStream
const pc; //RTCPeerConnection
const destination = audioCtx.createMediaStreamDestination();
const micSource = audioCtx.createMediaStreamSource(micStream);
const micGainNode = audioCtx.createGain(); //with this you can change volume of stream
micSource.connect(micGainNode);
micGainNode.connect(destination);
// adding stream of destination to WebRTC.
// note that stream is taken from destination
destination.stream.getTracks().forEach(
   function (track) {
      pc.addTrack(track,destination.stream);
   }
);
// then on send voice message listener  
sendVoiceMessageListener = function(){
   //we need to disconnect microphone stream and connect voice message stream
    micGainNode.disconnect(destination);
    const msgSource = audioCtx.createMediaStreamSource(msgStream);
    const msgGainNode = audioCtx.createGain();
    micSource.connect(micGainNode);
    micGainNode.connect(destination);
}
0 голосов
/ 29 июня 2018

Вы захотите использовать API Web Audio. Там вы можете беспрепятственно микшировать (или переключаться в вашем случае) между микрофоном и аудио из других источников, отправляя только один MediaStream на одноранговый узел WebRTC.

Соответствующий метод - createMediaStreamDestination в контексте. https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createMediaStreamDestination

const rtcOutput = audioContext.createMediaStreamDestination();
yourMixOutput.conntect(rtcOutput);

Затем используйте rtcOutput.stream в том, что вы отправляете на одноранговый узел.

...