ストリームの公開 — iOS (Swift)

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

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

OTPublisherオブジェクトの初期化

について OTPublisher このオブジェクトは、OpenTokセッションで使用するために、デバイスのマイクやカメラからの音声・映像ストリームを取得するために使用されます。この 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)!

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

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

また、公開ストリームにカスタマイズしたオーディオソースを使用することもできます。 カスタムオーディオドライバの使用.

クライアントに公開機能があるかどうかを確認する

セッションに接続したら、クライアントが公開できるかどうかを確認できます。の値を確認してください。 OTSession capablilites.canPublish プロパティにこれが trueクライアントはパブリッシュできる:

if let capabilities = session.capabilities, capabilities.canPublish {
    // The client can publish.
} else {
    // The client cannot publish.
    // You may want to notify the user.
}

公開するには、クライアントは公開をサポートするロールが割り当てられたトークンでセッションに接続する必要があります。詳細は トークン作成の概要.

カメラへのアクセス確認

公開前に、アプリがカメラにアクセスできる権限が設定されているかを確認することをお勧めします。アクセスが拒否された場合は、エンドユーザーに対してアプリのアクセス権限の設定方法について案内してください。(エンドユーザーは、iOSの「設定」>「プライバシー」>「カメラ」からカメラへのアクセスを有効にできます。)

カメラへのアクセスを要求するアプリがある場合、エンドユーザーにはカメラへのアクセスを許可するよう促すメッセージが表示されます。このメッセージが表示されるタイミングは、以下を呼び出すことで制御できます。 AVCaptureDevice requestAccess(for:completionHandler:)AVMediaType.Videoこれは、最初の実行時にプロンプトを表示する。それ以降の呼び出しでは、ユーザーが保存したプリファレンスで完了ハンドラが実行される。

AVCaptureDevice.requestAccess(for: .video) { granted in
	if granted {
		// Access to the camera is granted. You can publish.
	} else {
		// Access to the camera is not granted.
	}
}

ストリームの公開

Publisher オブジェクトを作成したら(参照: OTPublisherオブジェクトの初期化)、それを 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 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();

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

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

ローカルクライアントによって配信されているストリームの統計情報を取得するには、OpenTok Media Router を使用するセッションを使用する必要があります( メディアモード (ルーティング設定に設定)。その後、 networkStatsDelegate OTSubscriberKit オブジェクトのこのメソッドを使用して、公開しているストリームのオーディオおよびビデオの統計情報を取得します。詳しくは、 本題 をご覧ください。

について opentok-ネットワークテスト レポには、セッションに公開する前にテストストリームの統計情報を使用する方法を示すサンプルコードが含まれています。