Я написал простую реализацию видео для потоковой передачи видео с URI с помощью Google ExoPlayer2. При необходимости я могу поделиться этим кодом.
Загрузка занимает от 0,5 с до 2 секунд. В настоящее время я показываю первый кадр видео за этот период. Для этого кадра Я вручную сделал снимок экрана и поместил его в свою базу данных в формате jpeg. Это длительный процесс, и я хочу, чтобы ExoPlayer сделал это для меня.
Я нашел решение, которое может сделать снимок экрана в проигрывателе surfaceTextureListener
. Но как только я настроил слушателя на это, мое видео показывалось в течение 0,5 секунды, а затем экран становился черным, а если видео не установлено, воспроизведение воспроизводится и работает нормально. onPlayerStateChanged
все еще срабатывает.
private fun initializeVideo() {
textureView.surfaceTextureListener = surfaceTextureListener
}
private var surfaceTextureListener: SurfaceTextureListener = object : SurfaceTextureListener {
override fun onSurfaceTextureAvailable(
surface: SurfaceTexture,
width: Int,
height: Int
) {
val textureView = binding?.videoView?.videoSurfaceView as TextureView
binding?.loadingFrame?.setImageBitmap(textureView.bitmap)
}
override fun onSurfaceTextureSizeChanged(
surface: SurfaceTexture,
width: Int,
height: Int
) {}
override fun onSurfaceTextureDestroyed(surface: SurfaceTexture): Boolean {
return false
}
override fun onSurfaceTextureUpdated(surface: SurfaceTexture) {}
}
В xml:
app:surface_type="texture_view"
Вторая проблема заключается в том, что при просмотре растрового изображения в Android Studio отображается пустой прозрачный вид, который представляет собой высоту и ширину, определенные в XML.
Есть ли способ получить снимок экрана перед загрузкой или Подход отдельного файла .jpg - лучшее решение, и должен ли сервер реализовывать некоторые функции создания снимков экрана?