Я использую версию 1.4.1 Media3.exoplayer, и я хочу использовать Exoplayer для отображения изображений. Я обнаружил, что изображения перечислены как поддерживаемые типы носителей, но когда я следил за кодом в документации, изображение отображается неправильно. Я не смог найти соответствующую помощь в Интернете или из искусственного интеллекта. Ниже приведен код, который я написал: < /p>
class ImagePlayerActivity : ComponentActivity() {
val TAG = "ImagePlayerActivity"
@OptIn(UnstableApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val exoPlayer = ExoPlayer.Builder(this).setRenderersFactory(
object : DefaultRenderersFactory(this) {
}).build()
exoPlayer.addListener(playerListener)
setContent {
ExoplayerdiydemoTheme {
Surface(modifier = Modifier.fillMaxSize()) {
SurfaceViewCompose(exoPlayer)
}
}
}
Log.d(TAG, "onCreate:")
}
@Composable
fun SurfaceViewCompose(player: ExoPlayer) {
val context = LocalContext.current
val surfaceView = remember { SurfaceView(context) }
DisposableEffect(surfaceView) {
val surfaceHolderCallback = object : SurfaceHolder.Callback {
@OptIn(UnstableApi::class)
override fun surfaceCreated(holder: SurfaceHolder) {
player.setVideoSurface(holder.surface)
Log.d(TAG, "surfaceCreated: exoplay surfaceCreated")
val mediaItem =
MediaItem.Builder()
.setUri(Uri.parse("android.resource://" + packageName + "/" + R.raw.textimage))
.setMimeType(IMAGE_JPEG).setImageDurationMs(60*1000L).build()
val dataSourceFactory = DefaultDataSource.Factory(context)
val mediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(mediaItem)
player.setMediaSource(mediaSource)
player.prepare()
player.play()
}
override fun surfaceChanged(
holder: SurfaceHolder,
format: Int,
width: Int,
height: Int
) {
// player.setVideoSurface(holder.surface)
Log.d(TAG, "surfaceChanged: exoplay surfaceChanged")
}
override fun surfaceDestroyed(holder: SurfaceHolder) {
player.clearVideoSurface()
player.release()
Log.d(TAG, "surfaceDestroyed: exoplay release")
}
}
surfaceView.holder.addCallback(surfaceHolderCallback)
onDispose {
surfaceView.holder.removeCallback(surfaceHolderCallback)
player.clearVideoSurface()
}
}
AndroidView(
factory = { surfaceView },
modifier = Modifier.fillMaxSize()
)
}
private val playerListener = object : Player.Listener {
override fun onPlaybackStateChanged(playbackState: Int) {
Log.d(TAG, "onPlaybackStateChanged: $playbackState")
}
override fun onPlayerError(error: PlaybackException) {
Log.d(TAG, "onPlayerError: error code ${error.errorCode} message ${error.message}")
}
}
}
< /code>
под одним и тем же кодом, как видео, так и аудио, но мне нужно отображать изображения.
не только это, но и я также планирую расширить экзоплайер, чтобы поддержать воспроизведение GIF, один раз Поддержка изображения работает.
Подробнее здесь: https://stackoverflow.com/questions/794 ... in-android
Как отображать изображения на поверхности, используя Exoplayer в Android ⇐ Android
Форум для тех, кто программирует под Android
1739440716
Anonymous
Я использую версию 1.4.1 Media3.exoplayer, и я хочу использовать Exoplayer для отображения изображений. Я обнаружил, что изображения перечислены как поддерживаемые типы носителей, но когда я следил за кодом в документации, изображение отображается неправильно. Я не смог найти соответствующую помощь в Интернете или из искусственного интеллекта. Ниже приведен код, который я написал: < /p>
class ImagePlayerActivity : ComponentActivity() {
val TAG = "ImagePlayerActivity"
@OptIn(UnstableApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val exoPlayer = ExoPlayer.Builder(this).setRenderersFactory(
object : DefaultRenderersFactory(this) {
}).build()
exoPlayer.addListener(playerListener)
setContent {
ExoplayerdiydemoTheme {
Surface(modifier = Modifier.fillMaxSize()) {
SurfaceViewCompose(exoPlayer)
}
}
}
Log.d(TAG, "onCreate:")
}
@Composable
fun SurfaceViewCompose(player: ExoPlayer) {
val context = LocalContext.current
val surfaceView = remember { SurfaceView(context) }
DisposableEffect(surfaceView) {
val surfaceHolderCallback = object : SurfaceHolder.Callback {
@OptIn(UnstableApi::class)
override fun surfaceCreated(holder: SurfaceHolder) {
player.setVideoSurface(holder.surface)
Log.d(TAG, "surfaceCreated: exoplay surfaceCreated")
val mediaItem =
MediaItem.Builder()
.setUri(Uri.parse("android.resource://" + packageName + "/" + R.raw.textimage))
.setMimeType(IMAGE_JPEG).setImageDurationMs(60*1000L).build()
val dataSourceFactory = DefaultDataSource.Factory(context)
val mediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(mediaItem)
player.setMediaSource(mediaSource)
player.prepare()
player.play()
}
override fun surfaceChanged(
holder: SurfaceHolder,
format: Int,
width: Int,
height: Int
) {
// player.setVideoSurface(holder.surface)
Log.d(TAG, "surfaceChanged: exoplay surfaceChanged")
}
override fun surfaceDestroyed(holder: SurfaceHolder) {
player.clearVideoSurface()
player.release()
Log.d(TAG, "surfaceDestroyed: exoplay release")
}
}
surfaceView.holder.addCallback(surfaceHolderCallback)
onDispose {
surfaceView.holder.removeCallback(surfaceHolderCallback)
player.clearVideoSurface()
}
}
AndroidView(
factory = { surfaceView },
modifier = Modifier.fillMaxSize()
)
}
private val playerListener = object : Player.Listener {
override fun onPlaybackStateChanged(playbackState: Int) {
Log.d(TAG, "onPlaybackStateChanged: $playbackState")
}
override fun onPlayerError(error: PlaybackException) {
Log.d(TAG, "onPlayerError: error code ${error.errorCode} message ${error.message}")
}
}
}
< /code>
под одним и тем же кодом, как видео, так и аудио, но мне нужно отображать изображения.
не только это, но и я также планирую расширить экзоплайер, чтобы поддержать воспроизведение GIF, один раз Поддержка изображения работает.
Подробнее здесь: [url]https://stackoverflow.com/questions/79435747/how-to-display-images-on-a-surface-using-exoplayer-in-android[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия