Я хочу переключиться с аудио/видеопотока на поток с экранами:
peerConnection.removeStream(streamA) // __o_j_sep... in Screenshots below
peerConnection.addStream(streamB) // SSTREAM in Screenshots below
-
streamA
- это видео/аудиопоток, поступающий с моей камеры и микрофона. -
streamB
- это screencapture, который я получаю от моего расширения. - Они представляют собой MediaStream объекты, которые выглядят следующим образом:
* 1 Замечание
Но если я удаляю streamA
из peerConnection
и addStream(streamB)
, как показано выше, ничего не происходит.
Следующее работает как ожидалось (поток с обоих концов удаляется и добавляется)
peerConnection.removeStream(streamA) // __o_j_sep...
peerConnection.addStream(streamA) // __o_j_sep...
Подробнее
Я нашел этот пример, который делает "обратный" (переключение с экрана на аудио/видео с камерой), но не может заметьте существенную разницу.
Объект peerConnection
RTCPeerConnection фактически создан этим Библиотека SIPML исходный код, доступный здесь. И я обращаюсь к нему так:
var peerConnection = stack.o_stack.o_layer_dialog.ao_dialogs[1].o_msession_mgr.ao_sessions[0].o_pc
(Да, это выглядит неправильно, но нет официального способа получить доступ к Peer Connection см. обсуждение здесь) и здесь.
Изначально я попытался просто (ex) изменить видеотреки streamA
с помощью видеодрайвера streamB
. См. вопрос здесь. Мне было предложено, чтобы я попытался пересмотреть соединение Peer (удалив/добавив Streams к нему), потому что addTrack не запускает повторное обсуждение.
Я также просил о помощи здесь, но сопровождающий кажется очень занятым и еще не получил ответа.
* 1 Примечание: Почему streamB
не имеет свойства videoTracks
? Поток играет в элементе HTML <video>
и, кажется, "работает". Вот как я это понимаю:
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);
});
он также имеет videoTrack
:
Я запускаю:
- OS X 10.9.3
- Версия Chrome 35.0.1916.153