2017-10-15 2 views
2

J'ai eu un problème similaire mais je n'arrive pas à comprendre ce qui se passe ici. J'ai une page .Net qui contient toutes les méthodes TokBox pour l'abonnement. Je lance une nouvelle fenêtre (moniteur vidéo pour plusieurs flux), initialise les clients, stocke leurs clientSessions dans un tableau et affiche les flux souscrits dans un modèle de grille sur la page (dans cet exemple, en utilisant un seul client). Créer et initialiser chaque session client chaque fois que j'ouvre la page avec:TokBox Erreur: OT.Session: Impossible de se connecter, la session est déjà indéfinie

lstSessions[i] = opener.initializeClientSession(apiKey, sessionId, token, $('Player'+i), 'subscribe'); 

Dans la page Opener:

function initializeClientSession(apiKey, sessionId, token, container, myAction) { 
var clientSession = OT.initSession(apiKey, sessionId); 
console.log('initializeClientSession: ' + sessionId); 

clientSession.connect(token, function (error) { 
    if (error) { 
     console.log("ERROR: initializeClientSession: " + myAction + " " + error); 
    } 
    else { 
     console.log("clientSession connected: " + myAction + " " + clientSession.id); 

     switch(myAction) { 
      case "publish": 
       publishClientVideo(clientSession, container); 
       break; 
      case "subscribe": 
       subscribeClientVideo(clientSession, container); 
       break; 
      case "delay": 
       if (inPVM) publishClientVideo(clientSession, container); 
       break; 
     } 
    } 
}); 
return clientSession; 

}

function subscribeClientVideo(clientSession, container) { 
console.log("subscribeClientVideo: " + container.id + " " + clientSession.id); 

clientSession.on('streamCreated', function (event) { 
    console.log("streamCreated: " + event.stream.id); 
    clientSubscriber = clientSession.subscribe(event.stream, container, { 
     insertMode: 'append', 
     width: '100%', 
     height: '100%' 
    }, function (error) { 
     if (error) { 
      console.log("ERROR clientSession.subscribe: " + error); 
     } 
     else { 
      console.log("Client subscribed: inPVM = " + inPVM); 
     } 
    }); 

}); 

}

Je ferme la Moniteur vidéo et se désabonner des flux en utilisant:

function unsubscribeClientVideo(clientSession, container) { 
    console.log("unsubscribeClientVideo: " + clientSession.id + " " + contianer.id); 
    container.style.visibility = 'hidden'; 
    try { 
     clientSession.unsubscribe(clientSubscriber); 
    } 
    catch (e) { 
     console.log("ERROR unsubscribeClientVideo: " + e); 
    } 
} 

Cela fonctionne correctement la première fois que j'ouvre la page Video Monitor. Cependant, quand je l'essaie une seconde fois, j'obtiens l'erreur "OT.Session: Impossible de se connecter, la session est déjà indéfinie". À partir du journal de la console que je reçois:

initializeClientSession: 2_MX40NTk1MjgxMn5-MTUwODA2NzU5NzcxNH55WVIzNXNtREpLREl0bHlUTGxhcWJBOFV-fg 
clientSession connected: subscribe 2_MX40NTk1MjgxMn5-MTUwODA2NzU5NzcxNH55WVIzNXNtREpLREl0bHlUTGxhcWJBOFV-fg 
subscribeClientVideo: videoPlayer0 2_MX40NTk1MjgxMn5-MTUwODA2NzU5NzcxNH55WVIzNXNtREpLREl0bHlUTGxhcWJBOFV-fg 
streamCreated: e5ad9453-aa55-41ec-b150-d8dfd5b04875 
Client subscribed: inPVM = true 

Sur la deuxième tentative:

initializeClientSession: 2_MX40NTk1MjgxMn5-MTUwODA2NzU5NzcxNH55WVIzNXNtREpLREl0bHlUTGxhcWJBOFV-fg 
OT.Session: Cannot connect, the session is already undefined 

J'ai vérifié clientSession dans unsubscribeClientVideo et il dit qu'il est connecté. Le client actuel publie normalement sans erreurs ni avertissements. Alors, comment la "SESSION" peut-elle être indéfinie? Je n'ai pas touché à la "séance" que je connais. Évidemment, il y a quelque chose que je ne comprends vraiment pas ici. Toute aide grandement appréciée.

Répondre

2

Je suppose que l'avertissement "OT.Session: Impossible de se connecter, la session est déjà indéfini" est un peu trompeur. Dans votre fonction unsubscribeClientVideo, tout ce que vous faites est de vous désabonner à l'un des flux vidéo de l'abonné, mais vous êtes toujours connecté à la session en réalité. Bref, vous essayez de vous connecter à une session à laquelle vous êtes déjà connecté en exécutant deux fois la fonction clientSession.connect().

+0

Une correction d'une ligne! Je ne peux pas vous dire combien de temps j'ai essayé de comprendre cela. J'ai simplement ajouté clientSession.disconnect(); dans la fonction de dépublication et tout va bien. Ce message était horrible! .. m'a envoyé totalement dans la mauvaise direction. Merci pour la clarification! – Velocedge

+0

Vous êtes les bienvenus! :) – Utkarsh