在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:QSVideoPlayer开源软件地址:https://gitee.com/sakaue/QSVideoPayer开源软件介绍:
Preview使用说明Gradle 自动集成allprojects { repositories { maven { url "https://jitpack.io" } }}dependencies { implementation 'com.gitee.sakaue:QSVideoPayer:2.2.9' //是否需要其他架构的ijk解码器支持,默认只有v7 //so不存在报错可以配置ndk{abiFilters 'armeabi-v7a'}或导入下面的包 //implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8' //implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8' //implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8' //implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'} 手动集成下载项目 添加qsvideoplayer文件夹为自己的项目依赖即可可根据需求自行选择需要的解码器: QSVideoView API接口 void setUp(String url, Object... objects);//设置视频地址 void play();//播放/初始化(完成自动播放) void prePlay();//初始化(完成不会播放) void pause();//暂停 void seekTo(int duration);//进度调节 void setPlayListener(PlayListener playListener);//播放监听 参数含义参照IVideoPlayer void addPlayListener(PlayListener playListener);//多播放监听 void removePlayListener(PlayListener playListener);//移除播放监听 void setAspectRatio(int aspectRatio);//设置视频比例 参数见IRenderView void setDecodeMedia(Class<? extends BaseMedia> claxx);//设置解码模块 void openCache();//打开缓存 boolean onBackPressed();//返回键退出全屏 boolean isPlaying();//是否播放中 void enterWindowFullscreen();//全屏 void quitWindowFullscreen();//退出全屏 boolean enterWindowFloat(FloatParams floatParams);//浮窗 false没权限 void quitWindowFloat();//退出浮窗 boolean setMute(boolean isMute);//是否静音 false不支持 boolean setSpeed(float rate);//设置播放倍速,false不支持 void release();//销毁 Bitmap getCurrentFrame();//截图 int getPosition();//获取播放进度 int getDuration();//获取视频时长 int getVideoWidth();//获取视频宽 int getVideoHeight();//获取视频长 int getCurrentMode();//获得播放器当前的模式(全屏,普通,浮窗) int getCurrentState();//获得播放器当前的状态(播放,暂停,完成...) Demo使用JAVA //DemoQSVideoView的ui用的jc播放器 DemoQSVideoView qsVideoView = (DemoQSVideoView) findViewById(R.id.xxx); qsVideoView.setUp(url, "这是一一一一一一一一一个标题"); //设置多个清晰度和ijk配置 //List<IjkMedia.Option> list = new ArrayList<>(); //list.add(new IjkMedia.Option(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)); //demoVideoView.setUp( // QSVideo.Build(url).title("这是标清标题").definition("标清").resolution("标清 720P").build(), // QSVideo.Build(url).title("这是高清标题").definition("高清").resolution("高清 1080P").option(list).build()); qsVideoView.getCoverImageView().setImageResource(R.mipmap.cover);//封面 //设置监听 qsVideoView.setPlayListener(new PlayListener() { @Override public void onStatus(int status) {//播放器的ui状态 if (status == IVideoPlayer.STATE_AUTO_COMPLETE) qsVideoView.quitWindowFullscreen();//播放完成退出全屏 } @Override//全屏/普通/浮窗... public void onMode(int mode) { } @Override//播放事件 初始化完成/缓冲/出错/点击事件... public void onEvent(int what, Integer... extra) { } }); //进入全屏的模式 0横屏 1竖屏 2传感器自动横竖屏 3根据视频比例自动确定横竖屏 -1什么都不做 qsVideoView.enterFullMode=3; qsVideoView.play(); 返回键退出全屏 @Override public void onBackPressed() { if (qsVideoView.onBackPressed()) return; super.onBackPressed(); } XML <org.song.videoplayer.DemoQSVideoView android:id="@+id/xxx" android:layout_width="match_parent" android:layout_height="400dp" /> AndroidManifest <activity android:name=".VideoActivity" android:configChanges="orientation|keyboardHidden|screenSize"> </activity> 悬浮窗 FloatParams floatParams = new FloatParams(); floatParams.x = 0;//浮窗中心坐标x floatParams.y = 0;//浮窗中心坐标y floatParams.w = 540;//宽 floatParams.h = 270;//高 floatParams.round = 30;//浮窗圆角 需SDK_INT >= 21 floatParams.fade = 0.8f;//透明度 需SDK_INT >= 11 floatParams.canMove = true;//是否可以拖动 floatParams.canCross = false;//是否可以越屏幕边界 floatParams.systemFloat = true;TRUE系统浮窗需要权限 FALSE界面内浮窗 if (!qsVideoView.enterWindowFloat(floatParams)) { Toast.makeText(this,"没有浮窗权限",Toast.LENGTH_LONG).show(); Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent, 0); } } 生命周期控制实现后台暂停播放,超过15秒销毁,回来还原播放状态,体验好 private boolean playFlag;//记录退出时播放状态 回来的时候继续播放 private int position;//记录销毁时的进度 回来继续该进度播放 private Handler handler = new Handler(); @Override public void onResume() { super.onResume(); if (playFlag) demoVideoView.play(); handler.removeCallbacks(runnable); if (position > 0) { demoVideoView.seekTo(position); position = 0; } } @Override public void onPause() { super.onPause(); if (demoVideoView.isSystemFloatMode()) return; //暂停 playFlag = demoVideoView.isPlaying(); demoVideoView.pause(); } @Override public void onStop() { super.onStop(); if (demoVideoView.isSystemFloatMode()) return; //进入后台不马上销毁,延时15秒 handler.postDelayed(runnable, 1000 * 15); } @Override public void onDestroy() { super.onDestroy();//销毁 if (demoVideoView.isSystemFloatMode()) demoVideoView.quitWindowFloat(); demoVideoView.release(); handler.removeCallbacks(runnable); } private Runnable runnable = new Runnable() { @Override public void run() { if (demoVideoView.getCurrentState() != IVideoPlayer.STATE_AUTO_COMPLETE) position = demoVideoView.getPosition(); demoVideoView.release(); } }; DIY播放器:0.read source code. <!--ImageView播放按钮1 2--> <item name="help_start" type="id" /> <item name="help_start2" type="id" /> <!--TextView播放时间 视频时长--> <item name="help_total" type="id" /> <item name="help_current" type="id" /> <!--ProgressBar进度条 SeekBar拖动条--> <item name="help_progress" type="id" /> <item name="help_seekbar" type="id" /> <!--ImageView全屏按钮 View返回按钮--> <item name="help_fullscreen" type="id" /> <item name="help_back" type="id" /> //如播放按钮定义,注意: @id 没有加号,这样定义父类会自动完成该按钮逻辑 <ImageView android:id="@id/help_start" android:layout_width="60dp" android:layout_height="60dp" android:layout_centerInParent="true"/> (2) java代码里设置各个状态的ui即可完成自己的播放器,具体参考DemoQSVideoView 3.直接使用QSVideoView,自己写控制ui和逻辑 (继承关系:DemoQSVideoView → QSVideoViewHelp → QSVideoView) Logv2.2.9(2021-09-12)
v2.2.8(2019-04-12)
v2.2.7(2019-01-05)
v2.2.5(2018-10-24)
v2.2.4(2018-9-1)
v2.2.3(2018-5-12)
v2.2.2(2018-2-13)
v2.2.1(2018-1-30)
v2.2.0(2018-1-28)
v2.1.1(2018-1-8)
Other
|
请发表评论