一般的なカスタマイズ
Vonage Videoのユーザーインターフェイスをカスタマイズするには、いくつかの調整が可能です:
公開ストリームに名前を追加する
パブリッシャーの作成時に、ビデオに表示する名前を(オプションで)指定できます:
// Replace the first parameter with the target element ID:
var publisher = OT.initPublisher("myPublisher",
{name: "John"})
session.publish(publisher);
この名前を使ってクライアントを識別することができる。
トークン作成時に、クライアントに関するメタデータを追加することもできる。この名前はビデオでは自動的に表示されません。しかし、トークン作成時にデータを追加することで、より安全に情報を追加することができます(トークンはクライアントではなくサーバー上で作成されるため。詳しくは トークン作成.
クライアントは、パブリッシャまたはサブスクライバのビューで名前を非表示にすることを選択できます。以下を参照してください。 本節
パブリッシャーの名前は name() メソッドを実行する必要があります。 パブリッシャー・オブジェクトをインスタンス化する:
mPublisher = new Publisher.Builder(context)
.name("Bob's video")
.build();
この名前を使用して、ストリームを公開しているクライアントを識別できます。ストリーム・クラスには name プロパティあなたが ストリームを購読するこの名前をユーザー・インターフェース要素に表示することができます。
公開ストリームのnameプロパティを指定するには name プロパティを使用します:
let publisherSettings = OTPublisherSettings()
publisherSettings.name = "Juan"
let publisher = OTPublisher(delegate: self, settings: publisherSettings)
OTStream クラスは name プロパティあなたが ストリームを購読するこの名前をユーザー インターフェイス要素に表示できます。(また、この名前は、OpenTok.js ライブラリを使用する Web ページで動画を表示する場合にも表示されます)。
公開ストリームのnameプロパティを指定するには name プロパティを使用します:
OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.name = @"Juan";
_publisher = [[OTPublisher alloc]
initWithDelegate:self
settings:_publisherSettings];
OTStream クラスは name プロパティあなたが ストリームを購読するこの名前をユーザー インターフェイス要素に表示できます。(また、この名前は、OpenTok.js ライブラリを使用する Web ページで動画を表示する場合にも表示されます)。
パブリッシャーの名前は name() メソッドを実行する必要があります。 パブリッシャー・オブジェクトをインスタンス化する:
publisher = new Publisher(Context.Instance,
renderer: publisherVideoRenderer,
name: "Bob's video",
capturer: capturer);
この名前を使用して、ストリームを公開しているクライアントを識別できます。ストリーム・クラスには Name プロパティあなたが ストリームを購読するこの名前をユーザー・インターフェース要素に表示することができます。
パブリッシャーにミュートボタンを追加する
デフォルトでは、パブリッシャーまたはサブスクライバーのユーザー・インターフェイスには、ミュート・オーディオ・ボタンがあります。パブリッシャーの場合、ユーザーはクリックしてマイクのオン/オフを切り替えることができます。
ストリームを公開する際、ミュートボタンを表示するかどうかは style.buttonDisplayMode プロパティを OT.initPublisher() メソッドを使用する:
const publisher = OT.initPublisher(
'publisher-element-id', // Replace with the replacement element ID
{
name: 'John',
style: {buttonDisplayMode: 'on'}
}
);
session.publish(publisher);
について style.buttonDisplayMode プロパティには3つの値のいずれかを設定できる:
- 「auto" - ミュートボタンは、ストリームが最初に表示されたときと、ユーザーがビデオにマウスオーバーしたときに表示されます(デフォルト)。
- 「off" - ミュートボタンは表示されません。
- 「on" - ミュートボタンが表示されます。
パブリッシャーを作成したら、ミュート・ボタンの表示モードを変更するには setStyle() メソッドを使用します。のドキュメントを参照してください。 Publisher.setStyle().
パブリッシャーのマイクをミュートするデフォルトのユーザーインターフェース要素はありません。しかし、ボタンなどの要素を追加して setPublishAudio() メソッドを呼び出します。を渡します。 false をミュートしてください:
mPublisher.setPublishAudio(false);
パス・イン true オーディオを公開する。
mPublisher.setPublishAudio(true);
パブリッシャーのマイクをミュートするデフォルトのユーザーインターフェース要素はありません。しかし、ボタンなどの要素を追加して publishAudio プロパティを設定します。プロパティを設定します。 publishAudio プロパティ false をミュートしてください:
publisher.publishAudio = false
を設定する。 publishAudio プロパティ true オーディオを公開する。
publisher.publishAudio = true
パブリッシャーのマイクをミュートするデフォルトのユーザーインターフェース要素はありません。しかし、ボタンなどの要素を追加して publishAudio プロパティを設定します。プロパティを設定します。 publishAudio プロパティ NO をミュートしてください:
publisher.publishAudio = NO;
を設定する。 publishAudio プロパティ YES オーディオを公開する。
publisher.publishAudio = YES;
パブリッシャーのマイクをミュートするデフォルトのユーザーインターフェース要素はありません。しかし、ボタンなどの要素を追加して PublishAudio プロパティを設定します。プロパティを false をミュートしてください:
publisher.PublishAudio = false;
プロパティを true オーディオを公開する。
publisher.PublishAudio = true;
加入者にミュートボタンを追加する
デフォルトでは、パブリッシャーまたはサブスクライバーのユーザー・インターフェイスには、ミュート・オーディ オ・ボタンがあります。サブスクライバの場合、ユーザーはクリックしてスピーカーのオン/オフを切り替えることができます。
ストリームを購読する際、ミュート・スピーカーを表示するかどうかは style.buttonDisplayMode プロパティを Session.subscribe() メソッドを使用する:
const subscriber = session.subscribe(stream,
'subscriber-element-id', // Replace with the replacement element ID
{
style: {buttonDisplayMode: 'on'}
}
);
について style.buttonDisplayMode プロパティには3つの値のいずれかを設定できる:
- 「auto" - ミュートボタンは、ストリームが最初に表示されたときと、ユーザーがビデオにマウスオーバーしたときに表示されます(デフォルト)。
- 「off" - ミュートボタンは表示されません。
- 「on" - ミュートボタンが表示されます。
サブスクライバーを作成したら、ミュートボタンの表示モードを変更することができます。 setStyle() メソッドを呼び出します。のドキュメントを参照してください。 サブスクライバー.setStyle().
加入者の音声をミュートするデフォルトのユーザーインターフェイス要素はありません。しかし、ボタンなどの要素を追加して setSubscribeToAudio() メソッドを呼び出します。を渡します。 false 加入者をミュートする
mSubscriber.setSubscribeToAudio(false);
パス・イン true オーディオストリームがある場合)オーディオを購読する:
mSubscriber.setSubscribeToAudio(true);
加入者の音声をミュートするデフォルトのユーザーインターフェイス要素はありません。ただし、ボタンなどの要素を追加して subscribeToAudio ユーザがクリックしたときに OTSubscriber オブジェクトのオブジェクトに subscribeToAudio プロパティ false 加入者をミュートする
subscriber.subscribeToAudio = false
を設定する。 subscribeToAudio プロパティ true オーディオストリームがある場合)オーディオを購読する:
subscriber.subscribeToAudio = true
加入者の音声をミュートするデフォルトのユーザーインターフェイス要素はありません。ただし、ボタンなどの要素を追加して subscribeToAudio ユーザがクリックしたときに OTSubscriber オブジェクトのオブジェクトに subscribeToAudio プロパティ NO 加入者をミュートする
subscriber.subscribeToAudio = NO;
を設定する。 subscribeToAudio プロパティ YES オーディオストリームがある場合)オーディオを購読する:
subscriber.subscribeToAudio = YES;
加入者の音声をミュートするデフォルトのユーザーインターフェイス要素はありません。ただし、ボタンなどの要素を追加して SubscribeToAudio プロパティを設定します。プロパティを false で音声をミュートします:
subscriber.SubscribeToAudio = false;
プロパティを true をクリックしてオーディオ再生を有効にする(ストリームにオーディオがある場合):
subscriber.SubscribeToAudio = true;
パブリッシャーのカメラを切り替えるボタンの追加
パブリッシャーが使用するカメラを切り替えるデフォルトのユーザーインターフェース要素はありません。しかし、ボタンなどの要素を追加して swapCamera メソッドを呼び出します:
mPublisher.swapCamera();
に注意してほしい。 cameraPosition プロパティはPublisherKitクラスでは使用できません。PublisherKitクラスで カスタムビデオキャプチャーの実装カスタムビデオキャプチャコードで使用するカメラを定義することができます。
パブリッシャーが使用するカメラを切り替えるデフォルトのユーザーインターフェース要素はありません。しかし、ボタンなどの要素を追加して cameraPosition プロパティを設定します。このプロパティに AVCaptureDevicePosition 列挙型で定義された値を設定します。例えば、以下のコードではパブリッシャーが背面カメラを使用するように設定しています:
publisher.cameraPosition = .back
に注意してほしい。 cameraPosition プロパティは OTPublisherKit クラスでは使用できません。OTPublisherKit クラスで カスタムビデオキャプチャーの実装カスタムビデオキャプチャコードで使用するカメラを定義することができます。
パブリッシャーが使用するカメラを切り替えるデフォルトのユーザーインターフェース要素はありません。しかし、ボタンなどの要素を追加して cameraPosition プロパティを設定します。このプロパティに AVCaptureDevicePosition 列挙型で定義された値を設定します。例えば、以下のコードではパブリッシャーが背面カメラを使用するように設定しています:
publisher.cameraPosition = AVCaptureDevicePositionBack;
に注意してほしい。 cameraPosition プロパティは OTPublisherKit クラスでは使用できません。OTPublisherKit クラスで カスタムビデオキャプチャーの実装カスタムビデオキャプチャコードで使用するカメラを定義することができます。
パブリッシャーが使用するカメラを切り替えるデフォルトのユーザーインターフェース要素はありません。しかし、ボタンなどの要素を追加して VideoCapturer プロパティを使用します:
publisher.VideoCapturer = newCapturer;
詳しくは カスタムビデオキャプチャーの使用.
ビデオの有効/無効時のユーザーインターフェースの調整
サブスクライバ・オブジェクトは、サブスクライバのストリームのビデオが有効または無効になることに関連する以下のイベントをディスパッチします:
videoEnabled- ビデオが無効化された後に有効化されたときにディスパッチされる。videoDisabled- 動画が無効になったときにディスパッチされる。イベントオブジェクトの reason プロパティは、動画が無効化された理由を示す。(このイベント オブジェクトは ビデオ有効変更イベント オブジェクト)videoDisableWarning- メディアルータがストリームの品質が劣化したと判断した場合にディスパッチされ、品質がさらに劣化した場合、ビデオは無効化される。画質がさらに劣化した場合、加入者はビデオを無効化し、以下のディスパッチを行う。videoDisabledイベントを開催する。videoDisableWarningLifted- 以前は無効になっていたビデオが有効になった。
について videoDisableWarning そして videoDisableWarningLifted イベントは メディア・ルーター (メディアモードがルーティングに設定されているセッション)。
デフォルトでは、加入者はビデオ無効警告インジケータとビデオ無効インジケータを表示します。 videoDisableWarning そして videoDisableWarningLifted イベントがディスパッチされます。インジケーターのデフォルト表示を無効にするには videoDisabledDisplayMode サブスクライバー・オブジェクトのスタイル設定。
次の例では videoDisabledDisplayMode ビデオ無効警告インジケータとビデオ無効インジケータを1秒ごとに点滅させるスタイル設定。 videoDisableWarning そして videoDisableWarningLifted イベントがディスパッチされる:
var indicatorBlinker = new IndicatorBlinker(subscriber);
var IndicatorBlinker = function(subscriber) {
var timer;
var indicatorOn = false;
subscriber.on({
videoDisabled: function(event) {
start();
},
videoDisableWarning: function(event) {
start();
},
videoDisableWarningLifted: function(event) {
stop();
},
videoEnabled: function(event) {
stop();
}
});
var start = function() {
subscriber.setStyle('videoDisabledDisplayMode', 'on');
if (timer) {
clearInterval(timer);
}
timer = setInterval(function() {
if (indicatorOn) {
subscriber.setStyle('videoDisabledDisplayMode', 'off');
} else {
subscriber.setStyle('videoDisabledDisplayMode', 'on');
}
indicatorOn = !indicatorOn;
}, 1000);
indicatorOn = true;
};
var stop = function() {
if (timer) {
clearInterval(timer);
}
};
};
を設定することもできます。 videoDisabledDisplayMode スタイルを'off'に設定し、独自のユーザーインターフェイス要素を追加する。 videoDisableWarning, videoDisabled, videoDisableWarningLiftedそして videoEnabled のイベントがある。
加入者のビデオが無効になっている場合 SubscriberKit.VideoListener.onVideoDisabled(subscriber, reason) メソッドが呼び出される。この場合、ユーザー・インターフェース要素(アイコンなど)を追加して、動画が無効であることを示すことができます:
@Override
public void onVideoDisabled(SubscriberKit subscriber, String reason) {
// Display the video disabled indicator
}
加入者のビデオが再び有効になると SubscriberKit.VideoListener.onVideoEnabled(subscriber, reason) メソッドが呼び出されます。この場合、動画が再び有効になっていることを示すユーザーインターフェイス要素(アイコンなど)を削除することができます:
@Override
public void onVideoEnabled(SubscriberKit subscriber, String reason) {
// Display the video disabled indicator
}
を使用するセッションでは ビデオ・メディア・ルーター (メディアモードがルーティングに設定されたセッション)、SubscriberKit.VideoListener は、以下のメソッドを呼び出すこともできます:
- onVideoDisableWarning(加入者) - Vonage Video Media Routerは、ストリームの品質が劣化していると判断し、品質がさらに劣化した場合はビデオを無効にします。
- onVideoDisableWarningLifted(加入者) - Vonageビデオ・メディア・ルーターは、ストリームの品質が改善され、ビデオが無効化されても緊急のリスクはないと判断しました。
また、これらのメッセージが送信されたときに、ユーザーインターフェイスの通知(アイコンなど)を表示したり、削除したりすることもできます。
ストリームを公開するときに、ストリームの品質が原因でビデオが無効になるのを防ぐことができることに注意してください。ストリームを公開する前に Session.publish(publisher) メソッドを呼び出す)。 setAudioFallbackEnabled(boolean enabled) Publisherオブジェクト(またはPublisherKitオブジェクト)のメソッドに false.
加入者のビデオが無効になっている場合 OTSubscriberKitDelegate subscriberVideoDisabled(_:reason:) メッセージが送信されます。この場合、ユーザー・インターフェース要素(アイコンなど)を追加して、ビデオが無効であることを示すことができます:
func subscriberVideoDisabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
// Display the video disabled indicator
}
加入者のビデオが再び有効になると OTSubscriberKitDelegate subscriberVideoEnabled(_:reason:) メッセージが送信されます。この場合、ビデオが再び有効になったことを示すユーザーインターフェイス要素(アイコンなど)を削除することができます:
func subscriberVideoEnabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
// Remove the video disabled indicator
}
を使用するセッションでは ビデオ・メディア・ルーター (メディアモードがルーティングに設定されているセッション)では、以下のメッセージも送信できる:
- OTSubscriberKitDelegate subscriberVideoDisableWarning(_:) - Vonage Video Media Routerは、ストリームの品質が劣化していると判断し、品質がさらに劣化した場合はビデオを無効にします。
- OTSubscriberKitDelegate subscriberVideoDisableWarningLifted(_:)]。 - Vonageビデオ・メディア・ルーターは、ストリームの品質が改善され、ビデオが無効化されても緊急のリスクはないと判断しました。
また、これらのメッセージが送信されたときに、ユーザーインターフェイスの通知(アイコンなど)を表示したり、削除したりすることもできます。
ストリームを公開するときに、ストリームの品質が原因でビデオが無効になるのを防ぐことができることに注意してください。ストリームを公開する前に OTSession publish(_:error:) メソッド)に audioFallbackEnabled プロパティをfalseに設定する。
加入者のビデオが無効になっている場合 [OTSubscriberKitDelegate subscriberVideoDisabled:reason:]。 メッセージが送信されます。この場合、ユーザー・インターフェース要素(アイコンなど)を追加して、ビデオが無効であることを示すことができます:
- (void)subscriberVideoDisabled:(OTSubscriberKit*)subscriber
reason:(OTSubscriberVideoEventReason)reason
{
// Display the video disabled indicator
}
加入者のビデオが再び有効になると [OTSubscriberKitDelegate subscriberVideoEnabled:reason:]。 メッセージが送信されます。この場合、ビデオが再び有効になったことを示すユーザーインターフェイス要素(アイコンなど)を削除することができます:
- (void)subscriberVideoEnabled:(OTSubscriberKit*)subscriber
reason:(OTSubscriberVideoEventReason)reason
{
// Remove the video disabled indicator
}
を使用するセッションでは ビデオ・メディア・ルーター (メディアモードがルーティングに設定されているセッション)では、以下のメッセージも送信できる:
- [OTSubscriberKitDelegate subscriberVideoDisableWarning:]。 - Vonage Video Media Routerは、ストリームの品質が劣化していると判断し、品質がさらに劣化した場合はビデオを無効にします。
- [OTSubscriberKitDelegate subscriberVideoDisableWarningLifted:]。 - Vonageビデオ・メディア・ルーターは、ストリームの品質が改善され、ビデオが無効化されても緊急のリスクはないと判断しました。
また、これらのメッセージが送信されたときに、ユーザーインターフェイスの通知(アイコンなど)を表示したり、削除したりすることもできます。
ストリームを公開するときに、ストリームの品質が原因でビデオが無効になるのを防ぐことができることに注意してください。ストリームを公開する前に [OTSession publish:error] メソッド)に audioFallbackEnabled プロパティをNOに設定します。
サブスクライバーのビデオが無効になると、サブスクライバー・オブジェクトは VideoDisabled イベントが発生します。このイベントが発生したら、ユーザーインターフェイスの要素(アイコンなど)を追加して、動画が無効になったことを示すことができます:
subscriber.VideoDisabled += Subscriber_VideoDisabled;
private void Subscriber_VideoDisabled(object sender, EventArgs e) {
// Display the video disabled indicator
}
サブスクライバーのビデオが再有効化されると、サブスクライバー・オブジェクトは VideoEnabled イベントが発生します。このイベントが発生すると、動画が再び有効になったことを示すユーザーインターフェイス要素(アイコンなど)を削除することができます:
subscriber.VideoEnabled += Subscriber_VideoEnabled;
private void Subscriber_VideoEnabled(object sender, EventArgs e) {
// Display the video disabled indicator
}
を使用するセッションでは ビデオ・メディア・ルーター (メディアモードがルーティングに設定されているセッション)、サブスクライブは以下のイベントも送るかもしれない:
VideoDisableWarning- Vonage Video Media Routerは、ストリームの品質が劣化していると判断し、品質がさらに劣化した場合はビデオを無効にします。VideoDisableWarningLifted- Vonageビデオ・メディア・ルーターは、ストリームの品質が改善され、ビデオが無効化されても緊急のリスクはないと判断しました。
また、これらのイベントが送信されたときに、ユーザーインターフェイスの通知(アイコンなど)を表示したり、削除したりすることもできます。
セッションがアーカイブされているときにインジケータ要素を表示する
セッションのアーカイブが録画を開始するとき(あるいは録画中のセッションに接続するとき)には Session.ArchiveListener.onArchiveStarted(session, name) メソッドが呼び出される。録画が停止すると Session.ArchiveListener.onArchiveStopped(session, name) メソッドが呼び出されます。パブリッシャー ビューに表示されるアイコンのようなユーザー インターフェイス要素を追加して、ビデオが録画中であることを示すことができます:
@Override
public void onArchiveStarted(Session session, String id, String name) {
// Display the archive indicator
}
@Override
public void onArchiveStopped(Session session, String id, String name) {
// Hide the archive indicator
}
セッションのアーカイブが録画を開始するとき(あるいは録画中のセッションに接続するとき)には OTSessionDelegate session(_:archiveStartedWithId:name:) メッセージが送信される。録音が停止すると OTSessionDelegate session(_:archiveStoppedWithId:) メッセージが送信されます。OTPublisherビューに表示されるアイコンなど、録画中であることを示すユーザーインターフェイス要素を追加できます:
func session(_ session: OTSession, archiveStartedWithId archiveId: String, name: String?) {
// Display the archive indicator
}
func session(_ session: OTSession, archiveStoppedWithId archiveId: String) {
// Hide the archive indicator
}
セッションのアーカイブが録画を開始するとき(あるいは録画中のセッションに接続するとき)には [OTSessionDelegate session:archiveStartedWithId:name:] メッセージが送信される。録音が停止すると [OTSessionDelegate session:archiveStoppedWithId:] メッセージが送信されます。OTPublisherビューに表示されるアイコンなど、録画中であることを示すユーザーインターフェイス要素を追加できます:
- (void) session:(OTSession*)session
archiveStartedWithId:(NSString*)archiveId
name:(NSString*)name
{
// Display the archive indicator
}
- (void) session:(OTSession*)session
archiveStoppedWithId:(NSString*)archiveId
{
// Hide the archive indicator
}
セッションのアーカイブが録画を始めると(あるいは録画中のセッションに接続すると)、Sessionオブジェクトは ArchiveStarted イベントを送信します。録画が停止すると、Sessionオブジェクトは ArchiveStopped イベントを追加することができます。パブリッシャー ビューに表示されるアイコンのようなユーザー インターフェイス要素を追加して、ビデオが録画中であることを示すことができます:
session.ArchiveStarted += Session_ArchiveStarted;
session.ArchiveStopped += Session_ArchiveStopped;
private void Session_ArchiveStarted(object sender, EventArgs e) {
// Display the archive indicator
}
private void Session_ArchiveStopped(object sender, EventArgs e) {
// Hide the archive indicator
}
オーディオレベルに応じてユーザーインターフェースを調整
パブリッシャーとサブスクライバーのオブジェクトのディスパッチ audioLevelUpdated イベントを定期的に発生させ、オーディオ・レベルをレポートします。これらのイベントを使用して、オーディオレベルインジケータを表示することができます。また、これらのイベントを使用して、セッションでアクティブなスピーカーを検出することもできます。
次の例は、加入者の音量を示すメーター要素の値を調整します。このコードでは audioLevelDisplayMode スタイル 'off'これは、サブスクライバーに表示されるデフォルトのオーディオレベルメーターを無効にします。オーディオレベルは対数的に調整され、移動平均が適用されます:
subscriber.setStyle('audioLevelDisplayMode', 'off');
var movingAvg = null;
subscriber.on('audioLevelUpdated', function(event) {
if (movingAvg === null || movingAvg <= event.audioLevel) {
movingAvg = event.audioLevel;
} else {
movingAvg = 0.7 * movingAvg + 0.3 * event.audioLevel;
}
// 1.5 scaling to map the -30 - 0 dBm range to [0,1]
var logLevel = (Math.log(movingAvg) / Math.LN10) / 1.5 + 1;
logLevel = Math.min(Math.max(logLevel, 0), 1);
document.getElementById('subscriberMeter').value = logLevel;
});
この例では、IDが "subscriberMeter "のHTMLメーター要素があると仮定している。
オーディオ専用モードでは、パブリッシャーまたはサブスクライバーのDOM要素に、デフォルトで音量インジケータが表示されます(要素の右上隅)。このデフォルトのユーザー・インターフェース要素を無効にして、独自のボリューム・メーターを表示することができます。次のトピックを参照してください、 ビデオの有効/無効時のユーザーインターフェースの調整.
を使用することもできます。 audioLevelUpdated イベントを使用して、パブリッシャーまたはサブスクライバーのオーディオが十分な音量で十分な時間続いた場合に、参加者が話し始めたと判断することができます。または、オーディオが十分な時間静かであった場合、参加者が話を止めたと識別することができます:
var subscriber = session.subscribe(event.stream);
SpeakerDetection(subscriber, function() {
console.log('started talking');
}, function() {
console.log('stopped talking');
});
var SpeakerDetection = function(subscriber, startTalking, stopTalking) {
var activity = null;
subscriber.on('audioLevelUpdated', function(event) {
var now = Date.now();
if (event.audioLevel > 0.2) {
if (!activity) {
activity = {timestamp: now, talking: false};
} else if (activity.talking) {
activity.timestamp = now;
} else if (now- activity.timestamp > 1000) {
// detected audio activity for more than 1s
// for the first time.
activity.talking = true;
if (typeof(startTalking) === 'function') {
startTalking();
}
}
} else if (activity && now - activity.timestamp > 3000) {
// detected low audio activity for more than 3s
if (activity.talking) {
if (typeof(stopTalking) === 'function') {
stopTalking();
}
}
activity = null;
}
});
};
(コンソールへのロギングの代わりに、ユーザーが話し始めたり止めたりしたときに、アプリがユーザーインターフェースの要素を調整することもできる)。
について SubscriberKit.AudioLevelListener.onAudioLevelUpdated(subscriber, audioLevel) そして PublisherKit.AudioLevelListener.onAudioLevelUpdated(publisher, audioLevel) メッセージは定期的に送信され、サブスクライバーとパブリッシャーの音声レベルが表示されます。メッセージは audioLevel オーディオレベルメーターの表示を更新するための値:
@Override
public void onAudioLevelUpdated(
SubscriberKit subscriber, float audioLevel) {
// Adjust an audio meter UI element based on the audioLevel value.
}
デフォルトでは、プライバシー保護のため、全てのパブリッシャーがミュートされると、オーディオキャプチャは停止され、マイクは解放されます。これはパブリッシャーインスタンスが再び音声を有効にするまで音声レベルの更新が行われないことを意味します。バージョン 2.31.0 以降では、パブリッシャーはミュート中でもオーディオキャプチャを継続できるようにプロパティが設定されています。
新しいパブリッシャーインスタンスをインスタンス化する際に、開発者はこの動作を有効にすることができます:
mPublisher = new Publisher.Builder(this).name(mUsername).allowAudioCaptureWhileMuted(true).build();
注意:この動作を有効にすると、パブリッシャーがミュート状態でもマイクが使用されます。
について OTPublisherKitAudioLevelDelegate publisher(_:audioLevelUpdated:) そして OTSubscriberKitAudioLevelDelegate subscriber(_:audioLevelUpdated:) メッセージは定期的に送信され、サブスクライバーとパブリッシャーの音声レベルが表示されます。メッセージは audioLevel オーディオレベルメーターの表示を更新するための値。
デフォルトでは、プライバシー保護のため、全てのパブリッシャーがミュートされると、オーディオキャプチャは停止され、マイクは解放されます。これはパブリッシャーインスタンスが再び音声を有効にするまで音声レベルの更新が行われないことを意味します。バージョン 2.31.0 以降では、パブリッシャーはミュート中でもオーディオキャプチャを継続できるようにプロパティが設定されています。
新しいパブリッシャーインスタンスをインスタンス化する際に、開発者はこの動作を有効にすることができます:
let settings = OTPublisherSettings()
settings.allowAudioCaptureWhileMuted = true;
publisher = OTPublisher(delegate: self, settings: settings)!
注意:この動作を有効にすると、パブリッシャーがミュート状態でもマイクが使用されます。
について [OTPublisherKitAudioLevelDelegate publisher:audioLevelUpdated:] そして [OTSubscriberKitAudioLevelDelegate subscriber:audioLevelUpdated:] メッセージは定期的に送信され、サブスクライバーとパブリッシャーの音声レベルが表示されます。メッセージは audioLevel オーディオレベルメーターの表示を更新するための値。
デフォルトでは、プライバシー保護のため、全てのパブリッシャーがミュートされると、オーディオキャプチャは停止され、マイクは解放されます。これはパブリッシャーインスタンスが再び音声を有効にするまで音声レベルの更新が行われないことを意味します。バージョン 2.31.0 以降では、パブリッシャーはミュート中でもオーディオキャプチャを継続できるようにプロパティが設定されています。
新しいパブリッシャーインスタンスをインスタンス化する際に、開発者はこの動作を有効にすることができます:
OTPublisherKitSettings* settings = [[OTPublisherKitSettings alloc] init];
settings.allowAudioCaptureWhileMuted = true;
_publisher = [[OTPublisherKit alloc] initWithDelegate:self settings:settings];
注意:この動作を有効にすると、パブリッシャーがミュート状態でもマイクが使用されます。
について Subscriber.AudioLevel そして Publisher.AudioLevel イベントは、サブスクライバーとパブリッシャーのオーディオレベルとともに、定期的に送信されます。あなたは AudioLevel プロパティを使用して、オーディオ・レベル・メーターの表示を更新します:
@Override
publisher.AudioLevel += Publisher_AudioLevel;
subscriber.AudioLevel += Subscriber_AudioLevel;
private void Publisher_AudioLevel(object sender, EventArgs e) {
// Display the audio level based on e.AudioLevel
}
private void Subscriber_AudioLevel(object sender, EventArgs e) {
// Display the audio level based on e.AudioLevel
}
デフォルトでは、プライバシー保護のため、全てのパブリッシャーがミュートされると、オーディオキャプチャは停止され、マイクは解放されます。これはパブリッシャーインスタンスが再び音声を有効にするまで音声レベルの更新が行われないことを意味します。バージョン 2.31.0 以降では、パブリッシャーはミュート中でもオーディオキャプチャを継続できるようにプロパティが設定されています。
新しいパブリッシャーインスタンスをインスタンス化する際に、開発者はこの動作を有効にすることができます:
publisher = new Publisher.Builder(_context)
{
AllowAudioCaptureWhileMuted = true
}.Build();
注意:この動作を有効にすると、パブリッシャーがミュート状態でもマイクが使用されます。
カスタムビデオレンダラの使用
Subscriber クラスと Publisher クラスは、ストリームをレンダリングし、ストリーム名の表示やマイクまたはカメラのミュートなどのユーザー インターフェイス制御を提供する、標準のビデオ レンダラーを実装します。SubscriberKit クラスと PublisherKit クラスを使用して、カスタム動画レンダラーを実装できます。
Android SDKにはBaseVideoRendererクラスがあります。このクラスをオーバーライドして、カスタムビデオレンダラを作成します。
PublisherKit オブジェクトをインスタンス化した後に setRenderer() PublisherKitオブジェクトの
mPublisher = new PublisherKit(MyClass.this, "publisher");
// Use a custom video renderer.
// MyVideoRenderer extends BaseVideoRenderer
mRenderer = new MyVideoRenderer();
mPublisher.setRenderer(new mRenderer);
SubscriberKit クラスにも setRenderer() メソッドを使用する。
について onFrame() メソッドが呼び出されます:
public void onFrame(Frame frame) {
// The new frame is available.
}
について frame は BaseVideoRenderer.Frame オブジェクトです。このオブジェクトには getBuffer() これは、ビデオフレームデータを含むバイトバッファを返すものです。このバイトバッファを使って、パブリッシャーのビューにビデオフレーム画像を追加することができます。
例として、OpenTokHelloWorld サンプル・アプリケーションの OpenTokVideoRenderer クラスをご覧ください。
を使うようにパブリッシャーを設定することもできます。 カスタムビデオキャプチャ.
OTPublisher クラスと OTSubscriber クラスは、パブリッシャまたはサブスクライバの動画をレンダリングするデフォルトの UIView インスタンスを提供します。カスタム ビデオ ストリーム API を使用して、OTPublisherKit、OTSubscriberKit、および OTVideoRender クラスを使用してカスタム ビデオ レンダラーを定義できます。
を使うようにパブリッシャーを設定することもできます。 カスタムビデオキャプチャ.
OTPublisher クラスと OTSubscriber クラスは、パブリッシャまたはサブスクライバの動画をレンダリングするデフォルトの UIView インスタンスを提供します。カスタム ビデオ ストリーム API を使用して、OTPublisherKit、OTSubscriberKit、および OTVideoRender クラスを使用してカスタム ビデオ レンダラーを定義できます。
を使うようにパブリッシャーを設定することもできます。 カスタムビデオキャプチャ.
デフォルトでは、パブリッシャはVonage Video Windows SDKによって定義されたWindows Presentation Foundationのデフォルトのビデオレンダラを使用します。
IVideoRenderer インターフェイスを実装するクラスを作成することで、動画のレンダラーを指定することもできます。このインターフェイスには RenderFrame(frame) メソッドが呼び出されます。このメソッドの実装では、このメソッドに渡されたフレームオブジェクトを使用して、レンダリングする画像を作成します。また、このメソッドの実装の最後に、必ず Dispose() のメソッドを使用する。 frame オブジェクトのメモリ・リークを防ぐ。
パブリッシャー オブジェクトまたはサブスクライバー オブジェクトをインスタンス化するときに、カスタム動画レンダラー オブジェクトを Publisher() または Subscriber() コンストラクタは renderer パラメータ)。