当前位置: 首页 > news >正文

米客优品的网站是哪做的系统与网站的区别

米客优品的网站是哪做的,系统与网站的区别,趣快排seo是什么,网站建设及维护招聘03.视频播放器Api说明目录介绍01.最简单的播放02.如何切换视频内核03.切换视频模式04.切换视频清晰度05.视频播放监听06.列表中播放处理07.悬浮窗口播放08.其他重要功能Api09.播放多个视频10.VideoPlayer相关Api11.Controller相关Api12.边播放边缓存api13.类似抖音视频预加载14…03.视频播放器Api说明目录介绍01.最简单的播放02.如何切换视频内核03.切换视频模式04.切换视频清晰度05.视频播放监听06.列表中播放处理07.悬浮窗口播放08.其他重要功能Api09.播放多个视频10.VideoPlayer相关Api11.Controller相关Api12.边播放边缓存api13.类似抖音视频预加载14.视频播放器埋点00.视频播放器通用框架基础封装视频播放器player可以在ExoPlayer、MediaPlayer声网RTC视频播放器内核原生MediaPlayer可以自由切换对于视图状态切换和后期维护拓展避免功能和业务出现耦合。比如需要支持播放器UI高度定制而不是该lib库中UI代码针对视频播放音频播放播放回放以及视频直播的功能。使用简单代码拓展性强封装性好主要是和业务彻底解耦暴露接口监听给开发者处理业务具体逻辑该播放器整体架构播放器内核(自由切换) 视频播放器 边播边缓存 高度定制播放器UI视图层01.最简单的播放必须需要的四步骤代码如下所示//创建基础视频播放器一般播放器的功能 BasisVideoController controller new BasisVideoController(this); //设置控制器 mVideoPlayer.setVideoController(controller); //设置视频播放链接地址 mVideoPlayer.setUrl(url); //开始播放 mVideoPlayer.start(); - 开始播放//播放视频 videoPlayer.start(); 02.如何切换视频内核创建视频播放器PlayerFactory playerFactory IjkPlayerFactory.create(); IjkVideoPlayer ijkVideoPlayer (IjkVideoPlayer) playerFactory.createPlayer(this); PlayerFactory playerFactory ExoPlayerFactory.create(); ExoMediaPlayer exoMediaPlayer (ExoMediaPlayer) playerFactory.createPlayer(this); PlayerFactory playerFactory MediaPlayerFactory.create(); AndroidMediaPlayer androidMediaPlayer (AndroidMediaPlayer) playerFactory.createPlayer(this); - 如何配置视频内核//播放器配置注意此为全局配置例如下面就是配置ijk内核播放器 VideoViewManager.setConfig(VideoPlayerConfig.newBuilder() .setLogEnabled(true)//调试的时候请打开日志方便排错 .setPlayerFactory(IjkPlayerFactory.create()) .build()); - 切换视频内核处理代码03.切换视频模式关于全屏模式相关api//进入全屏 mVideoPlayer.startFullScreen(); //退出全屏 mVideoPlayer.stopFullScreen(); - 关于小窗口播放相关api//开启小屏 mVideoPlayer.startTinyScreen(); //退出小屏 mVideoPlayer.stopTinyScreen(); 04.切换视频清晰度05.视频播放监听这个分为两部分第一部分是播放模式监听第二部分是播放状态监听暴露给开发者。这里不建议使用01非常不方便简明之意采用注解限定。mVideoPlayer.setOnStateChangeListener(new OnVideoStateListener() { /** * 播放模式 * 普通模式小窗口模式正常模式三种其中一种 * MODE_NORMAL 普通模式 * MODE_FULL_SCREEN 全屏模式 * MODE_TINY_WINDOW 小屏模式 * param playerState 播放模式 */ Override public void onPlayerStateChanged(int playerState) { switch (playerState) { case ConstantKeys.PlayMode.MODE_NORMAL: //普通模式 break; case ConstantKeys.PlayMode.MODE_FULL_SCREEN: //全屏模式 break; case ConstantKeys.PlayMode.MODE_TINY_WINDOW: //小屏模式 break; } } /**06.在列表中播放第一步初始化视频播放器创建VideoPlayer对象mVideoView new VideoPlayer(context); mVideoView.setOnStateChangeListener(new VideoPlayer.SimpleOnStateChangeListener() { Override public void onPlayStateChanged(int playState) { //监听VideoViewManager释放重置状态 if (playState ConstantKeys.CurrentState.STATE_IDLE) { PlayerUtils.removeViewFormParent(mVideoView); mLastPos mCurPos; mCurPos -1; } } }); mController new BasisVideoController(context); mVideoView.setController(mController); - 第二步设置RecyclerView和AdaptermAdapter.setOnItemChildClickListener(new OnItemChildClickListener() { Override public void onItemChildClick(int position) { //点击item播放视频 startPlay(position); } }); mRecyclerView.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() { Override public void onChildViewAttachedToWindow(NonNull View view) { }Overridepublic void onChildViewDetachedFromWindow(NonNull View view) { FrameLayout playerContainer view.findViewById(R.id.player_container); View v playerContainer.getChildAt(0); if (v ! null v mVideoView !mVideoView.isFullScreen()) { //销毁视频 releaseVideoView(); } } }); - 第三步播放视频和销毁视频的逻辑代码/** * 开始播放 * param position 列表位置 */ protected void startPlay(int position) { if (mCurPos position) return; if (mCurPos ! -1) { releaseVideoView(); } VideoInfoBean videoBean mVideos.get(position); mVideoView.setUrl(videoBean.getVideoUrl()); View itemView mLinearLayoutManager.findViewByPosition(position); if (itemView null) return; VideoRecyclerViewAdapter.VideoHolder viewHolder (VideoRecyclerViewAdapter.VideoHolder) itemView.getTag(); //把列表中预置的PrepareView添加到控制器中注意isPrivate此处只能为true。 mController.addControlComponent(viewHolder.mPrepareView, true); PlayerUtils.removeViewFormParent(mVideoView); viewHolder.mPlayerContainer.addView(mVideoView, 0); //播放之前将VideoView添加到VideoViewManager以便在别的页面也能操作它 VideoViewManager.instance().add(mVideoView, list); mVideoView.start(); mCurPos position; } private void releaseVideoView() {08.其他重要功能Api设置视频播放器背景图和视频标题。//注意下面这个controller是指BasisVideoController //设置视频背景图 ImageView thumb controller.getThumb(); Glide.with(this).load(R.drawable.image_default).into(controller.getThumb()); //设置视频标题 controller.setTitle(视频标题); - 判断是否锁屏//判断是否锁屏 boolean locked controller.isLocked(); //设置是否锁屏 controller.setLocked(true); - 设置播放视频缩放类型。借鉴于网络博客类似图片缩放。建议选择169类型最常见09.播放多个视频这个举一个例子比如同时播放两个视频当然这种情况在app中可能比较少//必须设置 player1.setUrl(VOD_URL_1); VideoPlayerBuilder.Builder builder VideoPlayerBuilder.newBuilder(); builder.setEnableAudioFocus(false); VideoPlayerBuilder videoPlayerBuilder new VideoPlayerBuilder(builder); player1.setVideoBuilder(videoPlayerBuilder); BasisVideoController controller1 new BasisVideoController(this); player1.setController(controller1); mVideoViews.add(player1); //必须设置player2.setUrl(VOD_URL_2); VideoPlayerBuilder.Builder builder2 VideoPlayerBuilder.newBuilder(); builder.setEnableAudioFocus(false); VideoPlayerBuilder videoPlayerBuilder2 new VideoPlayerBuilder(builder2); player2.setVideoBuilder(videoPlayerBuilder2); BasisVideoController controller2 new BasisVideoController(this); player2.setController(controller2); mVideoViews.add(player2); - 那么要是页面切换到后台如何处理多个视频的暂停功能呢如下所示Override protected void onPause() { super.onPause(); for (VideoPlayer vv : mVideoViews) { vv.pause(); } } Overrideprotected void onResume() { super.onResume(); for (VideoPlayer vv : mVideoViews) { vv.pause(); } } Overrideprotected void onDestroy() { super.onDestroy(); for (VideoPlayer vv : mVideoViews) { vv.release(); } } Overridepublic void onBackPressed() { for (VideoPlayer vv : mVideoViews) { if (vv.onBackPressed()) return; } super.onBackPressed(); } 10.VideoPlayer相关Api关于视频播放相关的api如下所示//暂停播放 mVideoPlayer.pause(); //视频缓冲完毕准备开始播放时回调 mVideoPlayer.onPrepared(); //重新播放 mVideoPlayer.replay(true); //继续播放 mVideoPlayer.resume(); //调整播放进度 mVideoPlayer.seekTo(100); //循环播放 默认不循环播放 mVideoPlayer.setLooping(true); //设置播放速度 mVideoPlayer.setSpeed(1.1f); //设置音量 0.0f-1.0f 之间 mVideoPlayer.setVolume(1,1); //开始播放 mVideoPlayer.start(); - 关于视频切换播放模式相关api//判断是否处于全屏状态 boolean fullScreen mVideoPlayer.isFullScreen(); //是否是小窗口模式 boolean tinyScreen mVideoPlayer.isTinyScreen(); //进入全屏 mVideoPlayer.startFullScreen(); //退出全屏 mVideoPlayer.stopFullScreen(); //开启小屏 mVideoPlayer.startTinyScreen(); //退出小屏 mVideoPlayer.stopTinyScreen(); - 关于其他比如获取速度音量设置属性相关Api11.Controller相关ApiController控制器相关的Api说明12.边播放边缓存api如下所示13.类似抖音视频预加载如下所示这个是针对ViewPager//获取PreloadManager预加载管理者对象 mPreloadManager PreloadManager.getInstance(this); //在播放视频的时候 String playUrl mPreloadManager.getPlayUrl(url); VideoLogUtils.i(startPlay: position: position url: playUrl); mVideoPlayer.setUrl(playUrl); //在页面滚动的时候 mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { Override public void onPageScrollStateChanged(int state) { super.onPageScrollStateChanged(state); if (state VerticalViewPager.SCROLL_STATE_IDLE) { mPreloadManager.resumePreload(mCurPos, mIsReverseScroll); } else { mPreloadManager.pausePreload(mCurPos, mIsReverseScroll); } } }); - 如下所示这个是针对RecyclerViewrecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { /* 是否反向滑动 */ private boolean mIsReverseScroll; Overridepublic void onScrolled(NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (dy0){ //表示下滑 mIsReverseScroll false; } else { //表示上滑 mIsReverseScroll true; } } Overridepublic void onScrollStateChanged(NonNull RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState VerticalViewPager.SCROLL_STATE_IDLE) { mPreloadManager.resumePreload(mCurPos, mIsReverseScroll); } else { mPreloadManager.pausePreload(mCurPos, mIsReverseScroll); } } }); 14.视频播放器埋点代码如下所示写一个类实现BuriedPointEvent即可。即可埋点视频的播放次数播放进度点击视频广告啥的方便统一管理public class BuriedPointEventImpl implements BuriedPointEvent {/** * 进入视频播放 * param url 视频url */ Override public void playerIn(String url) {} /*** 退出视频播放 * param url 视频url */ Override public void playerDestroy(String url) {}/** * 视频播放完成 * param url 视频url */ Override public void playerCompletion(String url) {}/** * 视频播放异常 * param url 视频url * param isNetError 是否是网络异常 */ Override public void onError(String url, boolean isNetError) {}/** * 点击了视频广告 * param url 视频url */ Override public void clickAd(String url) {}/** * 退出视频播放时候的播放进度百度分 * param url 视频url * param progress 视频进度计算百分比【退出时候进度 / 总进度】 */ Override public void playerOutProgress(String url, float progress) {}/** * 视频切换音频 * param url 视频url */ Override public void videoToMedia(String url) {}}15.播放器示例展示图
http://www.pierceye.com/news/589103/

相关文章:

  • 网站游戏正规网站建设安卓系统软件开发培训机构
  • 关于网站集约化建设的讲话周口seo公司
  • 长沙做网站的公司哪家最好服务公司取名
  • 网站缩略图制作宁波商城网站建设
  • 公司网站公众号维护怎么做湖南网站建设
  • 商务网站建设实训结论装饰装修工程
  • dw做网站简单吗网络科技建设网站
  • 天台建设局网站wordpress编辑器没有16px
  • 携程网站建设计划管理与进度控制志鸿优化设计电子版
  • 网站一级域名和二级域名wordpress 插件 页面
  • 怎么做免费网站如何让百度收录网网站建设设计
  • 河北建设工程信息网官方网站证件在线制作免费
  • 推广网官方推广网站wordpress用户角色权限
  • 电子商务网站模板html淘宝网页版登录
  • 忆达城市建设游戏网站佛山市和城乡建设局网站
  • 备案后的域名改网站名青浦建设机械网站
  • 网站地图怎么做html网络营销论文2000字
  • 武进区城乡建设局网站组建网站建设团队
  • 做淘宝链接模板网站广安网站建设兼职
  • 受欢迎的网站建设平台有用的网站地址
  • 网站建设推广岗位网站建设法规
  • ftp两个网站子域名的绑定郑州网站推广公司
  • 安庆网站设计哈尔滨工程招标信息网
  • 精湛的佛山网站设计太原网站建设培训
  • 邹城市住房和建设局网站深圳比较好的vi设计公司
  • 企业网站建设维护方案一元购物网站怎么做
  • 网站建设优化公司哪家好兰州做网站公司es5188
  • jsp网站开发工资住建网查询
  • 长沙建网站需要多少钱夹江移动网站建设
  • 淄博网站制作高端网站后台任务