Kotlin

動画視聴用のコンテナを提供する

Vonage SDK は以下を返します。 View オブジェクトを作成します。サンプルでは FrameLayout を介してComposeから作成されたコンテナ。 AndroidView:

@Composable
private fun VideoContainers(
    onContainersReady: (subscriber: FrameLayout, publisher: FrameLayout) -> Unit,
) {
    AndroidView(
        factory = { ctx ->
            val root = FrameLayout(ctx)
            val subscriberFrame = FrameLayout(ctx) // full screen
            val publisherFrame = FrameLayout(ctx)  // small overlay, bottom-end
            root.addView(subscriberFrame)
            root.addView(publisherFrame)
            onContainersReady(subscriberFrame, publisherFrame)
            root
        },
        modifier = Modifier.fillMaxSize(),
    )
}

コンテナをアクティビティに渡すことで、セッション接続時にパブリッシャーと購読者のビューを追加することができます:

VideoCallScreen(
    isInPipMode = isInPipMode,
    onContainersReady = { subscriberFrame, publisherFrame ->
        subscriberViewContainer = subscriberFrame
        publisherViewContainer = publisherFrame
        containersReady = true
        tryStartSession()
    },
    onEnterPictureInPicture = ::enterPictureInPicture,
)

準備ができたらビューを取り付ける

onConnectedパブリッシャービューを発行し、添付してください:

override fun onConnected(session: Session) {
    if (publisher == null) {
        publisher = Publisher.Builder(applicationContext).build()
        session.publish(publisher)
        publisherViewContainer.addView(publisher?.view)
        if (publisher?.view is GLSurfaceView) {
            (publisher?.view as GLSurfaceView).setZOrderOnTop(true)
        }
    }
}

リモートストリームが到着したらサブスクライブする:

override fun onStreamReceived(session: Session, stream: Stream) {
    if (subscriber == null) {
        subscriber = Subscriber.Builder(applicationContext, stream).build()
        session.subscribe(subscriber)
        subscriberViewContainer.addView(subscriber?.view)
    }
}