SuperPlayer 是一个基于 IjkPlayer 的控制器,支持手势操作,滑动快进,快退,支持,上滑音量亮度的变化,支持指点位置播放,播放源的切换
来源:互联网 发布:mac版spss 如何安装 编辑:程序博客网 时间:2024/05/22 05:13
SuperPlayer
项目地址:supercwn/SuperPlayer
简介:SuperPlayer 是一个基于 IjkPlayer 的控制器,支持手势操作,滑动快进,快退,支持,上滑音量亮度的变化,支持指点位置播放,播放源的切换
SuperPlayer 是一个基于 IjkPlayer 的控制器,支持手势操作,滑动快进,快退,支持,上滑音量亮度的变化,支持指点位置播放,播放源的切换,亲测可用,废话少说,先上图
Screenshots
视频点播(直播)功能(播放网络视频,或者视频直播)
设置视频源(视频地址)是否是直播还是点播
player.setLive(true);//true:表示直播地址;false 表示点播地址
设置播放过程中是否监听网络的变化
player.setNetChangeListener(true);//true : 表示监听网络的变化;false : 播放的过程中不监听网络的变化
设置播放过程中的视频开始播放
player.onPrepared(new SuperPlayer.OnPreparedListener() { @Override public void onPrepared() { /** * 监听视频是否已经准备完成开始播放。(可以在这里处理视频封面的显示跟隐藏) */ } })
设置视频是否已经播放完成
player.onComplete(new Runnable() { @Override public void run() { /** * 监听视频是否已经播放完成了。(可以在这里处理视频播放完成进行的操作) */ } })
设置视频播放失败的监听
player.onError(new SuperPlayer.OnErrorListener() { @Override public void onError(int what, int extra) { /** * 监听视频播放失败的回调 */ } })
设置视频播放的信息
player.onInfo(new SuperPlayer.OnInfoListener() { @Override public void onInfo(int what, int extra) { /** * 监听视频的相关信息。 */ } })
设置视频播放的标题
player.setTitle(url)//设置视频的 titleName
设置视频播放大小
player.setScaleType(SuperPlayer.SCALETYPE_FITXY);其中可以设置/** * fitParent:scale the video uniformly (maintain the video's aspect ratio) * so that both dimensions (width and height) of the video will be equal to * or **less** than the corresponding dimension of the view. like * ImageView's `CENTER_INSIDE`.等比缩放,画面填满 view。 */public static final String SCALETYPE_FITPARENT = "fitParent";/** * fillParent:scale the video uniformly (maintain the video's aspect ratio) * so that both dimensions (width and height) of the video will be equal to * or **larger** than the corresponding dimension of the view .like * ImageView's `CENTER_CROP`.等比缩放,直到画面宽高都等于或小于 view 的宽高。 */public static final String SCALETYPE_FILLPARENT = "fillParent";/** * wrapContent:center the video in the view,if the video is less than view * perform no scaling,if video is larger than view then scale the video * uniformly so that both dimensions (width and height) of the video will be * equal to or **less** than the corresponding dimension of the view. * 将视频的内容完整居中显示,如果视频大于 view,则按比例缩视频直到完全显示在 view 中。 */public static final String SCALETYPE_WRAPCONTENT = "wrapContent";/** * fitXY:scale in X and Y independently, so that video matches view * exactly.不剪裁,非等比例拉伸画面填满整个 View */public static final String SCALETYPE_FITXY = "fitXY";/** * 16:9:scale x and y with aspect ratio 16:9 until both dimensions (width * and height) of the video will be equal to or **less** than the * corresponding dimension of the view.不剪裁,非等比例拉伸画面到 16:9,并完全显示在 View 中。 */public static final String SCALETYPE_16_9 = "16:9";/** * 4:3:scale x and y with aspect ratio 4:3 until both dimensions (width and * height) of the video will be equal to or **less** than the corresponding * dimension of the view.不剪裁,非等比例拉伸画面到 4:3,并完全显示在 View 中。 */public static final String SCALETYPE_4_3 = "4:3";
设置视频播放的手势操作
/** * 设置小屏幕是否支持手势操作(默认 false) * @param isSupportGesture * true : 支持(小屏幕支持,大屏幕支持) * false :不支持(小屏幕不支持,大屏幕支持) * @return */public SuperPlayer setSupportGesture(boolean isSupportGesture){ this.isSupportGesture = isSupportGesture; return this;}
还有很多的相关设置,就不一一的列出。具体的请看SuperPlayer.class
列表播放器
很多的设置跟点播直播的一致。但是比较应该注意的地方
其一:初始化适配器
private void initAdapter() { mAdapter = new SuperVideoAdapter(this,dataList); superRecyclerView.setAdapter(mAdapter); mAdapter.setPlayClick(new SuperVideoAdapter.onPlayClick() { @Override public void onPlayclick(int position, RelativeLayout image) { image.setVisibility(View.GONE); if (player.isPlaying() && lastPostion == position){ return; } postion = position; if (player.getVideoStatus() == IjkVideoView.STATE_PAUSED) { if (position != lastPostion) { player.stopPlayVideo(); player.release(); } } if (lastPostion != -1) { player.showView(R.id.adapter_player_control); } View view = superRecyclerView.findViewHolderForAdapterPosition(position).itemView; FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.adapter_super_video); frameLayout.removeAllViews(); player.showView(R.id.adapter_player_control); frameLayout.addView(player); player.play(dataList.get(position).getVideoUrl()); lastPostion = position; } }); /** * 播放完设置还原播放界面 */ player.onComplete(new Runnable() { @Override public void run() { ViewGroup last = (ViewGroup) player.getParent();//找到 videoitemview 的父类,然后 remove if (last != null && last.getChildCount() > 0) { last.removeAllViews(); View itemView = (View) last.getParent(); if (itemView != null) { itemView.findViewById(R.id.adapter_player_control).setVisibility(View.VISIBLE); } } } }); /*** * 监听列表的下拉滑动 */ superRecyclerView.addOnChildAttachStateChangeListener(new SuperRecyclerView.OnChildAttachStateChangeListener() { @Override public void onChildViewAttachedToWindow(View view) { int index = superRecyclerView.getChildAdapterPosition(view); View controlview = view.findViewById(R.id.adapter_player_control); if (controlview == null) { return; } view.findViewById(R.id.adapter_player_control).setVisibility(View.VISIBLE); if (index == postion) { FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.adapter_super_video); frameLayout.removeAllViews(); if (player != null && ((player.isPlaying()) || player.getVideoStatus() == IjkVideoView.STATE_PAUSED)) { view.findViewById(R.id.adapter_player_control).setVisibility(View.GONE); } if (player.getVideoStatus() == IjkVideoView.STATE_PAUSED) { if (player.getParent() != null) ((ViewGroup) player.getParent()).removeAllViews(); frameLayout.addView(player); return; } } } @Override public void onChildViewDetachedFromWindow(View view) { int index = superRecyclerView.getChildAdapterPosition(view); if ((index) == postion) { if (true) { if (player != null) { player.stop(); player.release(); player.showView(R.id.adapter_player_control); } } } } });}
其二:重写 onConfigurationChanged
@Overridepublic void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (player != null) { player.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { fullScreen.setVisibility(View.GONE); fullScreen.removeAllViews(); superRecyclerView.setVisibility(View.VISIBLE); if (postion <= mLayoutManager.findLastVisibleItemPosition() && postion >= mLayoutManager.findFirstVisibleItemPosition()) { View view = superRecyclerView.findViewHolderForAdapterPosition(postion).itemView; FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.adapter_super_video); frameLayout.removeAllViews(); ViewGroup last = (ViewGroup) player.getParent();//找到 videoitemview 的父类,然后 remove if (last != null) { last.removeAllViews(); } frameLayout.addView(player); } int mShowFlags = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; fullScreen.setSystemUiVisibility(mShowFlags); } else { ViewGroup viewGroup = (ViewGroup) player.getParent(); if (viewGroup == null) return; viewGroup.removeAllViews(); fullScreen.addView(player); fullScreen.setVisibility(View.VISIBLE); int mHideFlags = View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION ; fullScreen.setSystemUiVisibility(mHideFlags); } } else { fullScreen.setVisibility(View.GONE); }}
我的另外个开源库,喜欢的给个 star
SuperRecycleView
3 0
- SuperPlayer 是一个基于 IjkPlayer 的控制器,支持手势操作,滑动快进,快退,支持,上滑音量亮度的变化,支持指点位置播放,播放源的切换
- ijkplayer简单实现播放 ijkplayer是Bilibili基于ffmpeg开发并开源的轻量级视频播放器,支持播放本地网络视频,也支持流媒体播放。支持
- 用AVFoundation的AVPlayer做的一个小视频播放器,包含左滑快退,右滑快进,上滑音量加,下滑音量减等基本功能。
- 自定义播放操作(快进,快退,声音,亮度调节)
- 视屏播放快进快退的逻辑处理
- 基于ijkplayer封装支持简单界面UI定制的视频播放器
- ffmpeg+sdl教程----编写一个简单的播放器7(处理快进快退命令)
- ffmpeg+sdl教程----编写一个简单的播放器7(处理快进快退命令)
- ffmpeg+sdl教程----编写一个简单的播放器7(处理快进快退命令)
- ffmpeg+sdl教程----编写一个简单的播放器7(处理快进快退命令)
- Bootstrap之Carousel不能自动播放的解决办法,支持左右滑动手势
- ijkplayer支持分段播放设置
- 自己写的一个Gif播放类,支持任意控件上播放。自动获取时间。
- 苹果微信版语音播放支持mp3安卓微信语音播放支持的是ogg
- Android------视频播放器(包含全屏播放,快退,快进,腾讯新闻的列表播放等)
- 5.14支持手势滑动的ViewFlipper
- 关于标准android中视频播放器中的快进和快退的步长时间设置
- WPF媒体播放器(MediaElement)打开指定的视频、播放、暂停、快进、快退、截图
- 16.10.27
- 金额小数转换成中文大写金额
- 学生信息管理
- 虚函数、消息传递、this指针、构造函数、模板类3个
- 快速定位解决Android内存泄漏
- SuperPlayer 是一个基于 IjkPlayer 的控制器,支持手势操作,滑动快进,快退,支持,上滑音量亮度的变化,支持指点位置播放,播放源的切换
- java--swing--鼠标小手样式
- Linux命令之"at"
- 带参数的main函数和命令行参数
- navigation stack 中amcl 源码解读
- push本地代码到github出错
- iOS 10 开发适配系列 之 权限Crash问题
- windows远程连接不能复制问题解决
- Maven环境搭建和介绍