Peerjs: panggilan pada acara streaming menerima aliran jarak jauh yang sama dua kali

Dibuat pada 18 Des 2019  ·  16Komentar  ·  Sumber: peers/peerjs

Menggunakan contoh yang sangat sederhana dari peerjs.com antara dua rekan.

var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
peer.on('call', function(call) {
  getUserMedia({video: true, audio: true}, function(stream) {
    call.answer(stream); // Answer the call with an A/V stream.
    call.on('stream', function(remoteStream) {
      // Show stream in some video/canvas element.
     console.log('Received stream', remoteStream);
    });
  }, function(err) {
    console.log('Failed to get local stream' ,err);
  });
});

call.on ('stream') selalu menerima dua aliran jarak jauh yang sama.

Ini screen shotnya.

issue

Apakah ini masalah yang diketahui?

Terima kasih

bug investigating

Komentar yang paling membantu

saya membuat sebuah array.

const callList = [];

Ketika saya mendapat panggilan atau saya menelepon pengguna lain, pertama-tama saya periksa daftar itu di acara onStream dan jika panggilan itu tidak ada dalam daftar saya, lakukan stuf saya (tambahkan ke halaman elemen video atau apa pun).
Contoh di sini (saya menelepon pengguna lain dan jawaban pengguna lain dengan aliran):

        // make a call (userId is other users peer id)
    const call = peer.call(userId, myVideoElement.srcObject, { metadata: { userId: peer.id } });
    // create a video element
    const video = createVideoElement(); // this is my custom function for create a html video element, it returns a video element.
    // call on stream
    call.on('stream', remoteStream => {
            // check call list if call not in the list then add to list and page
            if(!callList[call.peer]){
                // add stream to video element
                video.srcObject = remoteStream;
                // show on page
                showVideoElemenetOnPage(video); // this is my custom function for append video element to another element on the page
                // add call objec to global object
                callList[call.peer] = call;
            }
    });

Ini dapat memecahkan masalah dua kali berjalan.

Semua 16 komentar

ada yang bisa mengomentarinya?

Saya menemukan masalah ini, sepertinya ini terjadi ketika kami mentransfer aliran ke klien lain (audio: true, video: true), coba periksa ini, transfer aliran dari video dan audio, dan kemudian hanya dengan audio, saya memecahkan masalah ini mungkin tidak benar, tetapi berhasil, saya memeriksa apakah saya sudah menerima aliran ini (ketika saya menerimanya, saya menyimpan aliran, misalnya, dalam array dan meletakkan kunci unik untuk itu, misalnya, id pengguna yang dapat diperoleh dengan melewatkan {metadata: {user_id: 123}} )

Ya, panggilan acara stream di setiap trek. Jadi, jika Anda streaming berisi dua lagu, acara stream harus menelepon dua kali.

Tolong, bisakah kita menangani perilaku ini? Saya dapat melakukan streaming video tetapi saya tidak memiliki suara

Masih menjadi masalah

Sipjs menanganinya dengan cara ini https://sipjs.com/guides/attach-media/ dengan memiliki onTrackAdded

Tolong, bisakah kita menangani perilaku ini? Saya dapat melakukan streaming video tetapi saya tidak memiliki suara

Saya pikir saya salah. Kedua aliran yang diterima berisi audio dan video. Saya lupa menghapus mute prop dari tag HTML saya ...

Saya memiliki video dan audio, hanya perilakunya yang mengganggu saya.

El vie., 17 abr. 2020 pukul 10:27, Baptiste Arnaud (<
[email protected]>) escribió:

Tolong, bisakah kita menangani perilaku ini? Saya dapat melakukan streaming video tetapi saya tidak punya
suara

Saya pikir saya salah. Kedua aliran yang diterima berisi audio dan video. saya
lupa untuk menghapus mute prop dari tag HTML saya ...

-
Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/peers/peerjs/issues/609#issuecomment-615115594 , atau
berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AA47FG5NRKADFOYTFWURTI3RNAHFRANCNFSM4J4HHKVA
.

Ada yang punya solusi kerja untuk ini? masih acara streaming dipanggil dua kali.

Hal ini masih menjadi masalah sampai hari ini, ada yang punya ide untuk ditangani?

saya membuat sebuah array.

const callList = [];

Ketika saya mendapat panggilan atau saya menelepon pengguna lain, pertama-tama saya periksa daftar itu di acara onStream dan jika panggilan itu tidak ada dalam daftar saya, lakukan stuf saya (tambahkan ke halaman elemen video atau apa pun).
Contoh di sini (saya menelepon pengguna lain dan jawaban pengguna lain dengan aliran):

        // make a call (userId is other users peer id)
    const call = peer.call(userId, myVideoElement.srcObject, { metadata: { userId: peer.id } });
    // create a video element
    const video = createVideoElement(); // this is my custom function for create a html video element, it returns a video element.
    // call on stream
    call.on('stream', remoteStream => {
            // check call list if call not in the list then add to list and page
            if(!callList[call.peer]){
                // add stream to video element
                video.srcObject = remoteStream;
                // show on page
                showVideoElemenetOnPage(video); // this is my custom function for append video element to another element on the page
                // add call objec to global object
                callList[call.peer] = call;
            }
    });

Ini dapat memecahkan masalah dua kali berjalan.

saya membuat sebuah array.

const callList = [];

Ketika saya mendapat panggilan atau saya menelepon pengguna lain, pertama-tama saya periksa daftar itu di acara onStream dan jika panggilan itu tidak ada dalam daftar saya, lakukan stuf saya (tambahkan ke halaman elemen video atau apa pun).
Contoh di sini (saya menelepon pengguna lain dan jawaban pengguna lain dengan aliran):

        // make a call (userId is other users peer id)
  const call = peer.call(userId, myVideoElement.srcObject, { metadata: { userId: peer.id } });
  // create a video element
  const video = createVideoElement(); // this is my custom function for create a html video element, it returns a video element.
  // call on stream
  call.on('stream', remoteStream => {
            // check call list if call not in the list then add to list and page
            if(!callList[call.peer]){
                // add stream to video element
                video.srcObject = remoteStream;
                // show on page
                showVideoElemenetOnPage(video); // this is my custom function for append video element to another element on the page
                // add call objec to global object
                callList[call.peer] = call;
            }
  });

Ini dapat memecahkan masalah dua kali berjalan.

Ini menyelesaikan masalah saya, terima kasih

setelah menggunakan metode di atas masih menerima dua kali.

const callList = [];

peer.on ('call', call => {
call.answer (myMedia);
// inisialisasi terima boolean untuk setiap pengguna baru
var accept = true;
call.on ('stream', data => {
console.log ("acceptcall");
// untuk menerima panggilan hanya sekali untuk pengguna lain
jika (terima) {
addvideoElement (false, data);
terima = salah;
}
});
});

socket.on ('terhubung-pengguna', ID => {

var call = peer.call(ID,myMedia);

    call.on('stream', data => { 
        if(!callList.includes(ID)){
            console.log("user-connected");
            addvideoElement(false,data);
            callList.push(ID);
        }

    });

});

Jika Anda mendapatkan masalah aliran ganda, cobalah untuk membuat elemen video sebelum call.on('stream', data => { baris. @dimas_jogja

Sekarang berfungsi seperti yang diharapkan

Masalah yang sama di sini :( Saya melakukan pekerjaan untuk mengabaikan peristiwa kedua

Apakah halaman ini membantu?
0 / 5 - 0 peringkat