ここに私の使用例があります。アリスは、ボブが聴きたいクールな新しいメディアトラックを持っています。彼女はブラウザでメディアファイルを選択し、メディアファイルはBobのブラウザで即座に再生を開始します。WebRTCを使用したストリームメディアファイル
WebRTC APIを使用してこれを構築することが可能かどうかはまだ分かりません。すべての例では、私はgetUserMedia(を介して取得した利用ストリーム)を見つけることができますが、これは私が持っているものである。受信側では
var context = new AudioContext();
var pc = new RTCPeerConnection(pc_config);
function handleFileSelect(event) {
var file = event.target.files[0];
if (file) {
if (file.type.match('audio*')) {
console.log(file.name);
var reader = new FileReader();
reader.onload = (function(readEvent) {
context.decodeAudioData(readEvent.target.result, function(buffer) {
var source = context.createBufferSource();
var destination = context.createMediaStreamDestination();
source.buffer = buffer;
source.start(0);
source.connect(destination);
pc.addStream(destination.stream);
pc.createOffer(setLocalAndSendMessage);
});
});
reader.readAsArrayBuffer(file);
}
}
}
私は、次のしている:
function gotRemoteStream(event) {
var mediaStreamSource = context.createMediaStreamSource(event.stream);
mediaStreamSource.connect(context.destination);
}
このコードは(メディアがありません音楽)が受信側で再生されます。
ただし、WebRTCハンドシェイクが完了し、
gotRemoteStream関数が呼び出された直後に
が終了したイベントを受信しました。
gotRemoteStream関数が呼び出され、メディアの再生が開始されません。
アリス側では、 source.connect(宛先)という行で魔法が発生すると考えられます。その行を source.connect(context.destination)に置き換えると、アリスのスピーカーからメディアが正しく再生されます。
ボブ側では、アリスのストリームに基づいてメディアストリームソースが作成されます。ただし、ローカルスピーカーが mediaStreamSource.connect(context.destination)を使用して接続されている場合、スピーカーから音楽が再生されません。
オフもちろん、私は常にデータチャネルを介してメディアファイルを送ることができましたが、どこという点で、楽しいです...
を自分のコードや私のユースケースを実現する方法についていくつかのアイデアと間違っているものを上の任意の手がかりだろう大変感謝しています!
私は最新かつ最高のChrome Canaryを使用しています。
ありがとうございました。
私のコードに誤りがあるため、アリス側のSDP回答が正しくハンドリングされなかったため、ボブ側の受信ストリームが終了しました。問題を修正した後、メディアはまだ再生されませんが、例は異なる動作をします。私はそれに応じて質問を更新しました。 – Eelco
それは無関係かもしれません(私はwebRTCの経験がありません)が、https://github.com/wearefractal/hollaはあなたを助けることができますか? – rickyduck