diff --git a/core/src/main/java/io/github/thibaultbee/streampack/core/streamers/observers/StreamerLifeCycleObserver.kt b/core/src/main/java/io/github/thibaultbee/streampack/core/streamers/observers/StreamerLifeCycleObserver.kt index 11a3f9544..5a69e608d 100644 --- a/core/src/main/java/io/github/thibaultbee/streampack/core/streamers/observers/StreamerLifeCycleObserver.kt +++ b/core/src/main/java/io/github/thibaultbee/streampack/core/streamers/observers/StreamerLifeCycleObserver.kt @@ -32,7 +32,8 @@ import kotlinx.coroutines.runBlocking * * @param streamer The streamer to observe */ -open class StreamerLifeCycleObserver(val streamer: ICoroutineStreamer) : DefaultLifecycleObserver { +open class StreamerLifeCycleObserver(protected val streamer: ICoroutineStreamer) : + DefaultLifecycleObserver { override fun onPause(owner: LifecycleOwner) { if (streamer is ICameraStreamer) { streamer.stopPreview() diff --git a/demos/camera/src/main/java/io/github/thibaultbee/streampack/app/utils/StreamerManager.kt b/demos/camera/src/main/java/io/github/thibaultbee/streampack/app/utils/StreamerManager.kt index 9481c601b..e1797fdc4 100644 --- a/demos/camera/src/main/java/io/github/thibaultbee/streampack/app/utils/StreamerManager.kt +++ b/demos/camera/src/main/java/io/github/thibaultbee/streampack/app/utils/StreamerManager.kt @@ -21,6 +21,7 @@ import android.net.Uri import android.os.Build import android.util.Range import androidx.annotation.RequiresPermission +import androidx.lifecycle.LifecycleOwner import io.github.thibaultbee.streampack.app.configuration.Configuration import io.github.thibaultbee.streampack.app.models.EndpointType import io.github.thibaultbee.streampack.app.models.FileExtension @@ -61,7 +62,7 @@ class StreamerManager( get() = (streamer as ICameraStreamer?)?.videoSource?.cameraId val streamerLifeCycleObserver: StreamerLifeCycleObserver by lazy { - StreamerLifeCycleObserver(streamer) + CustomStreamerLifeCycleObserver(streamer) } val requiredPermissions: List @@ -242,4 +243,12 @@ class StreamerManager( set(value) { streamer.audioSource?.isMuted = value } + + class CustomStreamerLifeCycleObserver(streamer: ICoroutineStreamer) : + StreamerLifeCycleObserver(streamer) { + override fun onDestroy(owner: LifecycleOwner) { + // Do nothing + // The ViewModel onCleared() method will call release() method + } + } } \ No newline at end of file