时间:2021-05-20
播放器的简单设计
播放器基于IJKPlayer来设计的, 播放器大致分三层
1.播放内核(基于ijkMediaplayer)
2.播放器View
3.播放器的MediaController
1、封装播放内核
我们都知道需要播放一个视频需要三个过程 1.create MediaPlayer 2.MediaPlayer prepare 3.MediaPlayer 与 Surface 绑定
xinvideoplayer中使用了VideoManager来控制ijkmediaplayer 所有的操作
三个过程 我们使用 HandlerThread + Hander 来实现 第一个过程创建大致可能需要100ms左右,严重影响UI线程!!!
第一个过程: create MediaPlayer
new IjkMediaPlayer() 设置一些播放器回调方法
//IJK 的 Mediaplayer api 类似 Android 系统播放器api//IMediaPlayer.classpublic interface IMediaPlayer{ void setOnPreparedListener(IMediaPlayer.OnPreparedListener var1); //prepareAsync 之后回调方法 void setOnCompletionListener(IMediaPlayer.OnCompletionListener var1); //播放完成回调方法 void setOnBufferingUpdateListener(IMediaPlayer.OnBufferingUpdateListener var1);//当播放网络的数据流的buffer发生变化的时候 void setOnSeekCompleteListener(IMediaPlayer.OnSeekCompleteListener var1);//当seek定位操作完成后 void setOnVideoSizeChangedListener(IMediaPlayer.OnVideoSizeChangedListener var1);//当视频的大小第一次被知道或者发生改变时 void setOnErrorListener(IMediaPlayer.OnErrorListener var1);//当有发生错误 void setOnInfoListener(IMediaPlayer.OnInfoListener var1);//当有信息或者警告 void setOnTimedTextListener(IMediaPlayer.OnTimedTextListener var1); //当媒体的时间数据需要被显示}第二个阶段 prepare
mediaPlayer.prepareAsync(); 等待回调 IMediaPlayer.OnPreparedListener#onPrepare()
第三个阶段 给IJKMediaPlayer 绑定 Surface 呈现画面
mediaPlayer.setSurface();
2、播放器View
实现 播放器基本方法(IViewPlayer)和 播放内核回调方法(IMediaPlayerListener)
IMediaPlayerListener 是包装 IMediaPlayer 所有接口并通过 Handle 发送到主线程中实现
//IVideoPlayer.javainterface IVideoPlayer{ void start();//开始播放 void pause();//暂停播放 void seekTo(long time); //seekto time void release();//关闭播放 void setVideoPath();//设置视频路径 void onStartFullScreen();//全屏播放 void onBackFullScreen(); //退出全屏 void onResumeVideo();//播放器后台唤起 void onPauseVideo();//切换后台 int getCurrentState();//视频的当前状态 int getCurrentScreenState(); //当前屏幕的状态 例如小屏,大屏,竖屏 long getTcpSpeed();//获取网速 void switchVideoSource(String url,long delay);//切换清晰度 并流畅的切换}public interface MediaPlayerListenerextends IVideoPlayer{ void onPrepared(); void onAutoCompletion(); void onCompletion(); void onBufferingUpdate(int percent); void onSeekComplete(long currentPosition); void onError(int what, int extra); void onInfo(int what, int extra); void onVideoSizeChanged();}以上接口大致满足了所有播放器的功能要求!!
3.MediaController
BaseVideoPlayer#setVideoController()
播放器的简单接入使用
播放器的内部实现
预加载需求 & 复用播放器
智能后台&唤起处理
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
介绍ijkplayer是一款非常火的开源视频播放器,android和IOS通用。关于怎么编译怎么导入androidStudio中自己的项目,其中坑很多,本篇记录
本文实例为大家分享了Android项目实现视频播放器的具体代码,供大家参考,具体内容如下VideoView控件是播放视频用的,借助它可以完成一个简易的视频播放器
本文实例讲述了Android开发实现的简单媒体播放器功能。分享给大家供大家参考,具体如下:一、概述:因为播放视频需要很大的内存,所以必须使用surfacevie
安捷播放器怎么搜视频呢?安捷播放器是一款看片神器,其实安捷播放器就是一款bt种子播放器,那么安捷播放器怎么搜视频呢?下文小编就W教大家安捷播放器看视频的教程,感
现在观看各种视频的播放器里面,射手播放器很火,主要是免费提供字幕,其实射手播放器还是很强大的,可以翻转画面的。那么射手影音播放器怎样让视频画面翻转呢?下面就