Video API ノード SDK

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

npmを使用したインストール(推奨):

npm は、Node.js プロジェクトの依存関係管理に役立ちます。詳細はこちらをご覧ください: http://npmjs.org.

このコマンドを実行してパッケージをインストールし、あなたの package.json:

$ npm install opentok --save

使用方法

初期化

モジュールをインポートして OpenTok オブジェクトのコンストラクタ関数を取得し、次のように呼び出します。 new 自分のAPIキーとAPIシークレットを使用して、 OpenTokオブジェクトをインスタンス化します。

const OpenTok = require("opentok");
const opentok = new OpenTok(apiKey, apiSecret);

タイムアウト時間の延長

現在、このライブラリではリクエストのタイムアウトが20秒に設定されています。ネットワークの速度が遅く、タイムアウトを延長する必要がある場合は、OpenTokオブジェクトのインスタンス化時に、タイムアウト値(ミリ秒単位)を指定することができます。

const OpenTok = require("opentok");
const opentok = new OpenTok(apiKey, apiSecret, { timeout: 30000});

セッションの作成

OpenTokセッションを作成するには、次の OpenTok.createSession(properties, callback) メソッドを使用する。その properties parameter は、セッションで OpenTok Media Router を使用するかどうかを指定したり、ロケーションのヒントを指定したり、セッションを自動的に アーカイブするかどうかを指定したりするために使用される、オプションのオブジェクトです。コールバックのシグネチャは次のとおりです。 function(error, session).その session コールバックで 返されるのは、Sessionのインスタンスです。Sessionオブジェクトには、 sessionId プロパティは を永続ストア(データベースなど)に保存するのに便利です。

// Create a session that will attempt to transmit streams directly between
// clients. If clients cannot connect, the session uses the OpenTok TURN server:
opentok.createSession(function (err, session) {
  if (err) return console.log(err);

  // save the sessionId
  db.save("session", session.sessionId, done);
});

// The session will the OpenTok Media Router:
opentok.createSession({ mediaMode: "routed" }, function (err, session) {
  if (err) return console.log(err);

  // save the sessionId
  db.save("session", session.sessionId, done);
});

// A Session with a location hint
opentok.createSession({ location: "12.34.56.78" }, function (err, session) {
  if (err) return console.log(err);

  // save the sessionId
  db.save("session", session.sessionId, done);
});

// A Session with an automatic archiving
opentok.createSession({ mediaMode: "routed", archiveMode: "always" }, function (
  err,
  session
) {
  if (err) return console.log(err);

  // save the sessionId
  db.save("session", session.sessionId, done);
});

トークンの生成

セッションが作成されると、クライアントがセッションに接続する際に使用するトークンの生成を 開始することができます。 トークンを生成するには OpenTok.generateToken(sessionId, options) メソッド。もう一つの 方法は、 generateToken(options) Session オブジェクトのメソッド。その options parameter は、トークンのロール、有効期限、および接続データを設定するために使用されるオプションのオブジェクトです。 アーカイブや放送におけるレイアウト制御のため、このトークンを使用して接続から公開されるストリームの 初期レイアウトクラス一覧も設定できます。

// Generate a Token from just a sessionId (fetched from a database)
token = opentok.generateToken(sessionId);

// Generate a Token from a session object (returned from createSession)
token = session.generateToken();

// Set some options in a Token
token = session.generateToken({
  role: "moderator",
  expireTime: new Date().getTime() / 1000 + 7 * 24 * 60 * 60, // in one week
  data: "name=Johnny",
  initialLayoutClassList: ["focus"],
});

アーカイブとの取り組み

OpenTokセッションの録画は、以下の方法を使用して開始できます。 OpenTok.startArchive(sessionId, options, callback) メソッドを使用する。その options parameter は、アーカイブの名前を設定するために使用されるオプションのオブジェクトです。 コールバックのシグネチャは次のとおりです。 function(err, archive).その archive コールバック内で返される 値は、 Archive. なお、アーカイブを開始できるのは、 クライアントが接続されているセッションのみであることに注意してください。

opentok.startArchive(sessionId, { name: "Important Presentation" }, function (
  err,
  archive
) {
  if (err) {
    return console.log(err);
  } else {
    // The id property is useful to save off into a database
    console.log("new archive:" + archive.id);
  }
});

を設定することで、オーディオまたはビデオ録画を無効にすることもできます。 hasAudio または hasVideo プロパティ その options パラメータを false:

var archiveOptions = {
  name: "Important Presentation",
  hasVideo: false, // Record audio only
};
opentok.startArchive(sessionId, archiveOptions, function (err, archive) {
  if (err) {
    return console.log(err);
  } else {
    // The id property is useful to save to a database
    console.log("new archive:" + archive.id);
  }
});

デフォルトでは、すべてのストリームが1つの(構成された)ファイルに記録されます。セッションの異なるストリームを を設定することで、セッションのさまざまなストリームを(1つの合成ファイルではなく)個別のファイルに記録することができます。 outputMode オプションで 'individual' を呼び出すと OpenTok.startArchive() メソッドを使用する:

var archiveOptions = {
  name: "Important Presentation",
  outputMode: "individual",
};
opentok.startArchive(sessionId, archiveOptions, function (err, archive) {
  if (err) {
    return console.log(err);
  } else {
    // The id property is useful to save off into a database
    console.log("new archive:" + archive.id);
  }
});

を使用して、開始したアーカイブの録画を停止することができます。 OpenTok.stopArchive(archiveId, callback) メソッド。また、次の方法でもこれを行うことができます。 Archive.stop(callback) メソッド an Archive インスタンス。この コールバックのシグネチャは function(err, archive).その archive コールバックで返されるのは、 のインスタンスです。 Archive.

opentok.stopArchive(archiveId, function (err, archive) {
  if (err) return console.log(err);

  console.log("Stopped archive:" + archive.id);
});

archive.stop(function (err, archive) {
  if (err) return console.log(err);
});

を得るには Archive インスタンス(とそれに関するすべての情報)を archiveIdを使用する。 OpenTok.getArchive(archiveId, callback) メソッド。このコールバックの関数シグネチャは次のとおりです。 function(err, archive)。詳細については、アーカイブのプロパティを確認してください。

opentok.getArchive(archiveId, function (err, archive) {
  if (err) return console.log(err);

  console.log(archive);
});

アーカイブを削除するには OpenTok.deleteArchive(archiveId, callback) メソッド、あるいは delete(callback) 〜の方法 Archive インスタンス。このコールバックのシグネチャは次のとおりです。 function(err).

// Delete an Archive from an archiveId (fetched from database)
opentok.deleteArchive(archiveId, function (err) {
  if (err) console.log(err);
});

// Delete an Archive from an Archive instance, returned from the OpenTok.startArchive(),
// OpenTok.getArchive(), or OpenTok.listArchives() methods
archive.delete(function (err) {
  if (err) console.log(err);
});

また、APIキーで作成したすべてのアーカイブ(最大1000件)のリストを取得することもできます。これは を使用します。 OpenTok.listArchives(options, callback) メソッドを使用します。パラメータ options は オプションのオブジェクトです。 offset そして count コールバックにはシグネチャがあります。 コールバックのシグネチャは function(err, archives, totalCount).その archives から返される の配列です。 Archive インスタンスその totalCount コールバックから返されるのは、 そのAPIキーによって生成されたアーカイブの総数です。

opentok.listArchives({ offset: 100, count: 50 }, function (
  error,
  archives,
  totalCount
) {
  if (error) return console.log("error:", error);

  console.log(totalCount + " archives");
  for (var i = 0; i < archives.length; i++) {
    console.log(archives[i].id);
  }
});

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

構成されたアーカイブの場合、レイアウトを動的に変更するには OpenTok.setArchiveLayout(archiveId, type, stylesheet, screenshareType, callback) メソッドを使用する:

opentok.setArchiveLayout(archiveId, type, null, null, function (err) {
  if (err) return console.log("error:", error);
});

を設定することで、クライアントのストリームの初期レイアウト・クラスを設定できます。 layout オプションを使用します。 オプションは、クライアントのトークン作成時に OpenTok.generateToken() メソッドです。また メソッドを呼び出すことで、セッション内のストリームのレイアウト・クラスを変更できます。 OpenTok.setStreamClassLists(sessionId, classListArray, callback) メソッドを使用する。

構成済みアーカイブのレイアウトの設定は任意です。既定では、構成済みアーカイブは 「を使用します ( 構成されたビデオのレイアウトをカスタマイズする アーカイブ).

アーカイブに関する詳細については、以下の OpenTok アーカイブ開発者ガイド.

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

重要だ: ただ ルーティングされた OpenTok セッション ライブ配信に対応しています。

を開始する。 ライブ配信 放送 OpenTokセッションの、 以下の関数を呼び出します。 OpenTok.startBroadcast() メソッド。3つのパラメータを渡します。セッションの セッションID、ブロードキャストのオプション、およびコールバック関数です:

var broadcastOptions = {
  outputs: {
    hls: {},
    rtmp: [
      {
        id: "foo",
        serverUrl: "rtmp://myfooserver/myfooapp",
        streamName: "myfoostream",
      },
      {
        id: "bar",
        serverUrl: "rtmp://mybarserver/mybarapp",
        streamName: "mybarstream",
      },
    ],
  },
  maxDuration: 5400,
  resolution: "640x480",
  layout: {
    type: "verticalPresentation",
  },
};
opentok.startBroadcast(sessionId, broadcastOptions, function (
  error,
  broadcast
) {
  if (error) {
    return console.log(error);
  }
  return console.log("Broadcast started: ", broadcast.id);
});

の詳細については、APIリファレンスを参照してください。 options パラメータが必要だ。

成功すると、Broadcastオブジェクトが2番目のパラメータとしてコールバック関数に渡されます。 Broadcastオブジェクトには、ブロードキャストを定義するプロパティがあります。 broadcastUrls プロパティには、ブロードキャスト・ストリームの URL が含まれています。詳細については、APIリファレンスを参照してください。

に電話する。 OpenTok.stopBroadcast() メソッドを使用して、ライブ・ストリーミング放送を停止することができます。 ブロードキャストID ( id プロパティ)を最初のパラメータとして指定する。2番目の パラメータはコールバック関数です:

opentok.stopBroadcast(broadcastId, function (error, broadcast) {
  if (error) {
    return console.log(error);
  }
  return console.log("Broadcast stopped: ", broadcast.id);
});

を呼び出すこともできます。 stop() メソッドを使用してブロードキャストを停止します。

に電話する。 Opentok.getBroadcast() メソッドにブロードキャスト ID を渡して、Broadcast オブジェクトを取得します。

また、APIキーで作成したすべてのブロードキャスト(最大1000件)のリストを取得することもできます。これは を使います。 OpenTok.listBroadcasts(options, callback) メソッドを使用します。パラメータ options は オプションのオブジェクトです。 offset, countそして sessionId コールバックにはシグネチャがあります。 コールバックのシグネチャは function(err, broadcasts, totalCount).その broadcasts から返される の配列です。 Broadcast インスタンスその totalCount コールバックから返されるのは、 そのAPIキーによって生成されたブロードキャストの総数です。

opentok.listBroadcasts({ offset: 100, count: 50 }, function (
  error,
  broadcasts,
  totalCount
) {
  if (error) return console.log("error:", error);

  console.log(totalCount + " broadcasts");
  for (var i = 0; i < broadcasts.length; i++) {
    console.log(broadcasts[i].id);
  }
});

放送レイアウトを変更するには OpenTok.setBroadcastLayout() メソッドを使用します、 ブロードキャストIDと レイアウト タイプ.

を設定することで、クライアントのストリームの初期レイアウト・クラスを設定できます。 layout オプションを使用します。 オプションは、クライアントのトークン作成時に OpenTok.generateToken() メソッドです。また メソッドを呼び出すことで、セッション内のストリームのレイアウト・クラスを変更できます。 OpenTok.setStreamClassLists(sessionId, classListArray, callback) メソッドを使用する。

ライブ配信のレイアウト設定は任意です。デフォルトでは、ライブ配信では 「最適表示」レイアウトが使用されます。

信号の送信

OpenTokセッションの全参加者にシグナルを送信するには、 OpenTok.signal(sessionId, connectionId, payload, callback) メソッドと設定 その connectionId パラメータを null:

var sessionId =
  "2_MX2xMDB-flR1ZSBOb3YgMTkgMTE6MDk6NTggUFNUIDIwMTN-MC2zNzQxNzIxNX2";
opentok.signal(sessionId, null, { type: "chat", data: "Hello!" }, function (
  error
) {
  if (error) return console.log("error:", error);
});

を呼び出して、セッションの特定の参加者にシグナルを送ることもできる。 OpenTok.signal(sessionId, connectionId, payload, callback) メソッドを呼び、すべてのパラメータを設定する、 以下を含む connectionId:

var sessionId =
  "2_MX2xMDB-flR1ZSBOb3YgMTkgMTE6MDk6NTggUFNUIDIwMTN-MC2zNzQxNzIxNX2";
var connectionId = "02e80876-02ab-47cd-8084-6ddc8887afbc";
opentok.signal(
  sessionId,
  connectionId,
  { type: "chat", data: "Hello!" },
  function (error) {
    if (error) return console.log("error:", error);
  }
);

これは、OpenTok クライアント SDK の signal() メソッドに相当するサーバーサイドの機能です。詳しくは、 OpenTok シグナリング開発者ガイド.

参加者の切断

OpenTokセッションから参加者を切断するには、 OpenTok.forceDisconnect(sessionId, connectionId, callback) メソッドを使用する。

opentok.forceDisconnect(sessionId, connectionId, function (error) {
  if (error) return console.log("error:", error);
});

これは、OpenTok.js の forceDisconnect() メソッドに相当するサーバーサイドのメソッドです: OpenTok.js モデレーションガイド.

セッション内のクライアントに公開音声のミュートを強制する

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

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

SIPインターコネクトでの作業

SIP 相互接続 機能を使用すると、外部のサードパーティ製 SIP ゲートウェイからの音声専用ストリームを追加できます。これには、SIP URI、音声専用ストリームを追加したいセッション ID、および そのセッション ID に接続するためのトークンが必要です。

var options = {
  from: "15551115555",
  secure: true,
};
opentok.dial(sessionId, token, sipUri, options, function (error, sipCall) {
  if (error) return console.log("error: ", error);

  console.log(
    "SIP audio stream Id: " +
      sipCall.streamId +
      " added to session ID: " +
      sipCall.sessionId
  );
});

詳細は OpenTok SIP 相互接続 開発者ガイド.

ストリーム情報の取得

OpenTokセッション内のアクティブなストリームに関する情報を取得できます:

var sessionId =
  "2_MX6xMDB-fjE1MzE3NjQ0MTM2NzZ-cHVTcUIra3JUa0kxUlhsVU55cTBYL0Y1flB";
var streamId = "2a84cd30-3a33-917f-9150-49e454e01572";
opentok.getStream(sessionId, streamId, function (error, streamInfo) {
  if (error) {
    console.log(error.message);
  } else {
    console.log(stream.id); // '2a84cd30-3a33-917f-9150-49e454e01572'
    console.log(stream.videoType); // 'camera'
    console.log(stream.name); // 'Bob'
    console.log(stream.layoutClassList); // ['main']
  }
});

セッションID、ストリームID、およびコールバック関数を OpenTok.getStream() メソッド。 操作が完了すると、コールバック関数が呼び出されます。この関数には2つのパラメータが渡されます: error (エラーが発生した場合)または stream. 正常に完了すると、 stream オブジェクト が設定され、ストリームのプロパティが含まれます。

~に関する情報を入手するには すべて セッション内のアクティブなストリームについては、 OpenTok.listStreams() メソッドを、 セッションIDと呼び出しバック関数を引数として渡します。成功した場合、呼び出しバック関数が呼び出され、 2番目のパラメータとしてStreamオブジェクトの配列が渡されます:

opentok.listStreams(sessionId, function(error, streams) {
  if (error) {
    console.log(error.message);
  } else {
    streams.map(function(stream) {
      console.log(stream.id); // '2a84cd30-3a33-917f-9150-49e454e01572'
      console.log(stream.videoType); // 'camera'
      console.log(stream.name); // 'Bob'
      console.log(stream.layoutClassList); // ['main']
    }));
  }
});

Audio Connector の使用方法

[...]を開始できます。 オーディオ・コネクター WebSocket を呼び出すことで OpenTok.websocketConnect() メソッドを使用する。

必要条件

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

OpenTok Node SDK には、Node.js 6 以降が必要です。それより古いバージョンでも動作する可能性はありますが、それらのバージョンについてはもはやテストが行われていません。

リリースノート

参照 リリース情報ページ 各リリースの 詳細については、

v2.2.0以降の主な変更点

v2.2.3での変更点:

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

v2.2.0での変更点:

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

について createSession() このメソッドは、1つのパラメータ( options ~を持つオブジェクト location そして mediaMode プロパティ。その mediaMode プロパティは properties.p2p.preference SDKの以前のバージョンにおけるパラメータ。

について generateToken() 2つのパラメータ(セッションIDと options ~を持つオブジェクト role, expireTime そして data の特性を持つ。