ストリームの公開 — Windows

一旦 セッションに接続この場合、セッションに接続している他のクライアントが閲覧できるストリームを公開することができる。

このトピックには以下のセクションが含まれます:

パブリッシャー・オブジェクトの初期化

Publisher オブジェクトは、OpenTok セッションで使用するために、システムのマイクやカメラからのオーディオ・ビデオストリームを取得するために使用されます。また、Publisher を使用して、 画面共有 ビデオストリーム

基本的なパブリッシャーは Publisher() コンストラクタにWindowsアプリケーションのインスタンスを渡します:

publisher = new Publisher(Context.Instance);
publisher.Error += Publisher_Error;

private void Publisher_Error(object sender, Publsher.ErrorEventArgs e)
{
    Console.WriteLine("Publisher error:" + e.ErrorCode);
}

パブリッシャー・オブジェクトを Session.publish() ストリームをセッションに公開する方法。詳しくは ストリームの公開.

デフォルトでは、パブリッシャーはデフォルトのビデオキャプチャ機能を使用します。この機能では、公開されるストリームの音声および映像ソースとして、システムのデフォルトのマイクとカメラが使用されます。これは、OpenTok SDK の VideoCapturer によって定義されています。

パブリッシャーが使用する特定のビデオキャプチャオブジェクトを定義することができます。このオブジェクトはビデオソース(カメラなど)からビデオをキャプチャし、ビデオの設定(フレームレートや解像度など)を持ちます。

を使用することができます。 VideoCapturer.EnumerateDevices() メソッドを使用して、システム上のビデオ・キャプチャ・デバイス(カメラ)を列挙します。これは VideoDevice オブジェクトのリストを返します。VideoDeviceクラスにはいくつかの CreateVideoCapturer() メソッドを使用して、ビデオ・デバイスを使用する VideoCapturer オブジェクトをインスタンス化します:

  • VideoCapturer.CreateVideoCapturer(format) - VideoFormat オブジェクトで定義された設定を使用して VideoCapturer オブジェクトを作成します。
  • VideoCapturer.CreateVideoCapturer(width, height, fps) - で定義された解像度を持つVideoCapturerオブジェクトを作成する。 width そして height パラメータと fps パラメータが必要だ。
  • VideoCapturer.CreateVideoCapturer(resolution, fps) - で定義された解像度を持つVideoCapturerオブジェクトを作成する。 resolution パラメータと fps パラメータを使用する。その OpenTok.VideoCapturer.Resolution によって使用される値を定義する。 resolution パラメータが必要だ: Low (320x240ピクセル)、 Medium (640×480ピクセル)、 High (1280x720ピクセル)、および High1080p (1920x1080ピクセル)。

ビデオキャプチャラーは、指定した解像度に最も近いシステムでサポートされている解像度を使用します。

デフォルトでは、パブリッシャーは Windows Presentation Foundation 用のデフォルトのビデオレンダラーを使用します。これは、OpenTok Windows SDK の VideoRenderer クラスで定義されています。また、IVideoRenderer インターフェースを実装するクラスを作成することで、ビデオ用のレンダラーを指定することもできます。カスタムビデオレンダラーを使用することも可能です。詳しくは、以下を参照してください。 カスタムビデオレンダラの使用.

以下のコードは、デフォルトのシステム・ビデオ・キャプチャを使用し、解像度を720pに設定したパブリッシャーを作成します。VideoCapturer.Resolution.High)、フレームレートを30フレーム/秒に設定する:

var devices = VideoCapturer.EnumerateDevices();
var selectedDevice = devices[0];
capturer = selectedDevice.CreateVideoCapturer(VideoCapturer.Resolution.High,
             VideoCapturer.VideoCapturer.FrameRate.Fps30);
publisher = new Publisher(Context.Instance, renderer: publisherVideoRenderer, capturer: capturer);
publisher.Error += Publisher_Error;

private void Publisher_Error(object sender, Publsher.ErrorEventArgs e)
{
    Console.WriteLine("Publisher error:" + e.ErrorCode);
}

注: OpenTok Media Router を使用するセッション( メディアモード ルーティングに設定されている場合)、フレームレートを下げると、ストリームが使用する帯域幅が比例して減少する。ただし、メディアモードが中継に設定されているセッショ ンでは、フレームレートを下げてもストリームの帯域幅は減少しない。

の他のオプションのパラメータを渡す。 Publisher() コンストラクタで公開ストリームのカスタム設定を定義します:

  • name - パブリッシャービデオの名前。をご覧ください。 Stream.Name このパブリッシャーによって発行されたストリームのプロパティは、 (全てのクライアントで)この値に設定されます。
  • hasAudioTrack - 公開ストリームにオーディオトラックを含めるかどうか。デフォルトは true.
  • hasVideoTrack - 公開ストリームにオーディオトラックを含めるかどうか。デフォルトは true.
  • stereo - 公開ストリームでステレオ音声を有効にするかどうか。デフォルトは false.これを true ステレオマイクからのオーディオを公開する。

また、次のこともできる。 パブリッシャーが使用するオーディオソースを変更する.を作成することもできる。 カスタムオーディオドライバ すべての出版社と購読者が使用できる。

カスタムビデオキャプチャを使用して、カスタマイズしたビデオソースでストリームを公開できます。 カスタムビデオキャプチャーの使用.カスタムビデオキャプチャを使用して、画面共有ストリームを公開することもできます。 スクリーン共有.

注: OpenTok.Publisher クラスと OpenTok.VideoCapturer クラスは、System.IDisposable インターフェイスを実装しています。必ず Dispose() メソッドを使用して、オブジェクトが不要になったときにリソースを解放します(たとえば、パブリッシャが削除されたときや、アプリまたはウィンドウが終了したときなど)。

ストリームの公開

Publisher オブジェクトを作成したら(参照: パブリッシャー・オブジェクトの初期化)、それを Publish(publisher) メソッドを呼び出して、ストリームをセッションに公開します:

session.Publish(publisher);

このコードでは session はSessionオブジェクトである。 publisher がパブリッシャ・オブジェクトであること、およびクライアントがセッションに接続していることを示します。詳細は セッションへの参加.

について Publisher を送信する。 StreamCreated イベントが発生します:

publisher.StreamCreated += Publisher_StreamCreated;
session.Publish(publisher);
private void Publisher_StreamCreated(object sender, Publisher.StreamEventArgs e)
{
    Console.WriteLine("The publisher started streaming.");
}

ストリームの最大ビットレートの設定

公開されたストリームの最大ビットレートを設定できます。最大ビットレートを設定することで、従量制の接続から接続しているユーザーの場合、帯域幅の消費を抑えることができます。詳しくは、 本書.

パブリッシャーによるストリーミングを停止する

以下の関数を呼び出すことで、パブリッシャーによるセッションへのストリーミングを停止できます。 Unpublish(publisher) メソッドを呼び出します:

session.unpublish(mPublisher);

について Publisher を送信する。 StreamCreated イベントが発生します:

publisher.StreamCreated += Publisher_StreamDestroyed;
session.Publish(publisher);
private void Publisher_StreamDestroyed(object sender, Publisher.StreamEventArgs e)
{
    Console.WriteLine("The publisher stopped streaming.");
}

パブリッシャーのストリームに関する統計情報の取得

パブリッシャーのオーディオおよびビデオ統計に関する定期的なレポートのコールバックメソッドを登録するには、 Publisher AudioStatsUpdated そして VideoUpdated イベント。低レベルのピア接続統計情報を取得するには、 Publisher.GetRtcStatsReport() メソッドを使用する。

参照 クライアント観測可能性開発者ガイド をご覧ください。

パブリッシャーのストリームをテストする

テストストリームを公開し、そのオーディオとビデオの統計情報を確認することで、接続でサポートされるストリームのタイプ(高解像度やオーディオのみなど)を判断できます。

その後、ストリームを購読して Subscriber.AudioStatsUpdated そして Subscriber.VideoStatsUpdated イベントを使用して、公開したストリームのオーディオとビデオの統計情報を取得できます。