Peerjs: Bagaimana cara menelepon tanpa MediaStream?

Dibuat pada 8 Jan 2016  ·  5Komentar  ·  Sumber: peers/peerjs

Saya memiliki kasus penggunaan di mana:

  • ada dua orang, Presenter dan Viewer
  • Presenter membuka halaman dan mendapatkan ID rekan
  • Presenter mengirimkan ID rekan itu ke Pemirsa
  • Pemirsa menggunakan ID rekan itu untuk memanggil Presenter
  • Presenter mengirimkan layar bersamanya ke pemirsa

Untuk kasus penggunaan ini saya perlu, untuk sisi Viewer:

var call = peer.call(presenterPeerID, null);
call.on('stream', function(theirWebcamStream) {
  showWebcamStream(theirWebcamStream);
});

Ini tidak berhasil, karena peer.call(presenterPeerID, null) mengembalikan undefined .

Bagaimana cara menelepon tanpa mengirim MediaStream?

Komentar yang paling membantu

Anda dapat membuat aliran kosong dengan trek apa pun, atau dengan keduanya:

export const createEmptyAudioTrack = () => {
  const ctx = new AudioContext();
  const oscillator = ctx.createOscillator();
  const dst = oscillator.connect(ctx.createMediaStreamDestination());
  oscillator.start();
  const track = dst.stream.getAudioTracks()[0];
  return Object.assign(track, { enabled: false });
};

export const createEmptyVideoTrack = ({ width, height }) => {
  const canvas = Object.assign(document.createElement('canvas'), { width, height });
  canvas.getContext('2d').fillRect(0, 0, width, height);

  const stream = canvas.captureStream();
  const track = stream.getVideoTracks()[0];

  return Object.assign(track, { enabled: false });
};

...

const audioTrack = createEmptyAudioTrack();
const videoTrack = createEmptyVideoTrack({ width:640, height:480 });
const mediaStream = new MediaStream([audioTrack, videoTrack]);

peer.call('id', mediaStream);

Semua 5 komentar

Berlangganan edisi ini

Sudahkah Anda mencoba memulai panggilan dari presenter ke penonton, menyediakan mediastream presenter dalam panggilan dan menjawab panggilan dengan null sebagai mediastream?

Saya juga berharap melakukan hal yang sama. Lihat edisi #158

+1

Anda dapat membuat aliran kosong dengan trek apa pun, atau dengan keduanya:

export const createEmptyAudioTrack = () => {
  const ctx = new AudioContext();
  const oscillator = ctx.createOscillator();
  const dst = oscillator.connect(ctx.createMediaStreamDestination());
  oscillator.start();
  const track = dst.stream.getAudioTracks()[0];
  return Object.assign(track, { enabled: false });
};

export const createEmptyVideoTrack = ({ width, height }) => {
  const canvas = Object.assign(document.createElement('canvas'), { width, height });
  canvas.getContext('2d').fillRect(0, 0, width, height);

  const stream = canvas.captureStream();
  const track = stream.getVideoTracks()[0];

  return Object.assign(track, { enabled: false });
};

...

const audioTrack = createEmptyAudioTrack();
const videoTrack = createEmptyVideoTrack({ width:640, height:480 });
const mediaStream = new MediaStream([audioTrack, videoTrack]);

peer.call('id', mediaStream);
Apakah halaman ini membantu?
0 / 5 - 0 peringkat