Partage d'écran - aide

Bonjour,

Je tente de faire un partage d’écran lors d’un appel Vidéo.

Actuellement, j’arrive bien a récupérer le MediaStream de mon navigateur et à l’enregistrer dans mon localStream.
Ce qui fait que je vois bien ce que je partage.

En revanche, la personne distante ne vois pas mon partage.

De plus, je ne comprend pas bien comment utiliser les fonctions du SDK:

async startScreenSharing(constraints: Record<string, any>, callSession?: CallSession): Promise<MediaStream | null> {
    return this.phone?.startScreenSharing(constraints, callSession) || null;
  }

  stopScreenSharing(callSession?: CallSession, restoreLocalStream = true): Promise<OutgoingInviteRequest | void | null> {
    return this.phone ? this.phone.stopScreenSharing(restoreLocalStream, callSession) : Promise.resolve();
  }

startScreenSharing est une promise qui ne renvoi pas de resolve.
J’aurais pensé que ça me permettrait de mettre à jour mon callSession.screensharing = true

et seul stopScreenSharing resolve la promise précédente.

Et je ne vois pas de websocket qui pourrait être reçu par le destinataire lorsque je partage mon écran.

Je ne vois pas de SetMediaStream ou autre fonction du genre.

Je ne sais donc pas où injecter mon stream pour qu’il soit reçu par le destinataire.

Pour l’instant, mon code ressemble à ça:

const startScreenSharing = (callSession) => {
    navigator.mediaDevices.getDisplayMedia({}).then((stream) => {
      setLocalStream(stream);
      Wazo.Phone.startScreenSharing({audio: true, video: true}, callSession)
    });
    
  }

const stopScreenSharing = callSession => {
    Wazo.Phone.stopScreenSharing(callSession, true)
  }

Un peu d’aide et d’explication serait la bienvenue !

cheers !

Hello Julien,
Il n’y a pas besoin de faire de getUserMedia lorsqu’on appel startScreenSharing, il est déjà fait par le SDK.

Wazo.Phone.startScreenSharing retourne la valeure de WebRTCPhone.startScreenSharing qui retourne le mediaStream du flux vidéo de l’écran.

Une fois le flux créé, le SDK va envoyer un re-INVITE pour envoyer le flux vide via la Websocket Asterisk.

C’est l’évémenent ON_SHARE_SCREEN_STARTED qui te renverra une callSession avec le screensharing = true.

Manu

1 Like

Hello,

hum, c’est pas clair tout ça :stuck_out_tongue_winking_eye:

ça attend des constraints

Wazo.Phone.startScreenSharing({
      audio: true,
      video: true
    }, callSession);

Mais il me faut bien récupérer le stream avec

navigator.mediaDevices.getDisplayMedia({ audio: true, video: true })

Du coup, je fais quelques choses comme ça:

const startScreenSharing = async (callSession) => {
    // récupère mon partage d'écran du navigateur
    let myStream;
    await navigator.mediaDevices.getDisplayMedia({ audio: true, video: true }).then((stream) => {
        myStream = stream;
    });

    // récupère la track audio et vidéo
    const audioTrack = myStream.getAudioTracks()[0];
    const videoTrack = myStream.getVideoTracks()[0];
    
    // lance le partage
    const share = await Wazo.Phone.startScreenSharing({
      audio: true,
      video: true
    }, callSession);

    // je tente d'ajouter mon stream à celui de Wazo
    myStream.getTracks().forEach(track => {
        share.addTrack(track, share);
    });

};

Mais à ce niveau, le partage n’est pas visible par le destinataire (peer).

j’ai tenté

const share = await Wazo.Phone.startScreenSharing(videoTrack, callSession);

ce qui me renvoit l’erreur:

TypeError: Failed to execute 'addTrack' on 'MediaStream': parameter 1 is not of type 'MediaStreamTrack'

Je pense que la démarche est bonne, mais que l’erreur se trouve à la fin:

myStream.getTracks().forEach(track => {
        share.addTrack(track, share);
    });

bref, ça ne fonctionne toujours pas :upside_down_face:

cheers

ps: bonne fêtes !

Hello,

un petit up, car je n’avance pas sur ce point.

Comment envoyer autre chose qu’un flux vide, c’est bien mon soucis :slight_smile: