Peerjs: Como faço para ligar sem um MediaStream?

Criado em 8 jan. 2016  ·  5Comentários  ·  Fonte: peers/peerjs

Eu tenho um caso de uso onde:

  • existem duas pessoas, Apresentador e Visualizador
  • O apresentador abre a página e obtém um ID de par
  • O apresentador envia esse ID de peer para o visualizador
  • O visualizador usa esse ID de par para chamar o apresentador
  • O apresentador envia sua tela compartilhada para o visualizador

Para este caso de uso eu preciso, para o lado do Visualizador:

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

Isso não funciona, porque peer.call(presenterPeerID, null) retorna undefined .

Como faço para ligar sem enviar um MediaStream?

Comentários muito úteis

Você pode criar um fluxo vazio com qualquer faixa ou com ambas:

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

Todos 5 comentários

Assine esta edição

Você tentou iniciar a chamada do apresentador para o visualizador, fornecendo aos apresentadores mediastream na chamada e respondendo a chamada com null como mediastream?

Também espero fazer o mesmo. Veja a edição nº 158

+1

Você pode criar um fluxo vazio com qualquer faixa ou com ambas:

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);
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

geraldsamosir picture geraldsamosir  ·  6Comentários

furozen picture furozen  ·  9Comentários

jameshfisher picture jameshfisher  ·  6Comentários

veezo2007pk picture veezo2007pk  ·  7Comentários

fresheneesz picture fresheneesz  ·  10Comentários