Vonage Video API .NET SDK

OpenTok .NET SDK には、以下の機能を実現するためのメソッドが用意されています:

インストール

NuGet(推奨):

を使用している。 パッケージマネージャーコンソール:

PM> Install-Package OpenTok

手動で:

最新リリースを以下からダウンロードしてください。 リリース情報ページ. ファイルを解凍し、 OpenTok.dll、依存するアセンブリ、および関連ファイルを 自身のプロジェクトに取り込みます。

使用方法

初期化

をインポートします OpenTokSDK OpenTokオブジェクトを使用するすべてのファイルに名前空間を定義します。その後、 OpenTokSDK.OpenTok 独自のAPIキーとAPIシークレットを使用してオブジェクトを作成します。

using OpenTokSDK;

// ...

int ApiKey = 000000; // YOUR API KEY
string ApiSecret = "YOUR API SECRET";
var OpenTok = new OpenTok(ApiKey, ApiSecret);

リクエストのユーザーエージェント値を上書きする

各リクエストで渡されるユーザーエージェントの値に、独自の値を追加するかどうかを決めることができます。

var OpenTok = new OpenTok(ApiKey, ApiSecret);
OpenTok.SetCustomUserAgent(customUserAgent);

カスタム値が設定されている場合、ユーザーエージェントは次の形式に従います: Opentok-DotNet-SDK/{version}/{customValue}.

セッションの作成

OpenTokセッションを作成するには、 OpenTok インスタンスの CreateSession(string location, MediaMode mediaMode, ArchiveMode archiveMode) または CreateSessionAsync(string location, MediaMode mediaMode, ArchiveMode archiveMode) メソッド。各パラメータはオプションであり、必要がない場合は省略可能です。それらは以下の通りです:

  • string location : 位置情報のヒントとして使用される IPv4 アドレス。(デフォルト: "")

  • MediaMode mediaMode : セッションで OpenTok Media Router を使用するか (MediaMode.ROUTED)、あるいはクライアント間でストリームを直接送信しようとするか (MediaMode.RELAYED、デフォルト)を指定します。

  • ArchiveMode archiveMode セッションを自動的にアーカイブするか(ArchiveMode.ALWAYS)、しないか(ArchiveMode.MANUAL。 (ArchiveMode.ALWAYS)か、そうでないか(ArchiveMode.MANUAL、デフォルト)を指定します。

戻り値は OpenTokSDK.Session オブジェクトのことである。その Id このプロパティは、 永続ストア(データベースなど)に保存できる識別子を取得するのに役立ちます。

// Create a session that will attempt to transmit streams directly between clients
var session = OpenTok.CreateSession();
// Store this sessionId in the database for later use:
string sessionId = session.Id;

// Create a session that uses the OpenTok Media Router (which is required for archiving)
var session = OpenTok.CreateSession(mediaMode: MediaMode.ROUTED);
// Store this sessionId in the database for later use:
string sessionId = session.Id;

// Create an automatically archived session:
var session = OpenTok.CreateSession(mediaMode: MediaMode.ROUTED, ArchiveMode.ALWAYS);
// Store this sessionId in the database for later use:
string sessionId = session.Id;

トークンの生成

セッションが作成されると、クライアントがそのセッションに接続する際に使用するトークンの生成を開始できます。 トークンは、 OpenTokSDK.OpenTok インスタンスの GenerateToken(string sessionId, Role role, double expireTime, string data) メソッド、または OpenTokSDK.Session インスタンスの GenerateToken(Role role, double expireTime, string data) メソッドを作成した後、そのメソッドを呼び出します。最初のメソッドでは、 sessionId は必須であり、残りのパラメータはすべてオプションです。2番目のメソッドでは、すべてのパラメータがオプションです。


// Generate a token from a sessionId (fetched from database)
string token = OpenTok.GenerateToken(sessionId);

// Generate a token by calling the method on the Session (returned from CreateSession)
string token = session.GenerateToken();

// Set some options in a token
double inOneWeek = (DateTime.UtcNow.Add(TimeSpan.FromDays(7)).Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
string token = session.GenerateToken(role: Role.MODERATOR, expireTime: inOneWeek, data: "name=Johnny");

アーカイブとの取り組み

OpenTokセッションの録画は、以下の方法を使用して開始できます。 OpenTokSDK.OpenTok インスタンスの StartArchive(sessionId, name, hasVideo, hasAudio, outputMode, resolution) メソッド。これにより、 OpenTokSDK.Archive インスタンス。パラメータ name これはオプションであり、 アーカイブに名前を割り当てるために使用されます。アーカイブを開始できるのは、クライアントが接続しているセッションのみである点に注意してください。

// A simple Archive (without a name)
var archive = OpenTok.StartArchive(sessionId);

または

// A simple Archive (without a name)
var archive = await OpenTok.StartArchiveAsync(sessionId);

それから

// Store this archive ID in the database for later use
Guid archiveId = archive.Id;

アーカイブの名前(識別用に)を追加するには、 name のパラメータ the OpenTok.StartArchive() メソッドを使用する。

を設定することで、オーディオまたはビデオ録画を無効にすることもできます。 hasAudio または hasVideo のパラメータ the OpenTok.StartArchive() メソッド false.

また、以下の設定を行うことで、録画の解像度を高画質に設定することもできます。 resolution パラメーターの OpenTok.StartArchive() メソッド。 指定可能な値は、「640x480」(SD 横向き、デフォルト)、「1280x720」(HD 横向き)、「1920x1080」 (FHD 横向き)、"480x640"(SD 縦向き)、"720x1280"(HD 縦向き)、または "1080x1920"(FHD 縦向き)です。 なお、 resolution を設定する。 outputMode パラメータを OutputMode.INDIVIDUAL.

デフォルトでは、すべてのストリームが1つの(構成された)ファイルに記録されます。セッションの異なるストリームを を設定することで、セッションのさまざまなストリームを(1つの合成ファイルではなく)個別のファイルに記録することができます。 outputMode パラメーターの OpenTok.StartArchive() メソッド OutputMode.INDIVIDUAL.

開始済みのアーカイブの録画は、 OpenTokSDK.OpenTok インスタンスの StopArchive(String archiveId) メソッド、または OpenTokSDK.Archive インスタンスの Stop() メソッドを使用する。

// Stop an Archive from an archive ID (fetched from database)
var archive = OpenTok.StopArchive(archiveId);

または

var archive = OpenTok.StopArchiveAsync(archiveId);

を得るには OpenTokSDK.Archive インスタンス(とそれに関するすべての情報)をアーカイブIDから取得するには OpenTokSDK.OpenTok インスタンスの GetArchive(archiveId) メソッドを使用する。

var archive = OpenTok.GetArchive(archiveId);

または

var archive = OpenTok.GetArchiveAsync(archiveId);

アーカイブを削除するには、 OpenTokSDK.OpenTok インスタンスの DeleteArchive(archiveId) メソッド、または 以下の OpenTokSDK.Archive インスタンスの Delete() メソッドを使用する。

// Delete an archive from an archive ID (fetched from database)
OpenTok.DeleteArchive(archiveId);

// Delete an archive from an Archive instance (returned from GetArchive)
Archive.Delete();

または

// Delete an archive from an archive ID (fetched from database)
OpenTok.DeleteArchiveAsync(archiveId);

// Delete an archive from an Archive instance (returned from GetArchive)
Archive.DeleteAsync();

また、APIキーを使用して、自分が作成したすべてのアーカイブ(最大1000件)の一覧を取得することもできます。これは 以下の方法で行います。 OpenTokSDK.OpenTok インスタンスの ListArchives(int offset, int count) メソッド。必要に応じて、 offset および count パラメータを使用して、取得したアーカイブをページ分割することができます。これにより、 OpenTokSDK.ArchiveList オブジェクトがある。

// Get a list with the first 50 archives created by the API Key
var archives = OpenTok.ListArchives();
var archives = OpenTok.ListArchivesAsync();

// Get a list of the first 50 archives created by the API Key
var archives = OpenTok.ListArchives(0, 50);
var archives = OpenTok.ListArchivesAsync(0, 50);

// Get a list of the next 50 archives
var archives = OpenTok.ListArchives(50, 50);
var archives = OpenTok.ListArchivesAsync(50, 50);

// Get a list of the first 50 archives created for the given sessionId
var archives = OpenTok.ListArchives(sessionId:sessionId);
var archives = OpenTok.ListArchivesAsync(sessionId:sessionId);

を渡すことで、自動的にアーカイブされたセッションを作成することもできます。 ArchiveMode.ALWAYS として archiveMode を呼び出す際のパラメータ OpenTok.CreateSession() メソッド(上記の「 セッションの作成」を参照)。

ストリームを使う

ストリームに関する情報は GetStream(sessionId, streamId) のメソッドを使用する。 OpenTok クラスである。

Stream 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; // list with the layout class list

を呼び出すことで、セッション内のすべてのストリームに関する情報を取得できます。 ListStreams(sessionId) のメソッドを使用する。 OpenTok クラスである。

StreamList streamList = OpenTok.ListStreams(sessionId);

streamList.Count; // total count

強制切断

アプリケーションサーバーは、 ForceDisconnect(sessionId, connectionId) のメソッドを使用する。 OpenTok クラスである。

// Force disconnect a client connection
OpenTok.ForceDisconnect(sessionId, connectionId);

シグナルの送信

セッションが作成されると、セッション内の全員、または特定の接続にシグナルを送ることができます。シグナルを送るには Signal(sessionId, signalProperties, connectionId) のメソッドを使用する。 OpenTok クラスである。

について sessionId パラメータはセッションIDである。

について signalProperties パラメータは、 SignalProperties 設定を行うことができるクラスで、 data パラメータと type パラメータが必要だ。

  • data (文字列) -- シグナル用のデータ文字列。最大8kBまで送信できます。
  • type (文字列) -- (オプション) シグナルのタイプ文字列。最大128文字まで送信可能で、使用できる文字はA-Z、a-z、数字(0-9)、'-'、'_'、および'~'のみです。

について connectionId parameter は、セッションに接続しているクライアントの接続 ID を指定するために使用される、オプションの文字列です。この値を指定すると、指定されたクライアントにシグナルが送信されます。指定しない場合は、セッションに接続しているすべてのクライアントにシグナルが送信されます。

string sessionId = "SESSIONID";
SignalProperties signalProperties = new SignalProperties("data", "type");
OpenTok.Signal(sessionId, signalProperties);

string connectionId = "CONNECTIONID";
OpenTok.Signal(sessionId, signalProperties, connectionId);

ライブ・ストリーミング放送を扱う

OpenTokセッションのライブ配信は、以下の方法を使用して開始できます。 OpenTokSDK.OpenTok インスタンスの StartBroadcast(sessionId, hls, rtmpList, resolution, maxDuration, layout) メソッド。これは OpenTokSDK.Broadcast インスタンスだ。

のドキュメントも参照してください。 Opentok.StopBroadcast() そして OpenTok.GetBroadcast() のメソッドがある。

シップ

SIPプラットフォームをOpenTokセッションに接続するには、 Opentok.Dial(sessionId, token, sipUri, options) または Opentok.DialAsync(sessionId, token, sipUri, options) メソッドを使用する。

DTMF番号は、アクティブなOpenTokセッションのすべての参加者、またはそのセッションに接続している特定のクライアントに対して、 以下の方法を使用して送信できます。 Opentok.PlayDTMF(sessionId, digits, connectionId) または Opentok.PlayDTMFAsync(sessionId, digits, connectionId) メソッドを使用する。

セッション内のクライアントに、公開されたオーディオを強制的に切断またはミュートさせる

以下の方法を使用すると、特定のクライアントに対してOpenTokセッションからの切断を強制することができます。 Opentok.ForceDisconnect(sessionId, connectionId) メソッドを使用する。

を使って、特定のストリームのパブリッシャーにオーディオのパブリッシングを停止させることができます。 Opentok.ForceMuteStream(sessionId, stream) または Opentok.ForceMuteStreamAsync(sessionId, stream)メソッドを使用する。

セッション内のすべてのストリームのパブリッシャーを強制的に停止することができます(オプションのストリームリストを除く)。 を使って音声の公開を停止させることができます。 Opentok.ForceMuteAll(sessionId, excludedStreamIds) または Opentok.ForceMuteAllAsync(sessionId, excludedStreamIds) メソッドを呼び出します。 メソッドを呼び出すことで、セッションのミュート状態を無効にできます。 Opentok.DisableForceMute(sessionId) または Opentok.DisableForceMuteAsync(sessionId) メソッドを使用する。

エクスペリエンス・コンポーザー

[...]を開始できます。 エクスペリエンス・コンポーザー を使用してレンダリングする Opentok.StartRenderAsync() メソッドを使用する:

string sessionId = "opentok-session-id";
string token = "token-for-opentok-session";
string url = "https://your-render-url/path/";
StartRenderRequest request = new StartRenderRequest(sessionId, token, url);
OpenTok.StartRenderAsync(request);

レンダラーを停止するには、 Opentok.StopRenderAsync() メソッドを使用する。

レンダラーの一覧を表示するには、 Opentok.ListRendersAsync() メソッドを使用する。

Audio Connector の使用方法

[...]を開始できます。 オーディオコネクタのストリーム を呼び出すことで OpenTok.StartAudioConnectorAsync(AudioConnectorStartRequest request)メソッド:

var webSocket = new AudioConnectorStartRequest.WebSocket(
    new Uri("wss://service.com/ws-endpoint"),
    new []{"streamId-1", "streamId-2"},
    new Dictionary<string, string>
    {
        {"X-CustomHeader-Key1", "headerValue1"},
        {"X-CustomHeader-Key2", "headerValue2"},
    });
var startRequest = new AudioConnectorStartRequest(sessionId, token, webSocket);
AudioConnector response = await this.OpenTok.StartAudioConnectorAsync(startRequest);

HTTPリクエストのタイムアウト時間の変更

Client SDK から送信される HTTP リクエストのタイムアウト時間を調整したい場合は、OpenTok.SetDefaultRequestTimeout(int timeout) を呼び出すことで設定できます。なお、timeout はミリ秒単位です。

this.OpenTok = new OpenTok(apiKey, apiSecret);
this.OpenTok.SetDefaultRequestTimeout(2000);

必要条件

OpenTokのAPIキーとAPIシークレットが必要です。これらは、アカウントにログインすることで取得できます。 Vonage Video API アカウント.

OpenTok .NET SDK を使用するには、.NET Framework 4.5.2 以降が必要です。

注:バージョン 4.5.2 で使用する際、TLS 1.2 はデフォルトでは有効になっていません。ランタイムを少なくとも TLS 1.2 に強制するには、次のような設定を使用してください。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

あるいは、アプリケーションが他のAPIで異なるバージョンのTLSに依存している場合は、ビット単位のOR演算を使用して、TLSをサポートされるメソッドのリストに追加することもできます:

ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;

リリースノート

参照 リリース 各リリースの 詳細については、こちらのページをご覧ください。

v2.2.0以降の主な変更点

v3.0.0での変更点:

このバージョンには、.NET Framework 4.5.2 以降が必要です。

v2.2.1での変更点:

のデフォルト設定は CreateSession() この方法は、メディアモードを「relayed」に設定して セッションを作成するものです。以前のバージョンのSDKでは、デフォルト設定としてOpenTok Media Routerを使用する (メディアモードを「routed」に設定する)ようになっていました。 リレー方式のセッションでは、クライアントは互いに直接 (ピアツーピア)でストリームを送信しようとします。ファイアウォールの制限によりクライアントが接続できない場合、 セッションでは OpenTok TURN サーバーを使用して音声・動画ストリームを中継します。

v2.2.0での変更点:

このバージョンのSDKでは、OpenTokアーカイブの操作がサポートされています。

このバージョンのSDKでは、APIの設計にいくつかの改善が加えられています。これには、 以下のAPIの変更が含まれます:

  • OpenTokの新しいクラス -- メインクラスの名前が「OpenTokSDK」から「OpenTok」に変更されました。 以前のバージョンでは、コンストラクタは OpenTokSDK(). v2.2では、それは OpenTok(int apiKey, int apiSecret).

  • CreateSession -- 以前のバージョンでは、セッションを作成する方法が2つありました: OpenTokSDK.CreateSession(String location) そして OpenTokSDK.CreateSession(String location, Dictionary<string, object> options). これらのメソッドは文字列(セッションID)を返しました。

    v2.2では、OpenTokクラスには1つのメソッドが含まれており、このメソッドは2つのパラメータ(いずれもオプション)を受け取ります: CreateSession(string location = "", MediaMode mediaMode = MediaMode.ROUTED). その mediaMode パラメータは、 p2p.preference 前のバージョンの 設定。このメソッドは Session オブジェクトを返します。

  • GenerateToken -- 以前のバージョンでは、2つのメソッドがありました: OpenTokSDK.GenerateToken(string sessionId) そして OpenTokSDK.GenerateToken(string sessionId, Dictionary<string, object> options) v2.2では、これは以下のメソッドに置き換えられています: OpenTokSDK.OpenTok.GenerateToken(string sessionId, Role role = Role.PUBLISHER, double expireTime = 0, string data = null). 以下のパラメータを除くすべてのパラメータ、 sessionId パラメータは、省略可能です。

    また、Session クラスには、トークンを生成するためのメソッドが含まれています: OpenTokSDK.Session.GenerateToken(Role role = Role.PUBLISHER, double expireTime = 0, string data = null).