Alterando um MediaStream de RTCPeerConnection
peerConnection.removeStream(streamA) // __o_j_sep... in Screenshots below
peerConnection.addStream(streamB) // SSTREAM in Screenshots below
streamA
é um fluxo de vídeo / áudio proveniente da minha câmera e microfone.streamB
é a captura de tela que recebo da minha extensão.Eles são ambosMediaStream objetos que se parecem com isso:* 1 Observação
Mas se eu removerstreamA
depeerConnection
eaddStream(streamB)
como acima, nada parece acontecer.
O seguinte funciona como esperado (o fluxo nas duas extremidades é removido e adicionado novamente)
peerConnection.removeStream(streamA) // __o_j_sep...
peerConnection.addStream(streamA) // __o_j_sep...
Mais detalheseu encontreieste exemplo que faz "o inverso" (alterne da captura de tela para áudio / vídeo com a câmera), mas não consegue identificar uma diferença significativa.
opeerConnection
RTCPeerConnection objeto é realmente criado por esteBiblioteca SIPML código fonte disponível aqui. E eu acesso assim:
var peerConnection = stack.o_stack.o_layer_dialog.ao_dialogs[1].o_msession_mgr.ao_sessions[0].o_pc
(Sim, isso não parece correto, mas não existe uma maneira oficial de obter acesso à conexão entre paresveja a discussão aqui) eaqui.
Originalmente, tentei apenas (ex) alterar o vídeostreamA
com o videoTrack destreamB
. Veja a pergunta aqui. Foi-me sugerido que eu deveria tentar renegociar a Conexão entre Pares (removendo / adicionando Streams a ela), porque o addTrack não aciona umrenegociação.
Eu também pedi ajuda aqui mas o mantenedor parece muito ocupado e ainda não teve chance de responder.
* 1Observação: PorquestreamB
não tem umvideoTracks
propriedade? O fluxo é reproduzido em um HTML<video>
elemento e parece "funcionar". Aqui está como eu entendi:
navigator.webkitGetUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: streamId,
maxWidth: window.screen.width,
maxHeight: window.screen.height
//, maxFrameRate: 3
}
}
// success callback
}, function(localMediaStream) {
SSTREAM = localMediaStream; //streamB
// fail callback
}, function(error) {
console.log(error);
});
também parece ter umvideoTrack
:
Estou correndo:
OS X 10.9.3Versão do Chrome 35.0.1916.153