購読する基本

このガイドでは、セッションで利用可能なストリームを検出し、サブスクライブし、終了したらサブスクライブを解除する方法を示します。新しいストリームをリッスンし、それらを UI にアタッチし、正しくクリーンアップします。

ストリームを検出する

セッション内の新しいストリームをリッスンすることで、ストリームが表示されたときに購読することができます。

について <OTSession> コンポーネントは streamCreated イベントは、セッションに新しいストリーム(自分のストリーム以外)が作成されたときに発生します。ストリームは、クライアントがセッションにストリームをパブリッシュしたときに作成されます。ストリームは streamCreated イベントは、セッション内の各既存ストリームに対しても、最初の接続時にディスパッチされます。streamCreated イベントオブジェクトには、接続データ、ビデオソースの種類('camera' または 'screen')など、ストリームの詳細が含まれます。

import OTSession from 'opentok-react-native';

<OTSession
  apiKey={apiKey}
  sessionId={sessionId}
  token={token}
  eventHandlers={{
    streamCreated: event => {
      console.log('Stream created -- stream ID:', event.streamId);
    },
  }}
/>

新しいストリームを検出したら、次のセクションで説明するように、そのストリームを購読する。

Session オブジェクトは streamCreated イベントは、セッションに新しいストリーム(自分のストリーム以外)が作成されたときに発生します。ストリームは、クライアントが 出版 ストリームをセッションに送る。セッションの streamCreated イベントは、最初に接続したときに、セッション内の各既存ストリームに対してもディスパッチされます。このイベントはStreamEventによって定義されます。 stream プロパティは、作成されたストリームを表します:

session.on("streamCreated", function (event) {
    console.log("New stream in the session: " + event.stream.streamId);
});
// Replace with a valid token:
session.connect(token);

どのストリームにも加入できる。次のセクションをご覧ください。

について onStreamReceived(Session session, Stream stream) Session.SessionListenerオブジェクトのメソッドは、他のクライアントから発行されたストリームがセッションに作成されるときに呼び出されます。(ストリームは、クライアントがセッションにストリームを発行したとき、またはセッションに接続したときにストリームが存在したときに作成されます)。

@Override
public void onStreamReceived(Session session, Stream stream) {
    // There is a new stream.
    // You may want to subscribe to it.
}

を呼び出して、このイベントのリスナー・オブジェクトを追加する。 setSessionListener(Session.SessionListener listener) メソッドを呼び出します:

mSession.setSessionListener(this);

について OTSessionDelegate session(_ session:streamCreated:) メッセージは、セッションに新しいストリームが作成されたときに送信される。(ストリームは、クライアント 出版 ストリームをセッションに送る)。その OTStreamオブジェクト にはストリームを定義するプロパティがある。ストリームを定義するプロパティを connection OTStreamオブジェクトの connection OTSessionオブジェクトのプロパティを使用して、そのストリームがクライアントが公開したものであるかどうかを判断します:

func session(_ session: OTSession, streamCreated stream: OTStream) {
    print("Session streamCreated: \(stream.streamId)")

    // See the declaration of subscribeToSelf above.
    if stream.connection.connectionId == session.connection.connectionId {
        // This is my own stream
    } else {
        // This is a stream from another client.
    }
}

ストリームがセッションを離れると [OTSession session: streamDestroyed:] メッセージが送信される。ストリームが削除されると、そのストリームの OTSubscriber オブジェクトのビューはそのスーパービューから削除されます。ストリームが自分のクライアントによって発行されていないかどうかを確認し、そのビューをスーパービューから削除します。

- (void)session:(OTSession*)session streamDestroyed:(OTStream *)stream
{
    NSLog(@"session streamDestroyed (%@)", stream.streamId);

    if ([subscriber.stream.streamId isEqualToString:stream.streamId])
    {
        [_subscriber.view removeFromSuperview];
        _subscriber = nil;
    }
}

加入者のビデオが無効になっていることを検知する

サブスクライバーのデリゲートは [OTSubscriberDelegate subscriberVideoDisabled:reason:] 加入者のビデオが無効化されたときのメッセージ:

- (void)subscriberVideoDisabled:(OTSubscriber *)subscriber
                            reason:(OTSubscriberVideoEventReason)reason
{
    NSLog(@"subscriber video disabled.");
}

について reason パラメータには、OTSubscriberVideoEventReason 列挙型で定義されている以下の定数のいずれかを設定する:

  • OTSubscriberVideoEventPublisherPropertyChanged - このビデオイベントは、ストリームのパブリッシャーがビデオストリームを停止したために発生した。
  • OTSubscriberVideoEventQualityChanged - ビデオ・イベントは、ビデオ・ストリームの画質の変化によって発生しました。ストリームの品質は、サブスクライバまたはパブリッシャのネットワーク状 況やCPU使用率によって変化する可能性がある。この理由は、メディアモードが "routed "に設定されているセッションでのみ使用される。(以下を参照のこと。 Vonage ビデオ・メディア・ルーターとメディア・モード.)Vonage Video Media Routerのこの機能は、ビデオストリームの品質が低下したときに加入者がビデオストリームをドロップし、メッセージが送信されます。状況が改善されると、ビデオストリームが再開され、メッセージが送信されます。 [OTSubscriberKit subscriberVideoEnabled:reason:] メッセージが送信される。ビデオストリームがドロップされたとき、加入者は、オーディオストリームがあれば、それを受信し続ける。
  • OTSubscriberVideoEventSubscriberPropertyChanged - ビデオイベントは、この加入者の OTSubscriberKit.subscribeToVideo 財産である。

ビデオストリームが再開すると [OTSubscriberKit subscriberVideoEnabled:reason:] メッセージが送信される。

ストリームを公開する際、ストリームの画質が原因で動画が無効化されるのを防ぐことができます。ストリームを公開する前に [OTSession publish:error:] メソッドで audioFallbackEnabled プロパティをNOに設定します。

Session オブジェクトは StreamReceived イベントは、他のクライアントによって公開されたストリームがセッションに作成されたときに発生します。(ストリームは、クライアントが 出版 ストリームをセッションに接続する場合、またはセッションに接続したときにストリームが存在する場合)。

@Override
session.StreamReceived += Session_StreamReceived;

private void Session_StreamReceived(object sender, Session.StreamEventArgs e)
{
    Console.WriteLine("Session stream received");
}

について on_stream_received のコールバック関数である。 otc_session_callbacks struct は、他のクライアントから発行されたストリームがセッション内に作成されるときに呼び出される。(ストリームは、クライアント 出版 ストリームをセッションに追加するか、セッションに接続したときにストリームが存在する場合)。以下を参照のこと。 otc_session インスタンスのインスタンス化とセッション関連のコールバック.

ストリームを購読する

セッションを使ってリモートストリームを購読し、それをUIでレンダリングする。

セッション内のすべてのストリームをサブスクライブするには、OTSubscriber オブジェクトを OTSession オブジェクトのチリとして追加します:

<OTSession
  applicationId="the Application ID"
  sessionId="the session ID"
  token="the token">
  <OTSubscriber/>
</OTSession>

クライアントがセッションに接続した後、OTSubscriber オブジェクトは、セッション内で他のクライアントのストリームが利用可能になると、サブスクライバービデオのビューを追加する。

をディスパッチします。 connected イベントをディスパッチします。サブスクライバが正常にストリーミングを開始すると、エラーイベントがディスパッチされます。 error 購読するを設定する。 eventHandlers OTSubscriberコンポーネントのプロパティを設定し connected そして error プロパティをコールバック関数に渡す:

<OTSubscriber
eventHandlers={{
  connected: () => {
    console.log('The subscriber started streaming.');
  },
  error: () => {
    console.log('The subscriber failed.');
  }
}}/>

登録解除

購読しているストリームの再生を停止する:

session.unsubscribe(subscriber);

ストリームを購読するには、ストリームオブジェクトを subscribe メソッドを呼び出します:

session.subscribe(stream, replacementElementId);

について subscribe() メソッドは以下のパラメーターを取る:

  • stream-ストリームオブジェクト。
  • targetElement- (オプション) サブスクライバ・ビデオを置き換える DOM 要素を定義します。
  • properties- (オプション) HTMLページのSubscriberビューの外観をカスタマイズし、オーディオとビデオを購読するかどうかを選択するプロパティのセット。

見る UIのカスタマイズ

見る オーディオとビデオの調整.

  • completionHandler- (オプション) この関数が呼び出されたときに非同期に呼び出される。 subscribe() メソッドが正常に完了するか、失敗するか。もし subscribe() メソッドが失敗すると、完了ハンドラーにエラー・オブジェクトが渡される。このオブジェクトは code そして message プロパティを使用する。

以下のコードは、クライアントが発行したストリーム以外のすべてのストリームを購読します:

session.on("streamCreated", function(event) {
    session.subscribe(event.stream);
});

// Replace with your token:
session.connect(token, function (error) {
    if(error) {
        // failed to connect
    }
});

について insertMode プロパティの properties パラメーターの Session.subscribe() メソッドは、パブリッシャ・オブジェクトがHTML DOMに挿入される方法を指定します。 targetElement パラメータを設定します。このパラメータには、以下のいずれかの値を設定できる:

  • "replace" - サブスクライバ・オブジェクトは、targetElement のコンテンツを置き換えます。これがデフォルトです。
  • "after" - Subscriber オブジェクトは、HTML DOM 内で targetElement の後に挿入される新しい要素です。(サブスクライバと targetElement の両方が同じ親要素を持ちます)。
  • "before" - Subscriber オブジェクトは、HTML DOM 内で targetElement の前に挿入される新しい要素です。(サブスクライバと targetElement の両方が同じ親要素を持ちます)。
  • "append" - サブスクライバ・オブジェクトは、targetElement の子要素として追加される新しい要素です。他の子要素がある場合、Publisher は targetElement の最後の子要素として追加されます。

例えば、次のコードは、新しいサブスクライバー・オブジェクトを subscriberContainer DOM要素:

session.on('streamCreated', function(event) {
  var subscriberProperties = {insertMode: 'append'};
  var subscriber = session.subscribe(event.stream,
    'subscriberContainer',
    subscriberProperties,
    function (error) {
      if (error) {
        console.log(error);
      } else {
        console.log('Subscriber added.');
      }
  });
});

サブスクライバーオブジェクトは element プロパティが設定され、そのプロパティはそれを含む HTML DOM 要素に設定されます。

配信停止(JavaScript)

購読しているストリームの再生を停止する:

session.unsubscribe(subscriber);

ストリームをサブスクライブするには、まず、Subscriber.Builder オブジェクトをインスタンス化します。 Subscriber.Builder(Context context, Stream stream) コンストラクタに渡します。Subscriber用のAndroidアプリケーション・コンテキストとStreamオブジェクトを渡します。コンストラクタを呼び出します。 build() メソッドを呼び出して、サブスクライバ・オブジェクトを作成します。次に subscribe() メソッドを呼び出して、ストリームの購読を開始します:

mSubscriber = new Subscriber.Builder(context, stream)
    .build();
mSession.subscribe(mSubscriber);

について SubscriberKit.SubscriberListener.onConnected(SubscriberKit subscriber) メソッドは、アプリがサブスクライバーのストリームを受信し始めるときに呼び出されます。この時点で、サブスクライバのビュー(メソッドによって返される)を追加できます。 getView() メソッド)をandroid.view.ViewGroupオブジェクトのサブビューとしてアプリに表示する:

@Override
public void onConnected(subscriber) {
    // mViewContainer is an Android View
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
            getResources().getDisplayMetrics().widthPixels, getResources()
                    .getDisplayMetrics().heightPixels);
    mViewContainer.addView(mSubscriber.getView(), layoutParams);
}

ストリームからの配信停止

購読しているストリームの再生を停止するには Session.unsubscribe(Subscriber subscriber) メソッドを使用する:

mSession.unsubscribe(mSubscriber);

サブスクライバは切断され、そのビューはそのスーパービューから削除されます。

ストリームを購読するには OTSubscriber init(stream:delegate:) メソッドを呼び出し、OTStream オブジェクトとサブスクライバ関連のメッセージを受け取るデリゲート・オブジェクトを渡す。そしてOTSession subscribe(_:error:) メソッドを使ってストリームの購読を開始する:

func session(_ session: OTSession, streamCreated stream: OTStream) {
    subscriber = OTSubscriber(stream: stream, delegate: self)
    var error: OTError?
    session.subscribe(subscriber!, error: &error)
    
    if error {
        print("subscribe failed with error: \(error)")
    }
}

について OTSubscriberDelegate subscriberDidConnect(toStream:) メッセージが送信されます。この時点で、サブスクライバのビュー ( OTSubscriber view プロパティ)をアプリに追加する:

func subscriberDidConnect(toStream subscriber: OTSubscriberKit) {
    if let subscriberView = self.subscriber?.view {
        subscriberView.frame = CGRect(x: 0, y: 300, width: 400, height: 300)
        self.view.addSubview(subscriberView)
    }
}

ストリームからの配信停止

購読しているストリームの再生を停止するには OTSession unsubscribe(_:error:) メソッドを使用する:

var error: OTError?
session.unsubscribe(subscriber, error: &error)
if (error) {
    print("unsubscribe failed with error: \(error)")
}

サブスクライバは切断されます。次に、そのビューをそのスーパービューから削除します:

subscriber.view?.removeFromSuperview()

ストリームを購読するには [OTSubscriber initWithStream:] メソッドを呼び出し、OTStream オブジェクトとサブスクライバ関連のメッセージを受け取るデリゲート・オブジェクトを渡す。そして[OTSession subscribe:error] メソッドを使ってストリームの購読を開始する:

- (void)session:(OTSession*)session streamCreated:(OTStream*)stream
{
    subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
    OTError* error = nil;
    [session subscribe:subscriber error:&error]
    if (error) {
      NSLog(@"subscribe failed with error: (%@)", error);
    }
}

について [OTSubscriberDelegate subscriberDidConnectToStream:] メッセージが送信されます。この時点で、サブスクライバのビュー ( OTSubscriber.view プロパティ)をアプリに追加する:

- (void)subscriberDidConnectToStream:(OTSubscriber*)subscriber
{
    [subscriber.view setFrame:CGRectMake(0, 300, 400, 300)];
    [self.view addSubview:subscriber.view];
}

ストリームからの配信停止

購読しているストリームの再生を停止するには [OTSession unsubscribe:error:] メソッドを使用する:

OTError* error = nil;
[session unsubscribe:_subscriber error:&error]
if (error) {
  NSLog(@"unsubscribe failed with error: (%@)", error);
}

サブスクライバは切断されます。次に、そのビューをそのスーパービューから削除します:

[subscriber.view removeFromSuperview:];

ストリームをサブスクライブするには、まずサブスクライバー・オブジェクトをインスタンス化します。 Subscriber(context, stream, renderer) コンストラクタを使用します。サブスクライバの Windows アプリケーション・コンテキスト、Stream オブジェクト、およびビデオ・レンダラを渡します。

について OpenTok.IVideoRenderer インターフェースは、ビデオレンダラーを定義する。その OpenTok.VideoRenderer クラスは、Vonage Video Windows SDK に含まれており、Windows Presentation Framework コントロールにビデオをレンダリングします。VideoRenderer オブジェクトは、System.Windows.Controls.Control のサブクラスです。

この要素をビュー階層に追加できます。または、独自のカスタム動画レンダラーを作成して OpenTok.IVideoRenderer インターフェイスがある。

に電話する。 subscribe() メソッドを呼び出して、ストリームの購読を開始します:

VideoRenderer videoRenderer = new VideoRenderer();
// Add the video renderer to the application's view hierarchy.

Subscriber subscriber = new Subscriber(Context.Instance, stream, renderer);
subscriber.Error += Subscriber_Error;
session.subscribe(subscriber);

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

サブスクライバオブジェクトは Error ストリームへのサブスクライブにエラーが発生した場合は、イベントをコールする。をチェックする。 ErrorCode プロパティに渡され、購読に失敗した理由の詳細を見ることができます。(その OpenTok.ErrorCode を定義する。 ErrorCode 値)

サブスクライバーオブジェクトは Connected イベントは、アプリがサブスクライバーのストリームを受信し始めるときに発生する。

注: OpenTok.Subscriber クラスは System.IDisposable インターフェースを実装しています。必ず Dispose() メソッドを使用して、オブジェクトが不要になったときにそのリソースを解放します(たとえば、Subscriber がビデオのストリーミングを停止したときや、アプリまたはウィンドウが閉じるときなど)。

を作成することができる。 カスタムオーディオドライバ すべての出版社と購読者が使用できる。

ストリームからの配信停止

購読しているストリームの再生を停止するには Session.Unsubscribe(subscriber) メソッドを使用する:

session.Unsubscribe(subscriber);

サブスクライバは切断され、そのビューはそのスーパービューから削除されます。

について on_stream_received コールバック関数(前のセクションを参照)には stream パラメータへのポインタである。 otc_stream 構造体が新しいストリームを表します。ストリームを購読するには otc_subscriber_callbacks インスタンスを作成し、サブスクライバー関連イベントのコールバック関数を設定し、そして otc_subscriber_new() 関数に渡す。 otc_stream そして otc_subscriber_callbacks インスタンス

char *user_data = strdup("Session user data");

static void on_subscriber_connected(otc_subscriber *subscriber,
                                    void *user_data,
                                    const otc_stream *stream) {
  // Called when the subscriber connects to the stream.
}

static void on_render_frame(otc_subscriber *subscriber,
                            void *user_data,
                            const otc_video_frame *frame) {
  // Called when the subscriber is ready to render a new video frame
}

static void on_error(otc_subscriber *subscriber,
                      void *user_data) {
  // Called when there is an error.
}

struct otc_subscriber_callbacks subscriber_callbacks = {0};
subscriber_callbacks.user_data = user_data;
subscriber_callbacks.on_connected = on_subscriber_connected;
subscriber_callbacks.on_render_frame = on_subscriber_render_frame;
subscriber_callbacks.on_error = on_subscriber_error;

otc_subscriber *subscriber = otc_subscriber_new(stream,
                                                &subscriber_callbacks);
if (subscriber == NULL) {
  printf("Could not create OpenTok subscriber successfully");
  return;
}

if (otc_session_subscribe(session, subscriber) != OTC_SUCCESS) {
  printf("Could not subscribe successfully.");
}

を使用する。 user_data のメンバーである。 otc_subscriber_callbacks 構造体に、コールバック関数で参照したいデータを設定する。この例では、文字列オブジェクトへのポインタを設定している。しかし、意味のある情報を含む他の型のインスタンスへのポインタにすることもできます。

他のメンバー otc_subscriber_callbacks 構造体はそれぞれ、サブスクライバに関連するイベントが発生したときに呼び出されるコールバック関数である:

  • on_connected - 加入者がオーディオビデオストリームに接続するときにコールされる。
  • on_render_frame - サブスクライバが新しいビデオフレームをレンダリングする準備ができるたびに呼び出される。
  • on_error - 加入者エラーが発生したときにコールされる。

すべてのコールバックは、アプリケーションやメインスレッド上ではなく、内部スレッド上で行われる。アプリケーションは、内部スレッドのブロックを避けるために、できるだけ早くコールバックを返すべきである。

参照 otc_subscriber_callbacks 各コールバック関数の詳細については、Vonage Video Linux SDK リファレンスを参照してください。

ストリームからの配信停止

購読しているストリームの再生を停止するには otc_session_unsubscribe() 関数に渡す。 otc_session そして otc_subscriber のインスタンスである:

if (session.unsubscribe(session, subscriber) ==  OTC_SUCCESS) {
  printf("Unsubscribed from the stream successfully.");
  otc_subscriber_delete(subscriber);
} else {
  printf("Could not unsubscribe successfully.");
};

に電話する。 otc_subscriber_delete() 関数を使用して、サブスクライバのインスタンス(それにバインドされているすべてのハードウェアと UI リソースを含む)を解放します。

サブスクライバー・オブジェクトは破棄され、ストリーム表示は HTML DOM から削除されます。