基于google ExoPlayer 简单自定义播放界面
2018-02-02 15:24
886 查看
1. 基于google ExoPlayer播放m3u8,mp4等文件
简单自定义播放界面,新建一个Layout 布局文件命名为exo_playback_control_view,控件的id不能随便起, 要与exoPlayer原来PlaybackControlView的布局控件id,名称一致, 布局名称不一定是exo_playback_control_view,不过需要在SimpleExoPlayerView控件中添加一个: app:controller_layout_id="@layout/id" ,指定control的布局;如:2.如果需要详细的自定义播放界面,需要重写SimpleExoPlayerView,和PlaybackControlView。 3.重要的类
/** * 监听播放状态 */ private final class ComponentListener implements ExoPlayer.EventListener { @Override public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { switch (playbackState) { /** * The player is able to immediately /*play from its current position. The player will be playing if * {@link #getPlayWhenReady()} is true, and paused otherwise. */ case Player.STATE_READY:// showLoading(false); play(playWhenReady); break; /** * The player has finished playing the media. */ case Player.STATE_ENDED: showLoading(false); playDefault(); break; /** * The player does not have any media to play. */ case Player.STATE_IDLE: showLoading(true); break; /** * The player is not able to /*immediately play from its current position. This state typically * occurs when more data needs to be loaded. */ case Player.STATE_BUFFERING: showLoading(true); break; } } @Override public void onRepeatModeChanged(int repeatMode) { // Do nothing. } @Override public void onPositionDiscontinuity() { // Do nothing. } @Override public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) { // Do nothing. } @Override public void onTimelineChanged(Timeline timeline, Object manifest) { // Do nothing. } @Override public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) { // Do nothing. } @Override public void onLoadingChanged(boolean isLoading) { // Do nothing. } @Override public void onPlayerError(ExoPlaybackException error) { // Do nothing. } }4.重要的方法:
/** * 根据不同的Uri文件,生成不同的MediaSource * * @param uri * @param overrideExtension * @return */ private MediaSource buildMediaSource(Uri uri, String overrideExtension) { int type = Util.inferContentType(!TextUtils.isEmpty(overrideExtension) ? "." + overrideExtension : uri.getLastPathSegment()); switch (type) { case C.TYPE_SS: return new SsMediaSource(uri, buildDataSourceFactory(false), new DefaultSsChunkSource.Factory(mediaDataSourceFactory), null, null); case C.TYPE_DASH: return new DashMediaSource(uri, buildDataSourceFactory(false), new DefaultDashChunkSource.Factory(mediaDataSourceFactory), null, null); case C.TYPE_HLS: return new HlsMediaSource(uri, mediaDataSourceFactory, null, null); case C.TYPE_OTHER: return new ExtractorMediaSource(uri, mediaDataSourceFactory, new DefaultExtractorsFactory(), null, null); default: { throw new IllegalStateException("Unsupported type: " + type); } } }
5.代码下载:https://github.com/ctianju/ExoPlayerSamle[/code]
相关文章推荐
- 一款基于ExoPlayer的自定义播放器(已开源)
- ExoPlayer利用自定义DataSource实现直接播放AES加密音频
- android 视频播放 Google exoplayer
- ExoPlayer简单实现播放本地视频
- ExoPlayer播放视频的简单使用及播放视频宽高设置的源码分析
- 一款基于ExoPlayer的自定义播放器(已开源)
- Exoplayer+Exomedia之玩转视频播放事件监听
- 基于 exoplayer 的 videoview
- [置顶] 使用红孩儿工具箱完成基于Cocos2d-x的简单游戏动画界面
- android 使用MideaPlayer API来播放简单的应用
- 简单的欢迎界面,延时播放
- iOS开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- 一个基于Window Media Player控件的简单播放器
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- FmlPlayer - 基于BASS音频库封装的Android音频播放库
- 12.1.3 自定义播放界面
- iOS开发--利用MPMoviePlayerViewController播放视频简单实现
- 基于Richedit的简单IM实现之一:界面部分
- QT简单音乐播放器(多界面来回切换、自定义界面,音乐播放)
- iOS开发UI基础—24使用纯代码自定义UItableviewcell实现一个简单的微博界面布局