オーディオ/ビデオ ストリームから「スクリーン共有」ストリームに変更したい:
peerConnection.removeStream(streamA) // __o_j_sep... in Screenshots below
peerConnection.addStream(streamB) // SSTREAM in Screenshots below
streamA
カメラとマイクからのビデオ/オーディオ ストリームです。streamB
拡張機能から取得したスクリーンキャプチャです。- どちらも次のような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
(はい、これは正しくないように見えますが、ピア接続にアクセスする公式の方法はありません。ここでの説明を参照してください) およびここ.
もともと、 の videoTracks を の videoTrack で (交換) 変更しようとしましstreamA
たstreamB
。ここで質問を参照してください。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