kopia lustrzana https://github.com/vitorpamplona/amethyst
Video playback creation must be run in the main thread :(
rodzic
6c025f7274
commit
7cc089f0ee
|
@ -32,7 +32,6 @@ import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
import androidx.compose.runtime.mutableIntStateOf
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
@ -206,10 +205,6 @@ fun VideoViewInner(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!automaticallyStartPlayback.value) {
|
|
||||||
ImageUrlWithDownloadButton(url = videoUri, showImage = automaticallyStartPlayback)
|
|
||||||
} else {
|
|
||||||
VideoPlayerActiveMutex(videoUri) { activeOnScreen ->
|
|
||||||
val mediaItem = remember(videoUri) {
|
val mediaItem = remember(videoUri) {
|
||||||
MediaItem.Builder()
|
MediaItem.Builder()
|
||||||
.setMediaId(videoUri)
|
.setMediaId(videoUri)
|
||||||
|
@ -234,6 +229,10 @@ fun VideoViewInner(
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!automaticallyStartPlayback.value) {
|
||||||
|
ImageUrlWithDownloadButton(url = videoUri, showImage = automaticallyStartPlayback)
|
||||||
|
} else {
|
||||||
|
VideoPlayerActiveMutex(videoUri) { activeOnScreen ->
|
||||||
GetVideoController(
|
GetVideoController(
|
||||||
mediaItem = mediaItem,
|
mediaItem = mediaItem,
|
||||||
videoUri = videoUri,
|
videoUri = videoUri,
|
||||||
|
@ -282,14 +281,11 @@ fun GetVideoController(
|
||||||
UUID.randomUUID().toString()
|
UUID.randomUUID().toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
val scope = rememberCoroutineScope()
|
|
||||||
|
|
||||||
// Prepares a VideoPlayer from the foreground service.
|
// Prepares a VideoPlayer from the foreground service.
|
||||||
DisposableEffect(key1 = videoUri) {
|
DisposableEffect(key1 = videoUri) {
|
||||||
// If it is not null, the user might have come back from a playing video, like clicking on
|
// If it is not null, the user might have come back from a playing video, like clicking on
|
||||||
// the notification of the video player.
|
// the notification of the video player.
|
||||||
if (controller.value == null) {
|
if (controller.value == null) {
|
||||||
scope.launch(Dispatchers.IO) {
|
|
||||||
PlaybackClientController.prepareController(
|
PlaybackClientController.prepareController(
|
||||||
uid,
|
uid,
|
||||||
videoUri,
|
videoUri,
|
||||||
|
@ -335,7 +331,6 @@ fun GetVideoController(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
controller.value?.let {
|
controller.value?.let {
|
||||||
if (it.playbackState == Player.STATE_IDLE || it.playbackState == Player.STATE_ENDED) {
|
if (it.playbackState == Player.STATE_IDLE || it.playbackState == Player.STATE_ENDED) {
|
||||||
|
@ -372,7 +367,6 @@ fun GetVideoController(
|
||||||
// if the controller is null, restarts the controller with a new one
|
// if the controller is null, restarts the controller with a new one
|
||||||
// if the controller is not null, just continue playing what the controller was playing
|
// if the controller is not null, just continue playing what the controller was playing
|
||||||
if (controller.value == null) {
|
if (controller.value == null) {
|
||||||
scope.launch(Dispatchers.IO) {
|
|
||||||
PlaybackClientController.prepareController(
|
PlaybackClientController.prepareController(
|
||||||
uid,
|
uid,
|
||||||
videoUri,
|
videoUri,
|
||||||
|
@ -404,7 +398,6 @@ fun GetVideoController(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (event == Lifecycle.Event.ON_PAUSE) {
|
if (event == Lifecycle.Event.ON_PAUSE) {
|
||||||
if (!keepPlaying.value) {
|
if (!keepPlaying.value) {
|
||||||
// Stops and releases the media.
|
// Stops and releases the media.
|
||||||
|
@ -697,7 +690,7 @@ fun ControlWhenPlayerIsActive(
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
|
|
||||||
// Keeps the screen on while playing and viewing videos.
|
// Keeps the screen on while playing and viewing videos.
|
||||||
DisposableEffect(key1 = controller) {
|
DisposableEffect(key1 = controller, key2 = view) {
|
||||||
val listener = object : Player.Listener {
|
val listener = object : Player.Listener {
|
||||||
override fun onIsPlayingChanged(isPlaying: Boolean) {
|
override fun onIsPlayingChanged(isPlaying: Boolean) {
|
||||||
// doesn't consider the mutex because the screen can turn off if the video
|
// doesn't consider the mutex because the screen can turn off if the video
|
||||||
|
|
Ładowanie…
Reference in New Issue