を呼び出すことなく、WebRTCで会話中にカメラを切り替えることができます。WebRTC:スイッチカメラ
{
id: "id_source_1" | "id_source_2",
facing: "user" | "environment",
kind: "kind_1" | "kind_2",
label: "label_1" | "label_2"
}
私たちは、「source_1」(「ユーザー」を向いている)との通話を開始し、我々は、ユーザーが切り替えることができるようにしたい:
と仮定我々は2「mediaSources」MediaStreamTrack.getSources
方法を使用してオブジェクトを持っています"source_2"( "環境"に面している)に移動します。私の現在のコードでは
ユーザーは次のように実行された「スイッチカメラ」ボタンをクリックした:(callingSession
は、現在のWebRTCセッションです)
var mediaParams = {
audio: true,
video: { deviceId : source_2.id},
options: {
muted: true,
mirror: true
},
elemId: 'localVideo'
};
callingSession.getUserMedia(mediaParams, function (error, stream) {
if (error) {
console.error('error getting user media');
} else {
var oldVideoTracks = callingSession.localStream.getVideoTracks();
var newVideoTracks = stream.getVideoTracks();
if (oldVideoTracks.length > 0 && newVideoTracks.length > 0) {
callingSession.localStream.removeTrack(oldVideoTracks[0]);
callingSession.localStream.addTrack(newVideoTracks[0]);
}
}
});
あなたがmediaParams
制約を見ることができるようになりましたに設定されています"source_2"では、getUserMedia
メソッドに新しい制約付きのmediaParams
を渡します。次に、古いストリームと新しいストリームの両方からビデオトラックを取得します。
このコードの主な問題は、新しいストリームがgetUserMedia
メソッドに渡されても、新しいストリームとまったく同じストリームなので、明らかに同じビデオトラックで、何も起こりません。カメラは切り替えられません!!!
私はこのコードで何か間違っていますか?なしでカメラを切り替える方法はありますか WebRTCのコールを再ネゴシエートしますか?実験方法はどうですか?applyConstraint()
私はそれをクロムで見ることができませんか?
ありがとうございます。
UPDATE 私のWebRTCアプリは横断歩道とイオンアプリです=> WebViewが
私は隔離して、ローカルで最初に2台のカメラを同時に見ることができるようにします(多くの電話機では、フロントとバックカメラを同時に使用できません)。また、 'video:{deviceId:{exact:source_2.id}}'を使って制約を強制します。最後に、 'MediaStreamTrack.getSources'は' navigator.mediaDevices.enumerateDevices'に取って代わられました。それがうまくいく場合は、ピア接続の前にストリームを削除してから、もう一度追加してみてください。 – jib
@jib現在の実装では、ソースをローカルに切り替えることができます(モバイルデバイスでも機能します)。私はピアに送信されたストリームを切り替えることができません。 – dafriskymonkey
私はChromeのエキスパートではありません(これはFirefoxで 'replaceTrack'をサポートしていますが問題ありません)。しかし、Chromeではまだあなたは[再交渉する]必要があると思います(http://stackoverflow.com/questions/35504214/どのようにaddtrack-in-mediastream-in-webrtc/35515536#35515536)、これはデータチャネル上で行うことができるので、シームレスに近いでしょう。 – jib