SDK PHP de l'API Video de Vonage

Le SDK PHP d'OpenTok propose des méthodes permettant de :

Installation

Compositeur (recommandé) :

Composer aide à gérer les dépendances pour les projets PHP. Plus d'informations ici : http://getcomposer.org

Ajouter ce paquet (opentok/opentok) à votre composer.json ou exécutez la commande suivante sur la ligne de commande ligne de commande :

composer require opentok/opentok ^4.0

Utilisation

Initialisation

Ce paquet suit le PSR-4 Norme d'autochargement. Si vous utilisez Composer pour l'installation, il vous suffit d'inclure l'autochargeur généré :

require "<projectpath>/vendor/autoload.php";

Une fois les fichiers du SDK chargés, vous initialisez un OpenTok\OpenTok objet avec votre propre API Clé et secret API.

use OpenTok\OpenTok;

$opentok = new OpenTok($apiKey, $apiSecret);

Options d'initialisation

Les OpenTok\OpenTok Ces objets permettent simplement de modifier certaines valeurs en cas de besoins particuliers, par exemple lorsqu'il faut pointer vers un centre de données différent ou modifier le délai d'expiration du client HTTP sous-jacent. Dans ces situations, vous pouvez passer un tableau d'options supplémentaires en tant que troisième paramètre.

Nous proposons les options suivantes :

  • apiUrl - Modifier le domaine vers lequel pointe le SDK. Utile pour sélectionner un centre de données spécifique ou de pointer vers une version fictive de l'API à des fins de test.
  • client - Client API personnalisé qui hérite de OpenTok\Utils\Client, utile pour personnaliser un client HTTP
  • timeout - Modifier le délai d'expiration HTTP par défaut, qui est défini par défaut sur « indéfiniment ». Vous pouvez indiquer un nombre de secondes pour modifier ce délai.
use OpenTok\OpenTok;
use MyCompany\CustomOpenTokClient;

$options = [
    'apiUrl' => 'https://custom.domain.com/',
    'client' => new CustomOpenTokClient(),
    'timeout' => 10,
]
$opentok = new OpenTok($apiKey, $apiSecret, $options);

Création de sessions

Pour créer une session OpenTok, utilisez la commande createSession($options) de la méthode OpenTok\OpenTok classe. Les $options est un tableau facultatif utilisé pour spécifier les éléments suivants :

  • Définit si la session utilisera le routeur multimédia OpenTok ou tentera d'envoyer les flux directement entre les clients.

  • Définir si la session créera automatiquement des archives (implique l'utilisation d'une session routée)

  • Spécification d'un indice de localisation.

Les getSessionId() de la méthode OpenTok\Session Cette instance renvoie l'identifiant de session, que vous utilisez pour identifier la session dans les bibliothèques client OpenTok.

use OpenTok\MediaMode;
use OpenTok\ArchiveMode;

// Create a session that attempts to use peer-to-peer streaming:
$session = $opentok->createSession();

// A session that uses the OpenTok Media Router, which is required for archiving:
$session = $opentok->createSession(array( 'mediaMode' => MediaMode::ROUTED ));

// A session with a location hint:
$session = $opentok->createSession(array( 'location' => '12.34.56.78' ));

// An automatically archived session:
$sessionOptions = array(
    'archiveMode' => ArchiveMode::ALWAYS,
    'mediaMode' => MediaMode::ROUTED
);
$session = $opentok->createSession($sessionOptions);


// Store this sessionId in the database for later use
$sessionId = $session->getSessionId();

Générer des jetons

Une fois qu'une session est créée, vous pouvez commencer à générer des jetons que les clients utiliseront pour se connecter à la session. Vous pouvez générer un jeton soit en appelant la fonction generateToken($sessionId, $options) de la méthode OpenTok\OpenTok classe, ou en appelant la generateToken($options) sur la méthode OpenTok\Session instance après sa création. Le $options Le paramètre est un tableau facultatif permettant de définir le rôle, la durée de validité et les données de connexion du jeton. Pour le contrôle de la mise en page dans les archives et les diffusions, il est également possible de définir la liste initiale des classes de mise en page des flux publiés à partir des connexions utilisant ce jeton.

use OpenTok\Session;
use OpenTok\Role;

// Generate a Token from just a sessionId (fetched from a database)
$token = $opentok->generateToken($sessionId);
// Generate a Token by calling the method on the Session (returned from createSession)
$token = $session->generateToken();

// Set some options in a token
$token = $session->generateToken(array(
    'role'       => Role::MODERATOR,
    'expireTime' => time()+(7 * 24 * 60 * 60), // in one week
    'data'       => 'name=Johnny',
    'initialLayoutClassList' => array('focus')
));

Travailler avec des flux

Vous pouvez obtenir des informations sur un flux en appelant la fonction getStream($sessionId, $streamId) de la méthode OpenTok\OpenTok classe.

use OpenTok\Session;

// Get stream info from just a sessionId (fetched from a database)
$stream = $opentok->getStream($sessionId, $streamId);

// Stream properties
$stream->id; // string with the stream ID
$stream->videoType; // string with the video type
$stream->name; // string with the name
$stream->layoutClassList; // array with the layout class list

Vous pouvez obtenir des informations sur tous les flux d'une session en appelant la fonction listStreams($sessionId) de la méthode OpenTok\OpenTok classe.

use OpenTok\Session;

// Get list of streams from just a sessionId (fetched from a database)
$streamList = $opentok->listStreams($sessionId);

$streamList->totalCount(); // total count

Travailler avec les archives

Vous ne pouvez archiver que les sessions qui utilisent OpenTok Media Router (les sessions dont le mode multimédia est défini sur « routed »).

Vous pouvez lancer l'enregistrement d'une session OpenTok à l'aide de la commande startArchive($sessionId, $name) méthode de la OpenTok\OpenTok classe. Cela renverra un OpenTok\Archive par exemple. Le paramètre $archiveOptions Il s'agit d'un tableau facultatif qui permet d'attribuer un nom, de définir s'il faut enregistrer du son et/ou de la vidéo, de choisir le mode de sortie souhaité pour l'archive, ainsi que la résolution souhaitée le cas échéant. Notez que vous ne pouvez lancer une archive que sur une session à laquelle des clients sont connectés.

// Create a simple archive of a session
$archive = $opentok->startArchive($sessionId);


// Create an archive using custom options
$archiveOptions = array(
    'name' => 'Important Presentation',     // default: null
    'hasAudio' => true,                     // default: true
    'hasVideo' => true,                     // default: true
    'outputMode' => OutputMode::COMPOSED,   // default: OutputMode::COMPOSED
    'resolution' => '1280x720'              // default: '640x480'
);
$archive = $opentok->startArchive($sessionId, $archiveOptions);

// Store this archiveId in the database for later use
$archiveId = $archive->id;

Si vous réglez le outputMode à l'option OutputMode::INDIVIDUALEn revanche, si vous choisissez une résolution plus élevée, chaque flux de l'archive sera enregistré dans son propre fichier. Veuillez noter que vous ne pouvez pas spécifier la résolution lorsque vous définissez l'option outputMode à l'option OutputMode::INDIVIDUAL. Les OutputMode::COMPOSED (par défaut), tous les flux de l'archive sont enregistrés dans un seul fichier (composé).

Notez que vous pouvez également créer une session automatiquement archivée, en passant le paramètre ArchiveMode::ALWAYS en tant que archiveMode de la options passé dans le paramètre OpenTok->createSession() (voir "Création de sessions" ci-dessus).

Vous pouvez arrêter l'enregistrement d'une archive commencée à l'aide de la touche stopArchive($archiveId) de la méthode OpenTok\OpenTok objet. Vous pouvez également le faire à l'aide de la commande stop() de la méthode OpenTok\Archive instance.

// Stop an Archive from an archiveId (fetched from database)
$opentok->stopArchive($archiveId);
// Stop an Archive from an Archive instance (returned from startArchive)
$archive->stop();

Pour obtenir un OpenTok\Archive (et toutes les informations la concernant) à partir d'un ID d'archive, utilisez la commande getArchive($archiveId) de la méthode OpenTok\OpenTok classe.

$archive = $opentok->getArchive($archiveId);

Pour supprimer une archive, vous pouvez appeler le deleteArchive($archiveId) de la méthode OpenTok\OpenTok classe ou le delete() méthode d'un OpenTok\Archive instance.

// Delete an Archive from an archiveId (fetched from database)
$opentok->deleteArchive($archiveId);
// Delete an Archive from an Archive instance (returned from startArchive, getArchive)
$archive->delete();

Vous pouvez également obtenir une liste de toutes les archives que vous avez créées (jusqu'à 1000) avec votre clé API. Cette opération s'effectue à l'aide de la à l'aide de la fonction listArchives($offset, $count, $sessionId) de la méthode OpenTok/OpenTok classe. Les paramètres $offset, $countet $sessionId sont facultatifs et peuvent vous aider à parcourir les résultats par pages et à filtrer les données en fonction d'une session spécifique. Cela renverra une instance de la OpenTok\ArchiveList classe.

$archiveList = $opentok->listArchives();

// Get an array of OpenTok\Archive instances
$archives = $archiveList->getItems();
// Get the total number of Archives for this API Key
$totalCount = $archiveList->totalCount();

Pour les archives composées, vous pouvez modifier la mise en page de manière dynamique, en utilisant la fonction setArchiveLayout($archiveId, $layoutType) méthode :

use OpenTok\OpenTok;

$layout = Layout::getPIP(); // Or use another get method of the Layout class.
$opentok->setArchiveLayout($archiveId, $layout);

Vous pouvez définir la classe de mise en page initiale pour les flux d'un client en définissant la propriété layout lorsque lorsque vous créez le jeton pour le client, à l'aide de l'option OpenTok->generateToken() méthode ou la Session->generateToken() méthode. Et vous pouvez modifier les classes de mise en page d'un flux en appelant la méthode OpenTok->updateStream() méthode.

La définition de la mise en page des archives composées est facultative. Par défaut, les archives composées utilisent la mise en page "best fit" (voir Personnalisation de la mise en page vidéo pour les composées).

Pour plus d'informations sur l'archivage, consultez le Archivage OpenTok guide du développeur.

Travailler avec des diffusions

Vous ne pouvez lancer des diffusions en direct que pour les sessions utilisant OpenTok Media Router (sessions dont le mode multimédia est défini sur « routed »).

Lancez la diffusion en direct d'une session OpenTok à l'aide de la startBroadcast($sessionId, $options) de la méthode OpenTok\OpenTok classe. Cela renverra un OpenTok\Broadcast par exemple. Le $options Le paramètre est un tableau servant à définir les flux de diffusion et à attribuer des options de diffusion telles que la mise en page, la durée maximale, la résolution, etc.

// Define options for the broadcast
$options = [
  'layout' => Layout::getBestFit(),
  'maxDuration' => 5400,
  'resolution' => '1280x720',
  'output' => [
    'hls' => [
      'dvr' => true,
      'lowLatency' => false
    ],
    'rtmp' => [
      [
        'id' => 'foo',
        'serverUrl' => 'rtmps://myfooserver/myfooapp',
        'streamName' => 'myfoostream'
      ],
      [
        'id' => 'bar',
        'serverUrl' => 'rtmps://myfooserver/mybarapp',
        'streamName' => 'mybarstream'
      ],
    ]
  ]
];

// Start a live streaming broadcast of a session
$broadcast = $opentok->startBroadcast($sessionId, $options);

// Store the broadcast ID in the database for later use
$broadcastId = $broadcast->id;

Vous pouvez interrompre la diffusion en direct à l'aide de la stopBroadcast($broadcastId) de la méthode OpenTok\OpenTok objet. Vous pouvez également le faire à l'aide de la commande stop() de la méthode OpenTok\Broadcast instance.

// Stop a broadcast from an broadcast ID (fetched from database)
$opentok->stopBroadcast($broadcastId);

// Stop a broadcast from an Broadcast instance (returned from startBroadcast)
$broadcast->stop();

Pour obtenir un OpenTok\Broadcast instance (et toutes les informations la concernant) à partir d'un identifiant de diffusion, utilisez la commande getBroadcast($broadcastId) de la méthode OpenTok\OpenTok classe.

$broadcast = $opentok->getBroadcast($broadcastId);

Vous pouvez modifier la mise en page de manière dynamique à l'aide de la commande OpenTok->updateBroadcastLayout($broadcastId, $layout) méthode :

use OpenTok\OpenTok;

$layout = Layout::getPIP(); // Or use another get method of the Layout class.
$opentok->updateBroadcastLayout($broadcastId, $layout);

Vous pouvez utiliser le Layout classe permettant de définir les types de mise en page : Layout::getHorizontalPresentation(), Layout::getVerticalPresentation(), Layout::getPIP(), Layout::getBestFit(), Layout::createCustom().

$layoutType = Layout::getHorizontalPresentation();
$opentok->setArchiveLayout($archiveId, $layoutType);

// For custom Layouts, you can do the following
$options = array(
    'stylesheet' => 'stream.instructor {position: absolute; width: 100%;  height:50%;}'
);

$layoutType = Layout::createCustom($options);
$opentok->setArchiveLayout($archiveId, $layoutType);

Vous pouvez également définir la disposition du partage d'écran en appelant la fonction setScreenshareType() méthode sur un objet de mise en page.

$layout = Layout::getBestFit(); // Other types are not currently supported
$layout->setScreenshareType(Layout::LAYOUT_VERTICAL);

Vous pouvez définir la classe de mise en page initiale pour les flux d'un client en définissant la propriété layout lorsque lorsque vous créez le jeton pour le client, à l'aide de l'option OpenTok->generateToken() méthode ou la Session->generateToken() méthode. Et vous pouvez modifier les classes de mise en page d'un flux en appelant la méthode OpenTok->updateStream() méthode.

La configuration de la mise en page des diffusions en direct est facultative. Par défaut, les diffusions utilisent la mise en page « best fit » (voir Configuration de la disposition vidéo pour les diffusions en direct OpenTok).

Pour plus d'informations sur les diffusions en direct, consultez la Diffusions en direct avec OpenTok guide du développeur.

Forcer un client à se déconnecter

Votre serveur d'applications peut déconnecter un client d'une session OpenTok en appelant la méthode forceDisconnect($sessionId, $connectionId) méthode de la OpenTok\OpenTok classe.

use OpenTok\OpenTok;

// Force disconnect a client connection
$opentok->forceDisconnect($sessionId, $connectionId);

Forcer les clients d'une session à couper le son publié

Vous pouvez forcer l'éditeur d'un flux spécifique à cesser de publier de l'audio à l'aide de la commande Opentok.forceMuteStream($sessionId, $stream) méthode.

Vous pouvez forcer l'éditeur de tous les flux d'une session (à l'exception d'une liste optionnelle de flux) à cesser de publier de l'audio à l'aide de la commande Opentok.forceMuteAll($sessionId, $excludedStreamIds) et de la méthode de la sourdine. Vous pouvez ensuite désactiver la mise en sourdine de la session en appelant la méthode Opentok.DisableForceMute(sessionId) ou Opentok.DisableForceMuteAsync(sessionId) méthode.

Envoi de signaux

Une fois qu'une session est créée, vous pouvez envoyer des signaux à tous les participants à la session ou à une connexion spécifique. Vous pouvez envoyer un signal en appelant la fonction signal($sessionId, $payload, $connectionId) de la méthode OpenTok\OpenTok classe.

Les $sessionId est l'identifiant de la session.

Les $payload Le paramètre est un tableau associatif permettant de définir les éléments suivants :

  • data (chaîne de caractères) -- La chaîne de caractères contenant les données du signal. Vous pouvez envoyer jusqu'à 8 ko.

  • type (chaîne de caractères) -- — (Facultatif) La chaîne de caractères indiquant le type du signal. Vous pouvez envoyer jusqu'à 128 caractères ; seuls les caractères suivants sont autorisés : A-Z, a-z, les Numbers (0-9), « - », « _ » et « ~ ».

Les $connectionId est une chaîne de caractères facultative utilisée pour spécifier l'identifiant de connexion d'un client connecté à la session. d'un client connecté à la session. Si vous spécifiez cette valeur, le signal est envoyé au client spécifié. au client spécifié. Sinon, le signal est envoyé à tous les clients connectés à la session.

use OpenTok\OpenTok;

// Send a signal to a specific client
$signalPayload = array(
    'data' => 'some signal message',
    'type' => 'signal type'
);
$connectionId = 'da9cb410-e29b-4c2d-ab9e-fe65bf83fcaf';
$opentok->signal($sessionId, $signalPayload, $connectionId);

// Send a signal to everyone in the session
$signalPayload = array(
    'data' => 'some signal message',
    'type' => 'signal type'
);
$opentok->signal($sessionId, $signalPayload);

Pour plus d'informations, voir le Guide du développeur sur la signalisation OpenTok.

Travailler avec SIP Interconnect

Vous pouvez ajouter un flux audio uniquement provenant d'une passerelle SIP tierce externe à l'aide de la fonctionnalité « Interconnexion SIP ». Pour cela, vous devez disposer d'un URI SIP, de l'identifiant de session auquel vous souhaitez ajouter le flux audio uniquement , ainsi que d'un jeton permettant de se connecter à cet identifiant de session.

Pour lancer un appel SIP, composez le dial($sessionId, $token, $sipUri, $options) de la méthode OpenTok\OpenTok classe :

$sipUri = 'sip:user@sip.partner.com;transport=tls';

$options = array(
  'headers' =>  array(
    'X-CUSTOM-HEADER' => 'headerValue'
  ),
  'auth' => array(
    'username' => 'username',
    'password' => 'password'
  ),
  'secure' => true,
  'from' => 'from@example.com'
);

$opentok->dial($sessionId, $token, $sipUri, $options);

Pour plus d'informations, voir le Guide du développeur OpenTok SIP Interconnect.

Utilisation d'Audio Connector

Vous pouvez lancer un Connecteur audio WebSocket en appelant la fonction connectAudio() de la méthode OpenTok\OpenTok classe.

Exigences

Vous avez besoin d'une clé API OpenTok et d'un secret API, que vous pouvez obtenir en vous connectant à votre Compte Video API de Vonage.

Le SDK PHP d'OpenTok nécessite PHP 7.2 ou une version ultérieure.

Notes de mise à jour

Voir le Communiqués pour plus de détails.

Modifications importantes depuis la version 2.2.0

Modifications apportées à la version 2.2.1 :

Le paramètre par défaut pour le createSession() La méthode consiste à créer une session avec le mode multimédia défini sur « relayed ». Dans les versions précédentes du SDK, le paramètre par défaut consistait à utiliser le routeur multimédia OpenTok (mode multimédia défini sur « routed »). Dans une session en mode « relayed », les clients tentent d’échanger des flux directement entre eux (peer-to-peer) ; si les clients ne parviennent pas à se connecter en raison de restrictions de pare-feu, la session utilise le serveur TURN d’OpenTok pour relayer les flux audio et vidéo.

Nouveautés de la version 2.2.0 :

Cette version du SDK permet de travailler avec les archives OpenTok.

Les noms de nombreuses méthodes de l'API ont changé. De nombreux noms de méthodes ont été modifiés pour adopter la notation « camel case », notamment les suivants :

  • \OpenTok\OpenTok->createSession()
  • \OpenTok\OpenTok->generateToken()

Notez également que le options du paramètre OpenTok->createSession() La méthode dispose d'un mediaMode propriété au lieu d'un p2p propriété.

La classe API_Config a été supprimée. Enregistrez votre clé API OpenTok et votre secret API dans le code, en dehors des fichiers du SDK.