Android Exoplayer Seek сбрасывается до 0 при потоковой передаче через туннель CloudFlareAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Exoplayer Seek сбрасывается до 0 при потоковой передаче через туннель CloudFlare

Сообщение Anonymous »

Я отлаживаю приложение для Audiobookfelf-App Android. Аудио потоки правильно проходят через туннель CloudFlare, но в поисках вперед воспроизведение приводит к сбросу в позицию 0 вместо предполагаемого положения. Эта проблема возникает только на настольных браузерах Android , PWA и мобильных веб-приложениях работает правильно с той же настройкой CloudFlare.

Код: Выделить всё

@PluginMethod
fun seekForward(call: PluginCall) {
val amount: Int = call.getInt("value", 0) ?: 0
Handler(Looper.getMainLooper()).post {
playerNotificationService.seekForward(amount * 1000L) // convert to ms
call.resolve()
}
}

fun seekForward(amount: Long) {
seekPlayer(getCurrentTime() + amount)
}

fun seekPlayer(time: Long) {
var timeToSeek = time
Log.d(tag, "seekPlayer mediaCount = ${currentPlayer.mediaItemCount} | $timeToSeek")

if (timeToSeek < 0) {
Log.w(tag, "seekPlayer invalid time $timeToSeek - setting to 0")
timeToSeek = 0L
} else if (timeToSeek > getDuration()) {
Log.w(tag, "seekPlayer invalid time $timeToSeek - setting to MAX - 2000")
timeToSeek = getDuration() - 2000L
}

if (currentPlayer.mediaItemCount > 1) {
currentPlaybackSession?.currentTime = timeToSeek / 1000.0
val newWindowIndex = currentPlaybackSession?.getCurrentTrackIndex() ?: 0
val newTimeOffset = currentPlaybackSession?.getCurrentTrackTimeMs() ?: 0
Log.d(tag, "seekPlayer seekTo $newWindowIndex | $newTimeOffset")
currentPlayer.seekTo(newWindowIndex, newTimeOffset)
} else {
currentPlayer.seekTo(timeToSeek)  // Single file seek
}
}
< /code>
 Обработчик разрыва положения < /h6>
override fun onPositionDiscontinuity(
oldPosition: Player.PositionInfo,
newPosition: Player.PositionInfo,
reason: Int
) {
if (reason == Player.DISCONTINUITY_REASON_SEEK) {
Log.d(tag, "onPositionDiscontinuity: oldPosition=${oldPosition.positionMs}/${oldPosition.mediaItemIndex}, newPosition=${newPosition.positionMs}/${newPosition.mediaItemIndex}, isPlaying=${playerNotificationService.currentPlayer.isPlaying} reason=SEEK")
playerNotificationService.mediaProgressSyncer.seek()
lastPauseTime = 0
} else {
Log.d(tag, "onPositionDiscontinuity: oldPosition=${oldPosition.positionMs}/${oldPosition.mediaItemIndex}, newPosition=${newPosition.positionMs}/${newPosition.mediaItemIndex}, isPlaying=${playerNotificationService.currentPlayer.isPlaying}, reason=$reason")
}
}
< /code>
 соответствующие журналы, показывающие проблему (не уверен, что это точные проблемы ??) < /h4>
14:31:04.380 seekForward methodData: {"value":10}
14:31:04.381 seekPlayer mediaCount = 1 | 52314
14:31:04.382 onPositionDiscontinuity: oldPosition=42314/0, newPosition=52314/0, isPlaying=false reason=SEEK
14:31:04.382 seek: Jivan Ke Dwar Ki Kunji, currentTime=52.314
14:31:04.405 STATE_BUFFERING : 52314
14:31:04.408 onPositionDiscontinuity: oldPosition=52314/0, newPosition=0/0, isPlaying=false, reason=2
14:31:04.408 EVENT_IS_LOADING_CHANGED : true
14:31:04.420 onMetadata {"duration":7024.620396,"currentTime":52.314,"playerState":"BUFFERING"}
14:31:04.638 STATE_READY : -9223372036854775807
14:31:04.648 onMetadata {"duration":7024.620396,"currentTime":0,"playerState":"READY"}
После успешного поиска до 52314 мс существует второе событие onpositiondiscontinuity с разумом = 2 , которое немедленно сбрасывает позицию до 0. Текущее время переходит от 52.314s обратно до 0s.
. Может ли быть настройки на CloudFlare или на сервере, которые могли бы помешать exoplayer сбросить позицию на 0 после поиска?

Подробнее здесь: https://stackoverflow.com/questions/797 ... are-tunnel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»