Oto mój przypadek użycia: Alice ma nowy, ciekawy utwór multimedialny, którego chce, aby Bob słuchał. Wybiera plik multimedialny w swojej przeglądarce i plik multimedialny rozpoczyna się natychmiast w przeglądarce Boba.Przesyłanie strumieniowe plików multimedialnych za pomocą WebRTC
Nie jestem nawet pewien, czy możliwe jest teraz zbudowanie za pomocą interfejsu API WebRTC. Wszystkie przykłady można znaleźć strumieni zastosowania uzyskanych poprzez getUserMedia(), ale to, co mam:
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);
}
}
}
Po stronie odbiorczej Mam następujący:
function gotRemoteStream(event) {
var mediaStreamSource = context.createMediaStreamSource(event.stream);
mediaStreamSource.connect(context.destination);
}
Kod ten nie czyni media (muzyka) grać po stronie odbiorczej.
Jednak otrzymuję zdarzenie
zakończone zaraz po zakończeniu uzgadniania WebRTC i wywołaniu funkcji
getsRemoteStream.
Zostanie wywołana funkcja getRemoteStream , a odtwarzanie multimediów nie rozpocznie się.
Po stronie Alicji magia ma się zdarzyć w linii, która mówi: source.connect (miejsce docelowe). Kiedy zamieniam tę linię na source.connect (context.destination), media zaczynają poprawnie grać przez głośniki Alice.
Po stronie Boba źródło strumienia mediów jest tworzone na podstawie strumienia Alicji. Jednak gdy lokalny głośnik jest podłączony przy użyciu mediaStreamSource.connect (context.destination), muzyka nie rozpoczyna odtwarzania przez głośniki.
Off Oczywiście zawsze mogę wysłać plik multimedialny przez DataChannel ale gdzie jest zabawa w tym, że ...
Wszelkie wskazówki na temat tego, co jest nie tak z moim kodu lub kilka pomysłów na to, jak osiągnąć mój przypadek użycia byłby być bardzo docenionym!
Używam najnowszego i najlepszego Chrome Kanarowego.
Dzięki.
Z powodu błędu w moim kodzie odebrany strumień po stronie Boba został zakończony, ponieważ odpowiedź SDP po stronie Alicji nie została poprawnie przekazana. Po naprawieniu problemu nośnik nadal nie jest odtwarzany, ale przykład zachowuje się inaczej. Odpowiednio zaktualizowałem pytanie. – Eelco
może to być niepowiązane (nie mam doświadczenia z webRTC), ale czy https://github.com/wearefractal/holla może ci pomóc? – rickyduck