Peerjs: Wie telefoniere ich ohne MediaStream?

Erstellt am 8. Jan. 2016  ·  5Kommentare  ·  Quelle: peers/peerjs

Ich habe einen Anwendungsfall, wo:

  • Es gibt zwei Personen, Präsentator und Zuschauer
  • Der Moderator öffnet die Seite und erhält eine Peer-ID
  • Der Moderator sendet diese Peer-ID an den Zuschauer
  • Der Zuschauer verwendet diese Peer-ID, um den Moderator anzurufen
  • Der Moderator sendet seinen freigegebenen Bildschirm an den Zuschauer

Für diesen Anwendungsfall benötige ich für die Viewer-Seite:

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

Das funktioniert nicht, weil peer.call(presenterPeerID, null) undefined $ zurückgibt.

Wie rufe ich an, ohne einen MediaStream zu senden?

Hilfreichster Kommentar

Sie können einen leeren Stream mit jeder Spur oder mit beiden erstellen:

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);

Alle 5 Kommentare

Abonnieren Sie diese Ausgabe

Haben Sie versucht, den Anruf vom Moderator zum Zuschauer zu initiieren, den Mediastream des Moderators im Anruf bereitzustellen und den Anruf mit null als Mediastream zu beantworten?

Ich hoffe auch, das Gleiche zu tun. Siehe Ausgabe Nr. 158

+1

Sie können einen leeren Stream mit jeder Spur oder mit beiden erstellen:

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);
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen