出版する基本
このガイドでは、ストリームを公開するための基本的な手順、つまりパブリッシャーの作成、セッションでのストリームの開始、ストリームの安全な停止、終了時のリソースの破棄について説明します。
Publisherオブジェクトは、Vonage Videoセッションで使用するために、システムのマイクとカメラからオーディオ/ビデオ・ストリームをキャプチャするために使用されます。
パブリッシャーを使って 画面共有 ビデオストリーム
パブリッシャーオブジェクトの初期化
について OT.initPublisher() メソッドは、Publisher オブジェクトを初期化して返します。Publisher オブジェクトは、公開する動画のビューを表します:
var publisher;
var targetElement = 'publisherContainer';
publisher = OT.initPublisher(targetElement, null, function(error) {
if (error) {
// The client cannot publish.
// You may want to notify the user.
} else {
console.log('Publisher initialized.');
}
});
について OT.initPublisher() メソッドは3つのパラメーターを取る:
targetElement- オプション)パブリッシャの動画が置き換わる DOM 要素を定義します。properties- オプション)パブリッシャをカスタマイズするプロパティのセット。パブリッシャのpropertiesパラメータには、パブリッシャーが使用する音声入力デバイスと映像入力 デバイスを指定するオプションも含まれる。またpropertiesパラメータには、HTMLページのビューの外観をカスタマイズするためのオプションも含まれています ( UIのカスタマイズを参照)、オーディオとビデオを公開するかどうかを選択します。 オーディオまたはビデオのみの公開その他のパブリッシャーオプションについてはpropertiesOTのパラメータ。initPublisher() メソッドを使用する。completionHandler- (オプション) パブリッシャーが正常にインスタンス化されたか、エラーになったかを指定する 完了ハンドラ。
このパブリッシャー・オブジェクトを Session.publish() メソッドを使用してストリームをセッションに発行します。
電話する前に Session.publish()このPublisherオブジェクトを使用して、Publisherに接続されたマイクとカメラをテストできます。
について insertMode プロパティの properties パラメーターの OT.initPublisher() メソッドは、パブリッシャ・オブジェクトがHTML DOMに挿入される方法を指定します。 targetElement パラメータを設定します。このパラメータには、以下のいずれかの値を設定できる:
"replace"- Publisherオブジェクトは、targetElementのコンテンツを置換します。これは既定です。"after"- Publisherオブジェクトは、HTML DOMのtargetElementの後に挿入される新しい要素です。(PublisherとtargetElementはどちらも同じ親要素を持ちます)。"before"- Publisherオブジェクトは、HTML DOMのtargetElementの前に挿入される新しい要素です。(PublisherとtargetElementはどちらも同じ親要素を持ちます)。"append"- Publisherオブジェクトは、targetElementの子要素として追加される新しい要素です。他の子要素がある場合、Publisher は targetElement の最後の子要素として追加されます。
例えば、次のコードは、新しいPublisherオブジェクトを publisherContainer DOM要素:
// Try setting insertMode to other values: "replace", "after", or "before":
var publisherProperties = {insertMode: "append"};
var publisher = OT.initPublisher('publisherContainer', publisherProperties, function (error) {
if (error) {
console.log(error);
} else {
console.log("Publisher initialized.");
}
});
基本的なパブリッシャーには Publisher.Builder クラスでパブリッシャーオブジェクトをインスタンス化します。パブリッシャーのAndroidアプリケーションコンテキストを渡します:
mPublisher = new Publisher.Builder(context)
.build();
を呼び出して、基本的なパブリッシャー関連イベントのリスナーオブジェクトを追加します。 setPublisherListener(PublisherKit.PublisherListener listener) メソッドを呼び出します:
mPublisher.setPublisherListener(this);
イベントリスナーオブジェクトとして指定したオブジェクトに、PublisherKit.PublisherListenerインターフェイスのメソッドを実装します。これらのメソッドは、パブリッシャー関連のイベントが発生すると呼び出されます。
について getView() メソッドは、公開する動画のビューを返します。android.view.ViewGroupオブジェクトのサブビューとして追加し、アプリに表示します:
mPublisherViewContainer.addView(mPublisher.getView());
パブリッシャー・オブジェクトを Session.publish() メソッドを使用してストリームをセッションに発行します。
パブリッシャーのカスタム設定を定義するために Publisher.Builder オブジェクトの他のメソッドを呼び出すことができます:
mPublisher = new Publisher.Builder(context)
.name("Bob")
.audioTrack(true)
.frameRate(CameraCaptureFrameRate.FPS_7)
.resolution(CameraCaptureResolution.LOW)
.videoTrack(false)
.capturer(mCapturer)
.renderer(mRenderer)
.build();
Vonage Video Media Routerを使用するセッション(Vonage Video Media Routerを使用するセッションで メディアモード ルーティングに設定されている場合)、フレームレートを下げると、ストリームが使用する帯域幅が比例して減少する。ただし、メディアモードが中継に設定されているセッショ ンでは、フレームレートを下げてもストリームの帯域幅は減少しない。
カスタムビデオキャプチャを使用して、カスタマイズしたビデオソースでストリームを公開できます。また、カスタム ビデオ キャプチャを使用して、画面共有ストリームを公開することもできます。
また、公開ストリームにカスタマイズしたオーディオソースを使用することもできます。 カスタムオーディオドライバの使用.
を使用する。 OTPublisher オブジェクトを使ってパブリッシャーを作成します。その view プロパティには、公開する動画のビューが含まれます:
let publisher = OTPublisher(delegate: self, settings: OTPublisherSettings())!
if let publisherView = publisher.view {
self.view.addSubview(publisherView)
publisherView.frame = CGRect(x: 0, y: 0, width: 200, height: 150)
}
デリゲートオブジェクトとして指定したオブジェクトに OTPublisherDelegate プロトコルのメソッドを実装します。これらのメソッドは、パブリッシャー関連のイベントが発生したときに呼び出されます。
パブリッシャー・オブジェクトを OTSession publish(_:error:) メソッドを使用してストリームをセッションに発行します。
OTPublisherSettings オブジェクトの他のプロパティを設定することで、パブリッシャー のカスタム設定を定義することができます:
let publisherSettings = OTPublisherSettings()
publisherSettings.name = "Bob's video"
publisherSettings.audioTrack = false
publisherSettings.videoTrack = true
publisherSettings.cameraResolution = .high
publisherSettings.cameraFrameRate = .rate30FPS
let publisher = OTPublisher(delegate: self, settings: publisherSettings)!
Vonage Video Media Routerを使用するセッション(Vonage Video Media Routerを使用するセッションで メディアモード ルーティングに設定されている場合)、フレームレートを下げると、ストリームが使用する帯域幅が比例して減少する。ただし、メディアモードが中継に設定されているセッショ ンでは、フレームレートを下げてもストリームの帯域幅は減少しない。
カスタムビデオキャプチャを使用して、カスタマイズしたビデオソースでストリームを公開できます。 カスタムビデオキャプチャーの使用.カスタムビデオキャプチャを使用して、画面共有ストリームを公開することもできます。 スクリーン共有.
また、公開ストリームにカスタマイズしたオーディオソースを使用することもできます。 カスタムオーディオドライバの使用.
を使用する。 OTPublisher オブジェクトを使ってパブリッシャーを作成します。その view プロパティには、公開する動画のビューが含まれます:
OTPublisher publisher = [[OTPublisher alloc]
initWithDelegate:self
settings:[[OTPublisherSettings alloc] init]];
[self.view addSubview:publisher.view];
[publisher.view setFrame:CGRectMake(0, 0, 200, 150)];
デリゲートオブジェクトとして指定したオブジェクトに OTPublisherDelegate プロトコルのメソッドを実装します。これらのメソッドは、パブリッシャー関連のイベントが発生したときに呼び出されます。
パブリッシャー・オブジェクトを [OTSession publish:error] メソッドを使用してストリームをセッションに発行します。
OTPublisherSettings オブジェクトの他のプロパティを設定することで、パブリッシャー のカスタム設定を定義することができます:
OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.name = @"Bob's video";
_publisherSettings.audioTrack = NO;
_publisherSettings.videoTrack = YES;
_publisherSettings.cameraResolution = OTCameraCaptureResolutionHigh;
_publisherSettings.cameraFrameRate = OTCameraCaptureFrameRate30FPS;
_publisher = [[OTPublisher alloc]
initWithDelegate:self
settings:_publisherSettings];
Vonage Video Media Routerを使用するセッション(Vonage Video Media Routerを使用するセッションで メディアモード ルーティングに設定されている場合)、フレームレートを下げると、ストリームが使用する帯域幅が比例して減少する。ただし、メディアモードが中継に設定されているセッショ ンでは、フレームレートを下げてもストリームの帯域幅は減少しない。
カスタムビデオキャプチャを使用して、カスタマイズしたビデオソースでストリームを公開できます。 カスタムビデオキャプチャーの使用.
カスタムビデオキャプチャを使用して、スクリーン共有ストリームを公開することもできます。 スクリーン共有.
また、公開ストリームにカスタマイズしたオーディオソースを使用することもできます。 カスタムオーディオドライバの使用.
基本的なパブリッシャーは 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() メソッドを使用してストリームをセッションに発行します。
デフォルトでは、パブリッシャはデフォルトのビデオ・キャプチャを使用します。このビデオ・キャプチャでは、システムのデフォルトのマイクとカメラが、公開ストリームのオーディオおよびビデオ・ソースとして使用されます。これは、Vonage Video 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(640x480ピクセル)、およびHigh(1280x720ピクセル)、およびHigh 1080p(1920x1080ピクセル)。
ビデオキャプチャラーは、指定した解像度に最も近いシステムでサポートされている解像度を使用します。
デフォルトでは、Vonage Video Windows SDK の VideoRenderer クラスで定義されている Windows Presentation Foundation 用のデフォルトのビデオ レンダラーが使用されます。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);
}
注: Vonage Video Media Routerを使用するセッション(Vonage Video Media Routerを使用するセッションで メディアモード ルーティングに設定されている場合)、フレームレートを下げると、ストリームが使用する帯域幅が比例して減少する。ただし、メディアモードが中継に設定されているセッショ ンでは、フレームレートを下げてもストリームの帯域幅は減少しない。
の他のオプションのパラメータを渡す。 Publisher() コンストラクタで公開ストリームのカスタム設定を定義します:
name- パブリッシャービデオの名前。をご覧ください。Stream.Nameこのパブリッシャーによって発行されたストリームのプロパティは、 (全てのクライアントで)この値に設定されます。hasAudioTrack- 公開ストリームにオーディオトラックを含めるかどうか。デフォルトはtrue.hasVideoTrack- 公開ストリームにオーディオトラックを含めるかどうか。デフォルトはtrue.stereo- 公開ストリームでステレオ音声を有効にするかどうか。デフォルトはfalse.これをtrueステレオマイクからのオーディオを公開する。
また、次のこともできる。 パブリッシャーが使用するオーディオソースを変更する.を作成することもできる。 カスタムオーディオドライバ すべての出版社と購読者が使用できる。
カスタムビデオキャプチャを使用して、カスタマイズしたビデオソースでストリームを公開できます。 カスタムビデオキャプチャーの使用.
カスタムビデオキャプチャを使用して、スクリーン共有ストリームを公開することもできます。 スクリーン共有.
注: OpenTok.Publisher クラスと OpenTok.VideoCapturer クラスは、System.IDisposable インターフェイスを実装しています。必ず Dispose() メソッドを使用して、オブジェクトが不要になったときにリソースを解放します(たとえば、パブリッシャが削除されたときや、アプリまたはウィンドウが終了したときなど)。
型の構造体を作ることから始める。 otc_publisher_callbacks:
char *publisher_user_data = strdup("Publisher user data");
static void on_publisher_stream_created(otc_publisher *publisher,
void *user_data,
const otc_stream *stream) {
// The stream has been created.
}
static void on_publisher_render_frame(otc_publisher *publisher,
void *user_data,
const otc_video_frame *frame) {
// You can render the frame to the UI.
}
static void on_publisher_stream_destroyed(otc_publisher *publisher,
void *user_data,
const otc_stream *stream) {
// The stream has been destroyed.
}
static void on_publisher_error(otc_publisher *publisher,
void *user_data,
const char* error_string,
enum otc_publisher_error_code error_code) {
// Handle the error.
}
struct otc_publisher_callbacks publisher_callbacks = {0};
publisher_callbacks.user_data = publisher_user_data;
publisher_callbacks.on_stream_created = on_publisher_stream_created;
publisher_callbacks.on_render_frame = on_publisher_render_frame;
publisher_callbacks.on_stream_destroyed = on_publisher_stream_destroyed;
publisher_callbacks.on_error = on_publisher_error;
を使用する。 user_data のメンバーである。 otc_publisher_callbacks 構造体に、コールバック関数で参照したいデータを設定する。この例では、char配列へのポインタを設定している。しかし、意味のある情報を含む他の型のインスタンスへのポインタにすることもできます。
他のメンバー otc_publisher_callbacks 構造体はそれぞれ、公開ストリームに関連するイベントが発生したときに呼び出されるコールバック関数である:
on_stream_created- パブリッシャーがセッションへのストリーミングを開始する時に呼ばれる。on_render_frame- パブリッシャーがストリームに新しいビデオフレームをレンダリングする準備ができるたびに呼び出されます。on_stream_destroyed- パブリッシャーのストリームが破棄されるときに呼ばれます。on_error- ストリームを公開する際にエラーが発生した場合に呼び出されます。
すべてのコールバックは、アプリケーションやメインスレッド上ではなく、内部スレッド上で行われる。アプリケーションは、内部スレッドのブロックを避けるために、できるだけ早くコールバックを返すべきである。
参照 otc_publisher_callbacks 各コールバック関数の詳細については、OpenTok Linux SDK リファレンスを参照してください。
に電話する。 otc_publisher_new() を作成する。 otc_publisher 構造体で、OpenTok パブリッシャーを表します:
publisher = otc_publisher_new("Bob's video",
NULL, /* Use the system camera. */
&publisher_callbacks);
if (publisher == NULL) {
printf("Could not create OpenTok publisher successfully");
otc_session_delete(session);
otc_destroy();
return EXIT_FAILURE;
}
について otc_publisher_new() メソッドは3つの引数を取る:
name- ストリームの発行者を示す名前(オプション)。capturer- カスタムビデオキャプチャを提供したい場合、このパラメータを使用する。このパラメータがNULLパブリッシャーはデフォルトのシステムカメラをビデオソースとして使用します。
参照 カスタムビデオキャプチャーの使用 カスタムビデオキャプチャーの実装方法をご覧ください。
callbacks- についてotc_publisher_callbacksパブリッシャーコールバック構造体
を作成する。 カスタムオーディオドライバ すべての出版社と購読者が使用できる。
カスタムビデオキャプチャを使用して、カスタマイズしたビデオソースでストリームを公開できます。 カスタムビデオキャプチャーの使用.
ストリームの公開
パブリッシャー・オブジェクトと セッション次のステップは、それをセッション・オブジェクトに渡してストリーミングを開始することだ。
ストリームを発行するには、OTSessionオブジェクトの子としてOTPublisherコンポーネントを追加します:
<OTSession
applicationId="your-application-id"
sessionId="the session ID"
token="the token">
<OTPublisher/>
</OTSession>
クライアントがセッションに接続すると、パブリッシャーはストリーミングを開始します。OTPublisherオブジェクトは streamCreated イベントをディスパッチする。これは error イベント error パブリッシングを設定する。 eventHandlers プロパティを設定します。 streamCreated そして error プロパティをコールバック関数に渡す:
<OTPublisher
eventHandlers={{
streamCreated: () => {
console.log('The publisher started streaming.');
},
error: event => {
console.log('Publisher error:', event);
},
}}/>
パブリッシャーオブジェクトを publish() メソッドを呼び出して、ストリームをセッションに公開します:
publisher = OT.initPublisher('replacementElementId');
session.publish(publisher, function(error) {
if (error) {
console.log(error);
} else {
console.log('Publishing a stream.');
}
});
2番目のパラメーターは完了ハンドラー関数で、発行に失敗した場合はエラーオブジェクトが渡される。そうでない場合は、エラーは渡されずに完了ハンドラ関数が呼び出されます。
このコードでは session がSessionオブジェクトであること、そしてクライアントがそのセッションに接続していること。詳細は セッションへの参加.
Publish オブジェクトは streamCreated イベントが発生する:
var publisher = OT.initPublisher();
session.publish(publisher, function(error) {
if (error) {
console.log(error);
} else {
console.log('Publishing a stream.');
}
});
publisher.on('streamCreated', function (event) {
console.log('The publisher started streaming.');
});
パブリッシャ・オブジェクトは element プロパティが設定され、そのプロパティはそれを含む HTML DOM 要素に設定されます。
公開ストリームの最大ビットレートを設定できます。最大ビットレートを設定すると 最大ビットレートを設定すると、ユーザーが従量制接続から接続する場合に、帯域幅の消費を抑えることができます。 帯域幅の消費を抑えることができます。以下を参照してください。 本書.
パブリッシャーオブジェクトを publish(PublisherKit publisher) メソッドを呼び出して、ストリームをセッションに公開します:
mSession.publish(mPublisher);
このコードでは mSession がSessionオブジェクトであること、そしてクライアントがそのセッションに接続していること。詳細は セッションへの参加.
について PublisherKit.PublisherListener.onStreamCreated(PublisherKit publisher, Stream stream) メソッドが呼ばれます:
@Override
public void onStreamCreated(publisher, stream) {
// The publisher started streaming.
}
公開ストリームの最大ビットレートを設定できます。最大ビットレートを設定すると 最大ビットレートを設定すると、ユーザーが従量制接続から接続する場合に、帯域幅の消費を抑えることができます。 帯域幅の消費を抑えることができます。以下を参照してください。 本書.
パブリッシャーオブジェクトを OTSession publish(_:error:) メソッドを使用して、ストリームをセッションに公開します:
var error: OTError?
session.publish(publisher, error: &error)
if let error = error {
print("publishing failed with error: \(error)");
}
このコードでは session がSessionオブジェクトであること、そしてクライアントがそのセッションに接続していること。詳細は セッションへの参加.
について OTPublisherDelegate publisher(_:streamCreated:) メッセージはパブリッシャーがセッションへのストリーミングを開始するときに送られる。
パブリッシャーオブジェクトを [OTSession publish:error] メソッドを使用して、ストリームをセッションに公開します:
OTError* error = nil;
[session publish:publisher error:&error];
if (error) {
NSLog(@"publishing failed with error: (%@)", error);
}
このコードでは session がSessionオブジェクトであること、そしてクライアントがそのセッションに接続していること。詳細は セッションの作成.
について [OTPublisherDelegate publisher:streamCreated:] メッセージはパブリッシャーがセッションへのストリーミングを開始するときに送られる。
公開ストリームの最大ビットレートを設定できます。最大ビットレートを設定すると 最大ビットレートを設定すると、ユーザーが従量制接続から接続する場合に、帯域幅の消費を抑えることができます。 帯域幅の消費を抑えることができます。以下を参照してください。 本書.
パブリッシャーオブジェクトを 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.");
}
公開ストリームの最大ビットレートを設定できます。最大ビットレートを設定すると 最大ビットレートを設定すると、ユーザーが従量制接続から接続する場合に、帯域幅の消費を抑えることができます。 帯域幅の消費を抑えることができます。以下を参照してください。 本書.
アプリケーションがセッションに接続すると on_connected() のコールバック関数である。 otc_session_callbacks 構造体が呼び出される ( セッションへの参加).これに対して otc_session_publish() 関数を使用して、ストリームを OpenTok セッションに公開します:
if (otc_session_publish(session, publisher) != OTC_SUCCESS) {
printf("Could not publish successfully.");
}
について otc_session_publish() 関数は2つの引数を取る:
- へのポインタを返します。
otc_session構造になっている。 - について
otc_publisher構造になっている。
を返す。 OTC_SUCCESS を返します。あるいはエラーを返し otc_error コールバックが呼び出される。
公開ストリームの最大ビットレートを設定できます。最大ビットレートを設定すると 最大ビットレートを設定すると、ユーザーが従量制接続から接続する場合に、帯域幅の消費を抑えることができます。 帯域幅の消費を抑えることができます。以下を参照してください。 本書.
パブリッシャー劣化の優先設定
帯域幅やCPUが制限されている場合、ビデオエンジンはパブリッシャービデオのフレームレートや解像度を下げ、制限に合わせることができる。
デグラデーション・プリファレンスは、この動作を微調整するためのコンフィギュレーション設定です。
開発者は、ユースケースや要件に応じて、劣化プリファレンスを定義し、適用する責任がある。
これはプリファレンスとして機能し、ビデオエンジンは選択されたプリファレンスに従おうとするが、結果は保証されない。
を使用する場合、このプリファレンスは異なる動作をすることがあります。 スケーラブルビデオビデオエンジンは、解像度を落とす代わりにレイヤーを削除することができる。
コンテンツのヒント とデグラデーション・プリファレンスは、異なるが関連した目的を果たす:Content Hint は伝送されるコンテンツのタイプを記述し、Degradation preference はエンコーディング戦略を制御します。コンテンツヒントを設定すると、ビデオエンジンは自動的に適切なデグラデーションプリファレンスを決定します(たとえば、"text" は自動的に解像度を維持するように選択します)。劣化プリファレンスを明示的に設定すると、この自動選択が上書きされます。
Setting the degradation preference
パブリッシャー劣化の優先順位を設定するには publisher.setDegradationPreference で提供されている利用可能なオプションのいずれかを使用する。 DegradationPreference:
publisher.setDegradationPreference(DegradationPreference.DegradationPreferenceMaintainResolution);
以下の通りである。 DegradationPreference の値が利用できる:
DegradationPreferenceNotSet:デフォルト値。ビデオエンジンが最適な劣化の優先順位を決定する。DegradationPreferenceMaintainFrameRateAndResolution:ビデオエンジンはフレームレートを一定に保ち、解像度を下げないようにします。DegradationPreferenceMaintainFrameRate:ビデオエンジンはフレームレートを一定に保とうとしますが、必要に応じて解像度を下げることがあります。DegradationPreferenceMaintainResolution:ビデオエンジンは解像度を下げませんが、必要に応じてフレームレートを下げることがあります。DegradationPreferenceBalanced:ビデオエンジンは必要に応じて解像度とフレームレートのバランスを取ろうとします。
Getting the current degradation preference
現在設定されているパブリッシャー劣化プリファレンスを取得するには publisher.getDegradationPreference:
DegradationPreference preference = publisher.getDegradationPreference();
Setting the degradation preference
パブリッシャー劣化の優先順位を設定するには publisher.degradationPreference プロパティを OTDegradationPreference:
publisher.degradationPreference = .maintainResolution
以下の通りである。 OTDegradationPreference の値が利用できる:
notSet:デフォルト値。ビデオエンジンが最適な劣化の優先順位を決定する。maintainFrameRateAndResolution:ビデオエンジンはフレームレートを一定に保ち、解像度を下げないようにします。maintainFrameRate:ビデオエンジンはフレームレートを一定に保とうとしますが、必要に応じて解像度を下げることがあります。maintainResolution:ビデオエンジンは解像度を下げませんが、必要に応じてフレームレートを下げることがあります。balanced:ビデオエンジンは必要に応じて解像度とフレームレートのバランスを取ろうとします。
Getting the current degradation preference
現在設定されているパブリッシャー劣化プリファレンスを取得するには publisher.degradationPreference 財産である:
let preference = publisher.degradationPreference;
Setting the degradation preference
パブリッシャー劣化の優先順位を設定するには publisher.degradationPreference プロパティを OTDegradationPreference:
publisher.degradationPreference = OTDegradationPreferenceMaintainResolution;
以下の通りである。 OTDegradationPreference の値が利用できる:
OTDegradationPreferenceNotSet:デフォルト値。ビデオエンジンが最適な劣化の優先順位を決定する。OTDegradationPreferenceMaintainFrameRateAndResolution:ビデオエンジンはフレームレートを一定に保ち、解像度を下げないようにします。OTDegradationPreferenceMaintainFrameRate:ビデオエンジンはフレームレートを一定に保とうとしますが、必要に応じて解像度を下げることがあります。OTDegradationPreferenceMaintainResolution:ビデオエンジンは解像度を下げませんが、必要に応じてフレームレートを下げることがあります。OTDegradationPreferenceBalanced:ビデオエンジンは必要に応じて解像度とフレームレートのバランスを取ろうとします。
Getting the current degradation preference
現在設定されているパブリッシャー劣化プリファレンスを取得するには publisher.degradationPreference 財産である:
OTDegradationPreference preference = publisher.degradationPreference;
Setting the degradation preference
パブリッシャー劣化の優先順位を設定するには publisher.DegradationPreference プロパティを DegradationPreference:
publisher.DegradationPreference = DegradationPreference.MaintainResolution;
以下の通りである。 DegradationPreference の値が利用できる:
NotSet:デフォルト値。ビデオエンジンが最適な劣化の優先順位を決定する。MaintainFrameRateAndResolution:ビデオエンジンはフレームレートを一定に保ち、解像度を下げないようにします。MaintainFrameRate:ビデオエンジンはフレームレートを一定に保とうとしますが、必要に応じて解像度を下げることがあります。MaintainResolution:ビデオエンジンは解像度を下げませんが、必要に応じてフレームレートを下げることがあります。Balanced:ビデオエンジンは必要に応じて解像度とフレームレートのバランスを取ろうとします。
Getting the current degradation preference
現在設定されているパブリッシャー劣化プリファレンスを取得するには publisher.DegradationPreference 財産である:
DegradationPreference preference = publisher.DegradationPreference;
Setting the degradation preference
パブリッシャー劣化の優先順位を設定するには otc_publisher_set_degradation_preference で提供されている利用可能なオプションのいずれかを使用する。 otc_degradation_preference:
otc_publisher_set_degradation_preference(publisher, OTC_DEGRADATION_PREFERENCE_MAINTAIN_RESOLUTION);
以下の通りである。 otc_degradation_preference の値が利用できる:
OTC_DEGRADATION_PREFERENCE_NOT_SET:デフォルト値。ビデオエンジンが最適な劣化の優先順位を決定する。OTC_DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE_AND_RESOLUTION:ビデオエンジンはフレームレートを一定に保ち、解像度を下げないようにします。OTC_DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE:ビデオエンジンはフレームレートを一定に保とうとしますが、必要に応じて解像度を下げることがあります。OTC_DEGRADATION_PREFERENCE_MAINTAIN_RESOLUTION:ビデオエンジンは解像度を下げませんが、必要に応じてフレームレートを下げることがあります。OTC_DEGRADATION_PREFERENCE_BALANCED:ビデオエンジンは必要に応じて解像度とフレームレートのバランスを取ろうとします。
Getting the current degradation preference
現在設定されているパブリッシャー劣化プリファレンスを取得するには otc_publisher_get_degradation_preference:
otc_degradation_preference preference = otc_publisher_get_degradation_preference(publisher);
出版社のストリーミングを停止する
誰がパブリッシュできるかをコントロールし、必要なときにパブリッシャーがセッションにストリーミングするのを止めます。
パブリッシャーをアンマウント(親 OTSession コンポーネントから削除)することで、 セッションへのストリーミングを止めることができます。例えば、以下のコードは30秒後にストリームの発行を停止します:
import React, {Component} from 'react';
import {View} from 'react-native';
import {OTSession, OTPublisher} from 'opentok-react-native';
class App extends Component {
constructor(props) {
super(props);
this.apiKey = 'your-api-key';
this.sessionId = 'valid-session-id';
this.token = 'valid-token';
this.publisherOptions = {
publishCaptions: true,
publishVideo: true,
publishAudio: false,
};
this.state = {
publishing: true,
};
this.publisherEventHandlers = {
streamCreated: event => {
setTimeout(
function () {
console.log(10);
this.setState({publishing: false});
}.bind(this),
10000,
);
},
};
}
render() {
return (
<View>
<OTSession
applicationId={this.apiKey}
sessionId={this.sessionId}
token={this.token}
{this.state.publishing ? (
<OTPublisher
eventHandlers={this.publisherEventHandlers}
ref={instance => {
this.publisher = instance;
}}
/>
) : null}
</OTSession>
</View>
);
}
}
export default App;
なお、ビデオやオーディオの送信は、個別に停止することができます(パブリッシュは可能です)。
公開されたストリームがセッションから離れるときの検出
をディスパッチします。 streamDestroyed イベントが発生する:
<OTPublisher
eventHandlers={{
streamDestroyed: function() {
console.log('The publisher stopped streaming.');
},
}}
/>
パブリッシャーを停止するには unpublish() メソッドを呼び出します:
session.unpublish(publisher);
なお、ビデオやオーディオの送信は、個別に停止することができます(パブリッシュは可能です)。
詳しくは オーディオとビデオの調整.
公開されたストリームがセッションから離れるときの検出
をディスパッチします。 streamDestroyed イベントが発生する:
var publisher = OT.initPublisher();
session.publish(publisher);
publisher.on("streamDestroyed", function (event) {
console.log("The publisher stopped streaming. Reason: "
+ event.reason);
});
について streamDestroyed イベントはStreamEventクラスで定義されています。このイベントには reason プロパティは、ストリームが終了した理由を詳細に記述する。これらの理由には以下が含まれる。 "clientDisconnected", "forceDisconnected", "forceUnpublished"あるいは "networkDisconnected".詳しくは ストリームイベント.
デフォルトでは、パブリッシャーが streamDestroyed イベントを呼び出すと、パブリッシャは破棄され、HTML DOM から削除されます。このデフォルトの動作を防ぐには preventDefault() メソッドを呼び出します:
publisher.on("streamDestroyed", function (event) {
event.preventDefault();
console.log("The publisher stopped streaming.");
});
パブリッシャ・オブジェクトを再利用してセッションに再度パブリッシュする場合は、デフォルトの動作を防止してパブリッシャを保持します。
また、パブリッシャーは destroyed イベントが発生します。このイベントに応答して、削除されたパブリッシャーに関連する DOM 要素を調整 (または削除) することができます。
パブリッシャーを停止するには unpublish(PublisherKit publisher) メソッドを呼び出します:
mSession.unpublish(mPublisher);
について PublisherKit.PublisherListener.onStreamDestroyed(PublisherKit publisher, Stream stream) メソッドが呼ばれます:
@Override
public void onStreamDestroyed(publisher, stream) {
// The publisher stopped streaming.
}
パブリッシャーを停止するには OTSession unpublish(_:error:) メソッドを呼び出す:
var error: OTError?
session.unpublish(publisher, error: &error)
if let error = error {
print("unpublishing failed with error: \(error)");
}
について OTPublisherDelegate publisher(_:streamDestroyed:) メッセージが送られます。このメッセージが送られたら、パブリッシャーのビューをスーパー ビューから削除してください:
publisher.view?.removeFromSuperview();
パブリッシャーを停止するには [OTSession unpublish:error:] メソッドを呼び出す:
OTError* error = nil;
[session unpublish:publisher error:&error];
if (error) {
NSLog(@"publishing failed with error: (%@)", error);
}
について [OTPublisherDelegate publisher:streamDestroyed:] メッセージが送られます。このメッセージが送られたら、パブリッシャーのビューをスーパー ビューから削除してください:
[publisher.view removeFromSuperview:];
パブリッシャーを停止するには 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.");
}
に電話する。 otc_session_unpublish() 関数に渡す。 otc_session そして otc_publisher 構造体である:
otc_status status = otc_session_unpublish(session, publisher);
if (status == OTC_SUCCESS) {
printf("Unpublished successfully.");
} else {
printf("Could not unpublish.");
}
パブリッシャーの削除(クリーンアップ)
パブリッシャを削除するには destroy() メソッド呼び出し destroy() は、Publisher オブジェクトを削除し、HTML DOM から削除します:
publisher.destroy();