セッションへのストリームの公開
アプリがVonage Videoセッションに接続すると、デバイスのカメラとマイクを使って、オーディオ・ビデオ・ストリームをセッションに公開します:
- 追加
publisher&pubViewプロパティをVonageVideoManagerクラスである。
final class VonageVideoManager: NSObject, ObservableObject {
private var session: OTSession?
private lazy var publisher: OTPublisher? = {
let settings = OTPublisherSettings()
settings.name = UIDevice.current.name
return OTPublisher(delegate: self, settings: settings)
}()
@Published var pubView: UIView? // this will be needed to display the UI later on
について OTPublisher(出版社 クラスは iOS SDK で定義されています。これは、デバイスのカメラとマイクを使用して、ストリームVonage Videoセッションを公開します。
- の実装を変更する。
sessionDidConnect(_:)メソッドに、ストリームをセッションに公開するコードを追加します:
func sessionDidConnect(_ session: OTSession) {
print("The client connected to the session.")
var error: OTError?
defer {
if let error {
print(error)
}
}
guard let publisher else {
return
}
session.publish(publisher, error: &error)
if let view = publisher.view {
DispatchQueue.main.async {
self.pubView = view
}
}
}
アプリがセッションに接続すると、次のようにインスタンスを初期化する。 OTPublisheriOS SDKで定義されている。コンストラクタは1つのパラメータを取る。 OTPublisherDelegate プロトコルを使用する。
を渡す。 OTPublisher オブジェクトを session.publish() メソッドを使用します。このメソッドは、iOS デバイスのカメラとマイクを使用して、セッションにオーディオビデオストリームを公開します。(Xcodeシミュレータでは、iOS SDKはストリームを公開するときにテストビデオを使用することに注意してください)
について OTPublisher オブジェクトは view プロパティである。 ユーアイビュー オブジェクトを表示します。このビューはデバイスのカメラからキャプチャされたビデオを表示します。次のステップでは、SwiftUIでこのビューを表示します( UIKit で簡単にできる。 addSubview(view) 関数)
- 次に、SwiftUIの世界でUIViewを使えるようにするために、UIViewのラッパーを作成する必要があります:
struct Wrap: UIViewRepresentable {
@State var view: UIView
func makeUIView(context: Context) -> UIView {
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
DispatchQueue.main.async {
self.view = uiView
}
}
}
- では、接続しよう
VonageVideoManagerに対するContentViewをプロパティとして使用する場合、データと対話するためにこのプロパティが必要になります。このソリューションは柔軟性があり、どのようなアーキテクチャにも適合するため、プロジェクトで ViewModel や Interactors などを使用している場合は、私たちにお任せください:
struct ContentView: View {
@ObservedObject var videoManager = VonageVideoManager()
}
- ビュー本体にデータを入力する時間です。
Wrapビューを作成した:
struct ContentView: View {
@ObservedObject var videoManager = VonageVideoManager()
var body: some View {
VStack {
videoManager.pubView.flatMap { view in
Wrap(view)
.frame(width: 200, height: 200, alignment: .center)
}.cornerRadius(5.0)
}
.task {
videoManager.setup()
}
}
}
- のメソッドを実装する。
OTPublisherDelegateプロトコルで定義されています。このプロトコルにはパブリッシャーに関連するイベントを処理するメソッドが含まれています。以下のコードをVonageVideoManager.swiftファイルの閉じ括弧の後にOTSessionDelegateを拡張した:
// MARK: - OTPublisherDelegate callbacks
extension VonageVideoManager: OTPublisherDelegate {
func publisher(_ publisher: OTPublisherKit, didFailWithError error: OTError) {
print("The publisher failed: \(error)")
}
}
- クライアントがセッションへの発行に失敗した場合
OTErrorオブジェクトはpublisher(_: didFailWithError:)メソッドを使用する。
アプリケーションをデバッグしてください。アプリがセッションへの接続に成功すると、セッションにストリームがパブリッシュされ、アプリ内にパブリッシャーのビデオが表示されます。
基本的なビデオチャット
Vonage Video API プラットフォームの基本概念(ビデオ、音声、メッセージングによるユーザ間のコミュニケーション方法など)を学びます。Vonage Video API の基本的なフローを説明します。