Vonage Video API PHP SDK

Das OpenTok PHP-SDK bietet Methoden für:

Einrichtung

Komponist (empfohlen):

Composer hilft bei der Verwaltung von Abhängigkeiten für PHP-Projekte. Mehr Informationen finden Sie hier: http://getcomposer.org

Dieses Paket hinzufügen (opentok/opentok) zu Ihrem composer.json Datei, oder führen Sie folgendes in der Befehlszeile aus:

composer require opentok/opentok ^4.0

Verwendung

Initialisierung

Dieses Paket folgt dem PSR-4 Autoloading-Standard. Wenn Sie die Installation über Composer vornehmen, müssen Sie lediglich den generierten Autoloader einbinden:

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

Sobald die Dateien des SDK geladen sind, initialisieren Sie ein OpenTok\OpenTok Objekt mit Ihrer eigenen API Schlüssel und API-Geheimnis.

use OpenTok\OpenTok;

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

Initialisierungsoptionen

Die OpenTok\OpenTok Objekte ermöglichen lediglich einige Überschreibungen von Werten, wenn besondere Anforderungen bestehen, beispielsweise wenn auf ein anderes Rechenzentrum verwiesen werden muss oder die Zeitüberschreitung des zugrunde liegenden HTTP-Clients geändert werden muss. Für diese Fälle können Sie ein Array mit zusätzlichen Optionen als dritten Parameter übergeben.

Wir bieten folgende Optionen an:

  • apiUrl - Ändern Sie die Domäne, auf die das SDK verweist. Nützlich, wenn Sie ein bestimmtes Rechenzentrum auswählen müssen oder auf eine Scheinversion der API zum Testen verweisen muss
  • client - Benutzerdefinierter API-Client, der von … abgeleitet ist OpenTok\Utils\Client, nützlich für die Anpassung eines HTTP-Clients
  • timeout - Ändern Sie das Standard-HTTP-Timeout, das standardmäßig auf „unbegrenzt“ eingestellt ist. Sie können eine Anzahl von Sekunden angeben, um das Timeout anzupassen.
use OpenTok\OpenTok;
use MyCompany\CustomOpenTokClient;

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

Sitzungen erstellen

Um eine OpenTok-Sitzung zu erstellen, verwenden Sie die createSession($options) Methode der OpenTok\OpenTok Klasse. Die Website $options ist ein optionales Array, mit dem Folgendes angegeben werden kann:

  • Festlegen, ob die Sitzung den OpenTok Media Router verwendet oder versucht, Streams direkt zwischen den Clients zu übertragen.

  • Einstellung, ob die Sitzung automatisch Archive erstellen soll (impliziert die Verwendung einer gerouteten Sitzung)

  • Angabe eines Ortshinweises.

Die getSessionId() Methode der OpenTok\Session Die Instanz gibt die Sitzungs-ID zurück, mit der Sie die Sitzung in den OpenTok-Client-Bibliotheken identifizieren können.

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

Token generieren

Sobald eine Sitzung erstellt ist, können Sie mit der Generierung von Token beginnen, die die Clients bei der Verbindung mit der Sitzung verwenden können. Sie können ein Token entweder durch Aufruf der Funktion generateToken($sessionId, $options) Methode der OpenTok\OpenTok Klasse oder durch Aufruf der generateToken($options) Methode auf der OpenTok\Session Instanz nach deren Erstellung. Die $options „parameter“ ist ein optionales Array, mit dem die Rolle, die Gültigkeitsdauer und die Verbindungsdaten des Tokens festgelegt werden. Zur Steuerung des Layouts in Archiven und Übertragungen kann zudem die anfängliche Liste der Layoutklassen für Streams festgelegt werden, die über Verbindungen mit diesem Token veröffentlicht werden.

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

Arbeiten mit Strömen

Sie können Informationen über einen Stream erhalten, indem Sie die getStream($sessionId, $streamId) Methode der OpenTok\OpenTok Klasse.

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

Sie können Informationen über alle Streams in einer Sitzung erhalten, indem Sie die listStreams($sessionId) Methode der OpenTok\OpenTok Klasse.

use OpenTok\Session;

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

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

Arbeiten mit Archiven

Sie können nur Sitzungen archivieren, die den OpenTok Media Router verwenden (Sitzungen, bei denen der Medienmodus auf „routed“ eingestellt ist).

Sie können die Aufzeichnung einer OpenTok-Sitzung über die startArchive($sessionId, $name) Methode der OpenTok\OpenTok Klasse. Dies gibt eine OpenTok\Archive Beispiel. Der Parameter $archiveOptions ist ein optionales Array und dient dazu, einen Namen festzulegen, zu bestimmen, ob Audio und/oder Video aufgezeichnet werden soll, den gewünschten Ausgabemodus für das Archiv sowie gegebenenfalls die gewünschte Auflösung. Beachten Sie, dass Sie ein Archiv nur in einer Sitzung starten können, mit der Clients verbunden sind.

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

Wenn Sie die Einstellung outputMode Option zu OutputMode::INDIVIDUALwird jeder Stream des Archivs in einer eigenen Datei aufgezeichnet. Bitte beachten Sie, dass Sie die Auflösung nicht angeben können, wenn Sie die Option outputMode Option zu OutputMode::INDIVIDUAL. Die OutputMode::COMPOSED (die Standardeinstellung) bewirkt, dass alle Streams im Archiv in einer einzigen (zusammengesetzten) Datei aufgezeichnet werden.

Beachten Sie, dass Sie auch eine automatisch archivierte Sitzung erstellen können, indem Sie in ArchiveMode::ALWAYS als die archiveMode Taste des options Parameter, der an die OpenTok->createSession() Methode (siehe "Erstellen von Sitzungen", oben).

Sie können die Aufzeichnung eines gestarteten Archivs mit der Taste stopArchive($archiveId) Methode der OpenTok\OpenTok Objekt. Sie können dies auch mithilfe der stop() Methode der OpenTok\Archive Instanz.

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

Um eine OpenTok\Archive Instanz (und alle zugehörigen Informationen) aus einer Archiv-ID zu erhalten, verwenden Sie die getArchive($archiveId) Methode der OpenTok\OpenTok Klasse.

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

Um ein Archiv zu löschen, können Sie die Funktion deleteArchive($archiveId) Methode der OpenTok\OpenTok Klasse oder die delete() Methode eines OpenTok\Archive Instanz.

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

Sie können auch eine Liste aller Archive abrufen, die Sie mit Ihrem API-Schlüssel erstellt haben (bis zu 1000). Dies geschieht mit der Funktion listArchives($offset, $count, $sessionId) Methode der OpenTok/OpenTok Klasse. Die Parameter $offset, $countund $sessionId sind optional und können Ihnen dabei helfen, die Ergebnisse zu paginieren und die Daten nach einer bestimmten Sitzung zu filtern. Dadurch wird eine Instanz der OpenTok\ArchiveList Klasse.

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

Bei zusammengesetzten Archiven können Sie das Layout dynamisch ändern, indem Sie die setArchiveLayout($archiveId, $layoutType) Methode:

use OpenTok\OpenTok;

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

Sie können die anfängliche Layoutklasse für die Streams eines Clients festlegen, indem Sie die layout Option, wenn Sie das Token für den Client erstellen, indem Sie die OpenTok->generateToken() Methode oder die Session->generateToken() Methode. Und Sie können die Layout-Klassen für einen Stream ändern, indem Sie die OpenTok->updateStream() Methode.

Die Festlegung des Layouts von zusammengestellten Archiven ist optional. Standardmäßig verwenden zusammengestellte Archive das "best fit" Layout (siehe Anpassen des Videolayouts für zusammengesetzte Archive).

Weitere Informationen zur Archivierung finden Sie unter OpenTok-Archivierung Leitfaden für Entwickler.

Arbeiten mit Broadcasts

Live-Streaming-Übertragungen können nur für Sitzungen gestartet werden, die den OpenTok Media Router verwenden (Sitzungen, bei denen der Medienmodus auf „routed“ eingestellt ist).

Starten Sie die Live-Streaming-Übertragung einer OpenTok-Sitzung mithilfe der startBroadcast($sessionId, $options) Methode der OpenTok\OpenTok Klasse. Dies gibt ein OpenTok\Broadcast Beispiel. Das $options Der Parameter ist ein Array, mit dem die Broadcast-Streams definiert und Broadcast-Optionen wie Layout, maxDuration, Auflösung und weitere festgelegt werden.

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

Sie können die Live-Übertragung über die stopBroadcast($broadcastId) Methode der OpenTok\OpenTok Objekt. Sie können dies auch mithilfe der stop() Methode der OpenTok\Broadcast Instanz.

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

Um eine OpenTok\Broadcast Instanz (und alle Informationen dazu) anhand einer Broadcast-ID abzurufen, verwenden Sie die getBroadcast($broadcastId) Methode der OpenTok\OpenTok Klasse.

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

Sie können das Layout dynamisch anpassen, indem Sie die OpenTok->updateBroadcastLayout($broadcastId, $layout) Methode:

use OpenTok\OpenTok;

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

Sie können die Layout Klasse zum Festlegen der Layout-Typen: 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);

Sie können das Layout für die Bildschirmfreigabe auch festlegen, indem Sie die Funktion setScreenshareType() Methode auf einem Layout-Objekt.

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

Sie können die anfängliche Layoutklasse für die Streams eines Clients festlegen, indem Sie die layout Option, wenn Sie das Token für den Client erstellen, indem Sie die OpenTok->generateToken() Methode oder die Session->generateToken() Methode. Und Sie können die Layout-Klassen für einen Stream ändern, indem Sie die OpenTok->updateStream() Methode.

Die Festlegung des Layouts für Live-Streaming-Übertragungen ist optional. Standardmäßig wird für Übertragungen das „Best-Fit“-Layout verwendet (siehe Konfiguration des Video-Layouts für OpenTok-Live-Streaming- Übertragungen).

Weitere Informationen zu Live-Streaming-Übertragungen finden Sie unter Live-Streaming-Übertragungen mit OpenTok Leitfaden für Entwickler.

Erzwingen der Verbindungstrennung eines Clients

Ihr Anwendungsserver kann einen Client von einer OpenTok-Sitzung trennen, indem er die forceDisconnect($sessionId, $connectionId) Methode der OpenTok\OpenTok Klasse.

use OpenTok\OpenTok;

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

Erzwingen, dass Clients in einer Sitzung die veröffentlichten Audiodaten stummschalten

Sie können den Herausgeber eines bestimmten Streams zwingen, die Veröffentlichung von Audio zu beenden, indem Sie die Opentok.forceMuteStream($sessionId, $stream) Methode.

Sie können den Herausgeber aller Streams in einer Sitzung (mit Ausnahme einer optionalen Liste von Streams) zwingen die Veröffentlichung von Audio zu beenden, indem Sie die Opentok.forceMuteAll($sessionId, $excludedStreamIds) Methode. Sie können dann den Stummschaltungsstatus der Sitzung deaktivieren, indem Sie die Methode Opentok.DisableForceMute(sessionId) oder Opentok.DisableForceMuteAsync(sessionId) Methode.

Senden von Signalen

Sobald eine Sitzung erstellt ist, können Sie Signale an alle Teilnehmer der Sitzung oder an eine bestimmte Verbindung senden. Sie können ein Signal senden, indem Sie die Funktion signal($sessionId, $payload, $connectionId) Methode der OpenTok\OpenTok Klasse.

Die $sessionId ist die Sitzungs-ID der Sitzung.

Die $payload Der Parameter ist ein assoziatives Array, mit dem Folgendes festgelegt wird: Folgendes:

  • data (Zeichenkette) – Die Datenzeichenkette für das Signal. Es können maximal 8 kB gesendet werden.

  • type (Zeichenkette) -- — (Optional) Die Typzeichenkette für das Signal. Es können maximal 128 Zeichen gesendet werden, wobei nur die folgenden Zeichen zulässig sind: A–Z, a–z, Numbers (0–9), „-“, „_“ und „~“.

Die $connectionId ist eine optionale Zeichenkette, die zur Angabe der Verbindungs-ID des eines mit der Sitzung verbundenen Clients anzugeben. Wenn Sie diesen Wert angeben, wird das Signal an den den angegebenen Client gesendet. Andernfalls wird das Signal an alle mit der Sitzung verbundenen Clients gesendet.

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

Weitere Informationen finden Sie in der OpenTok-Signalisierungs-Entwicklerhandbuch Leitfaden.

Arbeiten mit SIP Interconnect

Mithilfe der SIP-Interconnect-Funktion können Sie einen reinen Audio-Stream von einem externen SIP-Gateway eines Drittanbieters hinzufügen. Dazu benötigen Sie eine SIP-URI, die Sitzungs-ID, zu der Sie den reinen Audio-Stream hinzufügen möchten, sowie ein Token, um eine Verbindung zu dieser Sitzungs-ID herzustellen.

Um einen SIP-Anruf zu starten, rufen Sie die Nummer dial($sessionId, $token, $sipUri, $options) Methode der OpenTok\OpenTok Klasse:

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

Weitere Informationen finden Sie in der OpenTok SIP Interconnect – Entwicklerhandbuch.

Arbeiten mit Audio Connector

Sie können ein Audio-Anschluss WebSocket durch Aufruf der connectAudio() Methode der OpenTok\OpenTok Klasse.

Anforderungen

Sie benötigen einen OpenTok-API-Schlüssel und ein API-Geheimnis, die Sie erhalten, indem Sie sich bei Ihrem Vonage Video API-Konto.

Für das OpenTok PHP SDK ist PHP 7.2 oder höher erforderlich.

Anmerkungen zur Veröffentlichung

Siehe die Veröffentlichungen Seite für Details.

Wichtige Änderungen seit Version 2.2.0

Änderungen in Version 2.2.1:

Die Standardeinstellung für die createSession() Die Vorgehensweise besteht darin, eine Sitzung zu erstellen, bei der der Medienmodus auf „relayed“ eingestellt ist. In früheren Versionen des SDK war die Standardeinstellung die Verwendung des OpenTok Media Routers (Medienmodus auf „routed“ eingestellt). In einer „relayed“-Sitzung versuchen die Clients, Streams direkt untereinander zu übertragen (Peer-to-Peer); können die Clients aufgrund von Firewall-Einschränkungen keine Verbindung herstellen, nutzt die Sitzung den OpenTok-TURN-Server zur Weiterleitung der Audio- und Videostreams.

Änderungen in Version 2.2.0:

Diese Version des SDK bietet Unterstützung für die Arbeit mit OpenTok-Archiven.

Die Namen vieler Methoden der API haben sich geändert. Viele Methodennamen wurden auf CamelCase umgestellt, darunter die folgenden:

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

Beachten Sie außerdem, dass die options Parameter des OpenTok->createSession() Die Methode hat eine mediaMode Eigenschaft anstelle einer p2p Eigentum.

Die Klasse „API_Config“ wurde entfernt. Speichern Sie Ihren OpenTok-API-Schlüssel und Ihr API-Geheimnis im Code außerhalb der SDK-Dateien.