mirror of
https://github.com/zoriya/react-native-omni.git
synced 2026-08-16 02:44:51 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
77a8b2337d | ||
|
|
cebe97f168 |
@@ -279,7 +279,7 @@ class OmniPlayer(
|
|||||||
|
|
||||||
override var playbackRate by mainThreadProperty(
|
override var playbackRate by mainThreadProperty(
|
||||||
get = { player.playbackParameters.speed.toDouble() },
|
get = { player.playbackParameters.speed.toDouble() },
|
||||||
set = { value -> player.setPlaybackSpeed(value.toFloat().coerceAtLeast(0f)) }
|
set = { value -> player.setPlaybackSpeed(value.toFloat().coerceAtLeast(0.01f)) }
|
||||||
)
|
)
|
||||||
|
|
||||||
override var muted by mainThreadProperty(
|
override var muted by mainThreadProperty(
|
||||||
|
|||||||
@@ -219,6 +219,11 @@ class OmniView(val context: ThemedReactContext) :
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (boundPlayer?.isCasting == true) {
|
||||||
|
clearPictureInPictureParams()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
val autoEnterEnabled =
|
val autoEnterEnabled =
|
||||||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S &&
|
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S &&
|
||||||
autoPip == true &&
|
autoPip == true &&
|
||||||
@@ -242,9 +247,18 @@ class OmniView(val context: ThemedReactContext) :
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun clampedAspectRatio(width: Int, height: Int): Rational {
|
||||||
|
val minRatio = 0.42
|
||||||
|
val maxRatio = 2.38
|
||||||
|
val ratio = width.toDouble() / height.toDouble()
|
||||||
|
if (ratio in minRatio..maxRatio) return Rational(width, height)
|
||||||
|
val clamped = ratio.coerceIn(minRatio, maxRatio)
|
||||||
|
return Rational((clamped * 1000).toInt(), 1000)
|
||||||
|
}
|
||||||
|
|
||||||
private fun buildPipParams(autoEnterEnabled: Boolean): PictureInPictureParams {
|
private fun buildPipParams(autoEnterEnabled: Boolean): PictureInPictureParams {
|
||||||
val aspectRatio = if (surfaceView.width > 0 && surfaceView.height > 0) {
|
val aspectRatio = if (surfaceView.width > 0 && surfaceView.height > 0) {
|
||||||
Rational(surfaceView.width, surfaceView.height)
|
clampedAspectRatio(surfaceView.width, surfaceView.height)
|
||||||
} else {
|
} else {
|
||||||
Rational(16, 9)
|
Rational(16, 9)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,9 +97,11 @@ class VlcPlayer(ctx: Context) :
|
|||||||
private var mediaItems: List<MediaItem> = emptyList()
|
private var mediaItems: List<MediaItem> = emptyList()
|
||||||
private var currentMediaItemIndex: Int = INDEX_UNSET
|
private var currentMediaItemIndex: Int = INDEX_UNSET
|
||||||
private var currentTrackSelectionParameters = TrackSelectionParameters.Builder().build()
|
private var currentTrackSelectionParameters = TrackSelectionParameters.Builder().build()
|
||||||
|
@Volatile
|
||||||
private var playerError: PlaybackException? = null
|
private var playerError: PlaybackException? = null
|
||||||
private var playlistMetadata: MediaMetadata = MediaMetadata.EMPTY
|
private var playlistMetadata: MediaMetadata = MediaMetadata.EMPTY
|
||||||
private var userInitiatedTransition: Boolean = false
|
private var userInitiatedTransition: Boolean = false
|
||||||
|
@Volatile
|
||||||
private var cachedBufferedPosition: Long = 0L
|
private var cachedBufferedPosition: Long = 0L
|
||||||
private var boundSurfaceView: SurfaceView? = null
|
private var boundSurfaceView: SurfaceView? = null
|
||||||
|
|
||||||
@@ -467,7 +469,11 @@ class VlcPlayer(ctx: Context) :
|
|||||||
|
|
||||||
override fun getShuffleModeEnabled(): Boolean = false
|
override fun getShuffleModeEnabled(): Boolean = false
|
||||||
|
|
||||||
override fun isLoading() = player.playerState == IMedia.State.Opening
|
override fun isLoading(): Boolean {
|
||||||
|
val state = playbackState
|
||||||
|
if (state == STATE_IDLE || state == STATE_ENDED) return false
|
||||||
|
return player.playerState == IMedia.State.Opening
|
||||||
|
}
|
||||||
|
|
||||||
override fun seekTo(
|
override fun seekTo(
|
||||||
mediaItemIndex: Int,
|
mediaItemIndex: Int,
|
||||||
@@ -493,11 +499,11 @@ class VlcPlayer(ctx: Context) :
|
|||||||
override fun getSeekForwardIncrement(): Long = 15_000L
|
override fun getSeekForwardIncrement(): Long = 15_000L
|
||||||
|
|
||||||
override fun setPlaybackParameters(playbackParameters: PlaybackParameters) {
|
override fun setPlaybackParameters(playbackParameters: PlaybackParameters) {
|
||||||
player.rate = playbackParameters.speed.coerceAtLeast(0f)
|
player.rate = playbackParameters.speed.coerceAtLeast(0.01f)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPlaybackParameters(): PlaybackParameters =
|
override fun getPlaybackParameters(): PlaybackParameters =
|
||||||
PlaybackParameters(player.rate.coerceAtLeast(0f))
|
PlaybackParameters(player.rate.takeIf { it > 0f } ?: 1f)
|
||||||
|
|
||||||
override fun stop() {
|
override fun stop() {
|
||||||
player.stop()
|
player.stop()
|
||||||
@@ -505,6 +511,7 @@ class VlcPlayer(ctx: Context) :
|
|||||||
|
|
||||||
override fun release() {
|
override fun release() {
|
||||||
player.setEventListener(null)
|
player.setEventListener(null)
|
||||||
|
listeners.release()
|
||||||
abandonAudioFocus()
|
abandonAudioFocus()
|
||||||
player.stop()
|
player.stop()
|
||||||
clearVideoSurface()
|
clearVideoSurface()
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
|
android:screenOrientation="nosensor"
|
||||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
|
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:resizeableActivity="true"
|
android:resizeableActivity="true"
|
||||||
|
|||||||
Reference in New Issue
Block a user