Kotlin

Initialisierung der Sitzung

1. Initialisierung der Sitzung durchführen

Fordern Sie Kamera-/Mikrofonberechtigungen an und stellen Sie dann eine Verbindung zur Vonage-Sitzung her:

private fun initializeSession(appId: String, sessionId: String, token: String) {
    session = Session.Builder(this, appId, sessionId).build().apply {
        setSessionListener(sessionListener)
        connect(token)
    }
}

2. Auf Session connected request Bildschirmaufnahme

Wenn die Verbindung hergestellt ist, starten Sie das Dialogfeld zur Erfassung des Systembildschirms:

private fun requestScreenCapturePermission() {
    mediaProjectionManager = getSystemService(Context.MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
    mediaProjectionManager?.createScreenCaptureIntent()?.let { intent ->
        screenCaptureLauncher.launch(intent)
    }
}

3. Wenn der Benutzer die Erlaubnis erteilt, starten Sie die Erfassung

Wenn der Benutzer den Bildschirm über den Dialog freigibt:

  1. Starten Sie den Dienst im Vordergrund - Vor der Verwendung erforderlich MediaProjection.
  2. Siehe MediaProjection - Aus dem Ergebnis Absicht.
  3. Erstellen Sie den Erfasser - ScreenSharingCapturer(context, mediaProjection).
  4. Den Verlag aufbauen - Verwenden Sie den Capturer und stellen Sie den Videotyp auf PublisherKitVideoTypeScreen.
  5. veröffentlichen. - session.publish(publisher).
private fun startScreenCapture(resultCode: Int, data: Intent) {
    screenSharingManager.startForeground()

    Handler(Looper.getMainLooper()).postDelayed({
        val projectionManager = mediaProjectionManager ?: return@postDelayed
        mediaProjection = projectionManager.getMediaProjection(resultCode, data)
        val capturer = ScreenSharingCapturer(this, mediaProjection!!)

        publisher = Publisher.Builder(this)
            .capturer(capturer)
            .build()
            .apply {
                setPublisherListener(publisherListener)
                setPublisherVideoType(PublisherKit.PublisherKitVideoType.PublisherKitVideoTypeScreen)
                setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL)
            }

        publisherView = publisher?.view
        session?.publish(publisher)
    }, 100)
}

PublisherKitVideoTypeScreen optimiert die Codierung für Bildschirminhalte (z. B. Text und UI).

Schritt 5: Dienst im Vordergrund

Die ScreenSharingService zeigt eine Benachrichtigung an und ruft startForeground() mit ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION. Dies muss geschehen vor Sie rufen getMediaProjection().

ScreenSharingManager bindet sich an diesen Dienst und stellt startForeground(). Initialisieren Sie es in onCreate und entbinden in onDestroy.