Рассчитайте процент прогресса просмотра видео и сохраните егоAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Рассчитайте процент прогресса просмотра видео и сохраните его

Сообщение Anonymous »

Я разрабатываю приложение для Android с использованием Kotlin и Android Studio. Я хочу отображать ход воспроизведения видео в ProgressBar и TextView, пока пользователь смотрит видео с помощью ExoPlayer.
Однако я хочу гарантировать, что если пользователь пропустит или перемотает видео с помощью SeekBar, они будут пропущены или повторены. разделы не учитываются в расчете процента прогресса. Я хочу, чтобы процент прогресса отражал время фактического воспроизведения видео, момент за моментом.
Кроме того, я хочу, чтобы каждая просматриваемая секунда засчитывалась только один раз в процент прогресса, поэтому, если пользователь пересматривает определенные разделы видео, эти повторяющиеся секунды больше не учитываются при расчете прогресса.
Мне также нужно сохранить этот процент прогресса, количество просмотренных секунд и соответствующие сведения о видео, чтобы при закрытии и повторном открытии приложения информация для каждого видео сохраняется. При повторном воспроизведении видео расчет прогресса должен продолжиться с того места, где он был остановлен, на основе ранее сохраненных данных.
Более того, я хочу, чтобы пользователь мог возобновить просмотр видео с того места, где он остановился, при повторном воспроизведении. вход в деятельность. Должно быть ясно, где пользователь последний раз смотрел видео перед завершением действия.
Пожалуйста, помогите мне реализовать эту функцию в моем коде. Кроме того, если мне понадобится добавить для этого какие-либо библиотеки, дайте мне знать.
Заранее благодарю за помощь.

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

class ViewWatchLessonsActivity(
private val context: Context
) {

val binding = ActivityWatchLessonsBinding.inflate(LayoutInflater.from(context))

private val handler = Handler(Looper.getMainLooper())
private val player = ExoPlayer.Builder(context).build()
private val textViewProgress = binding.txtProgressNumber
private val progressBar = binding.progressBar

private var videoDuration: Long = 0
private var totalPlaybackTime: Long = 0
private var isUserSeeking: Boolean = false
private var progress: Int = 0
private val visitedSeconds = mutableSetOf()

fun initVideoView(videoAddress: Int) {

binding.playerViewOfLessons.player = player

val mediaItem =
MediaItem.fromUri("android.resource://${context.packageName}/${videoAddress}")
player.setMediaItem(mediaItem)
player.prepare()

player.addListener(object : Player.Listener {
override fun onPlaybackStateChanged(state: Int) {
when (state) {
Player.STATE_READY -> {
videoDuration = player.duration
updateProgressBar()
}
Player.STATE_ENDED -> {
handler.removeCallbacksAndMessages(null)
}
}
}

@Deprecated("Deprecated in Java")
override fun onPositionDiscontinuity(reason: Int) {
if (reason == Player.DISCONTINUITY_REASON_SEEK) {
isUserSeeking = false
}
}
})
}

private fun updateProgressBar() {
handler.post(object : Runnable {
@SuppressLint("SetTextI18n")
override fun run() {
val currentPosition = player.currentPosition

if (!isUserSeeking) {
val currentSecond = (currentPosition / 1000).toInt()

if (!visitedSeconds.contains(currentSecond)) {
visitedSeconds.add(currentSecond)
totalPlaybackTime += 1000
}

progress = (totalPlaybackTime / videoDuration.toFloat() * 100).toInt()
textViewProgress.text = "$progress/100%"
progressBar.progress = progress
}
handler.postDelayed(this, 1000)
}
})
}

fun onPause() {
handler.removeCallbacksAndMessages(null)
player.pause()
}

fun onResume() {
updateProgressBar()
}

fun onDestroy() {
handler.removeCallbacksAndMessages(null)
player.release()
}

}
"Я протестировал этот код. Он вычисляет процент прогресса видео так, как я хочу (т. е. пользовательские манипуляции с SeekBar на него не влияют, и повторяющиеся секунды не учитываются). Однако моя проблема в том, что, что бы я ни пробовал, я не мог сохранить процент прогресса таким образом, чтобы при повторном входе в действие процент прогресса рассчитывался на основе предыдущей информации, и воспроизведение видео возобновлялось. с того места, где он был остановлен. Вместо этого при повторном входе в действие процент выполнения отображается как нулевой как в TextView, так и в ProgressBar.
"Кстати, я тестировал этот метод как с SharedPreferences, так и с комнатой. базы данных, но в обоих методах я столкнулся с этой проблемой при сохранении."

Подробнее здесь: https://stackoverflow.com/questions/789 ... nd-save-it
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Процент прогресса FFmpeg в JavaScript
    Гость » » в форуме Javascript
    0 Ответы
    22 Просмотры
    Последнее сообщение Гость
  • Показывать процент прогресса при копировании файла
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Рассчитайте процент JavaScript
    Anonymous » » в форуме Html
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Рассчитайте процент JavaScript
    Anonymous » » в форуме Html
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Рассчитайте процент JavaScript
    Anonymous » » в форуме Jquery
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

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