【Android】媒体(更新...) 您所在的位置:网站首页 typora圆圈1 【Android】媒体(更新...)

【Android】媒体(更新...)

2023-06-14 02:45| 来源: 网络整理| 查看: 265

文章目录 参考Media3 ExoPlayerHello Exoplayer添加依赖网络权限和http添加布局PlayerView加载playerView Player events监听播放器的状态播放器日志在某一时刻触发事件 Playlists多视频播放列表调整播放列表替代播放列表和清除播放列表查询播放列表重复模式(REPEAT_MODE_OFF关闭循环播放、REPEAT_MODE_ALL循环整个列表、REPEAT_MODE_ONE循环单个)随机播放MediaItem设置Id监听媒体列表变化

参考

https://developer.android.google.cn/guide/topics/media/exoplayer/listening-to-player-events https://blog.csdn.net/yuantian_shenhai/article/details/127870700?spm=1001.2014.3001.5501

Media3 ExoPlayer Hello Exoplayer 添加依赖 ///media3 implementation "androidx.media3:media3-exoplayer:1.0.2" implementation "androidx.media3:media3-exoplayer-dash:1.0.2" implementation "androidx.media3:media3-ui:1.0.2" 网络权限和http android:usesCleartextTraffic="true" 添加布局PlayerView 加载playerView package com.example.mediaandroidjava; import androidx.appcompat.app.AppCompatActivity; import androidx.media3.common.MediaItem; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.ui.PlayerView; import android.os.Bundle; public class MainActivity extends AppCompatActivity { private PlayerView playerView; private ExoPlayer exoPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //配置player playerView = findViewById(R.id.player_view); exoPlayer = new ExoPlayer.Builder(this).build(); playerView.setPlayer(exoPlayer); MediaItem mediaItem = MediaItem.fromUri("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"); exoPlayer.setMediaItem(mediaItem); exoPlayer.prepare(); exoPlayer.play(); } @Override protected void onDestroy() { super.onDestroy(); //释放资源 exoPlayer.release(); } } Player events 监听播放器的状态 ///监听播放器的状态 exoPlayer.addListener(new Player.Listener() { @Override public void onIsPlayingChanged(boolean isPlaying) { Player.Listener.super.onIsPlayingChanged(isPlaying); Log.i(TAG, "isPlaying:" + isPlaying); } @Override public void onPlayerError(@NonNull PlaybackException error) { Player.Listener.super.onPlayerError(error); @Nullable Throwable cause = error.getCause(); if (cause instanceof HttpDataSource.HttpDataSourceException) { // An HTTP error occurred. HttpDataSource.HttpDataSourceException httpError = (HttpDataSource.HttpDataSourceException) cause; if (httpError instanceof HttpDataSource.InvalidResponseCodeException) { Log.i(TAG, "HttpDataSource.InvalidResponseCodeException"); } else { Log.i(TAG, "not HttpDataSource.InvalidResponseCodeException"); } } } @Override public void onEvents(Player player, Player.Events events) { Player.Listener.super.onEvents(player, events); if (events.contains(Player.EVENT_PLAYBACK_STATE_CHANGED) || events.contains(Player.EVENT_PLAY_WHEN_READY_CHANGED)) { // uiModule.updateUi(player); Log.i(TAG, "状态改变"); for (int i = 0; i // Do something at the specified playback position. Log.i(TAG, "视频播放至五秒时触发"); }).setLooper(Looper.getMainLooper()).setPosition(/* mediaItemIndex= */ 0, /* positionMs= */ 5_000) // .setPayload(customPayloadData) .setDeleteAfterDelivery(false).send();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a55phlOk-1686539491630)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230612090715605.png)]

Playlists 多视频播放列表 MediaItem mediaItemFirst = MediaItem.fromUri("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"); MediaItem mediaItemSecond = MediaItem.fromUri("http://vjs.zencdn.net/v/oceans.mp4"); exoPlayer = new ExoPlayer.Builder(this).build(); exoPlayer.addMediaItem(mediaItemFirst); exoPlayer.addMediaItem(mediaItemSecond); 调整播放列表 ///调整播放列表 // 在位置1处添加一个媒体 exoPlayer.addMediaItem(/* index= */ 1, MediaItem.fromUri("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")); // 将位置2处的媒体移到首位 exoPlayer.moveMediaItem(/* currentIndex= */ 2, /* newIndex= */ 0); // 将位置0处的媒体移除 exoPlayer.removeMediaItem(/* index= */ 0); 替代播放列表和清除播放列表 ///替代播放列表和清除播放列表 List newItems = ImmutableList.of(MediaItem.fromUri("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"), MediaItem.fromUri("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")); exoPlayer.setMediaItems(newItems, true); exoPlayer.clearMediaItems(); 查询播放列表 ///查询播放列表 exoPlayer.getMediaItemAt(0); exoPlayer.getMediaItemCount(); exoPlayer.getCurrentMediaItem(); exoPlayer.hasNextMediaItem(); exoPlayer.getNextMediaItemIndex(); 重复模式(REPEAT_MODE_OFF关闭循环播放、REPEAT_MODE_ALL循环整个列表、REPEAT_MODE_ONE循环单个) ///重复模式(REPEAT_MODE_OFF关闭循环播放、REPEAT_MODE_ALL循环整个列表、REPEAT_MODE_ONE循环单个) exoPlayer.setRepeatMode(Player.REPEAT_MODE_OFF); exoPlayer.setRepeatMode(Player.REPEAT_MODE_ALL); exoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE); 随机播放 exoPlayer.setShuffleOrder(new ShuffleOrder.DefaultShuffleOrder(new int[]{2, 1, 0}, 1)); exoPlayer.setShuffleModeEnabled(true); MediaItem设置Id MediaItem mediaItem = new MediaItem.Builder().setUri(uri).setMediaId(mediaId).build(); MediaItem mediaItem = new MediaItem.Builder().setUri(uri).setTag(metadata).build(); 监听媒体列表变化 exoPlayer.addListener(new Player.Listener() { //监听播放过渡到另一个媒体 @Override public void onMediaItemTransition(@Nullable MediaItem mediaItem, int reason) { Player.Listener.super.onMediaItemTransition(mediaItem, reason); @Nullable String metadata = null; Log.i(TAG, "过渡"); if (mediaItem != null && mediaItem.localConfiguration != null) { metadata = (String) mediaItem.localConfiguration.tag; } //updateUiForPlayingMediaItem(metadata); } //添加、删除或移动媒体项时,将调用 立即与 .此回调是 即使玩家尚未做好准备,也会调用。 @Override public void onTimelineChanged(@NonNull Timeline timeline, int reason) { Player.Listener.super.onTimelineChanged(timeline, reason); if (reason == TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED) { //updateUiForPlaylist(timeline); } } });


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有