Android多功能视频播放器GSYVideoPlayer开发流程_第1页
Android多功能视频播放器GSYVideoPlayer开发流程_第2页
Android多功能视频播放器GSYVideoPlayer开发流程_第3页
Android多功能视频播放器GSYVideoPlayer开发流程_第4页
Android多功能视频播放器GSYVideoPlayer开发流程_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Android多功能视频播放器GSYVideoPlayer开发流程目录前言引入依赖开发设置具体实现

前言

今天,和大家分享一个开源的多功能视频播放器GSYVideoPlayer,支持弹幕,滤镜、水印、gif截图,片头广告,声音、亮度调节等众多功能,这里就利用它来实现一个标准的视频播放器,那么,话不多说,Go~

GSYVideoPlayer一个基于IJkPlayer的播放器

支持调节声音亮度

边播边缓存使用了AndroidVideoCache;ExoPlayer使用SimpleCache

支持多种协议h263\4\5、Https、concat、rtsp、hls、rtmp、crypto、mpeg等等

简单滤镜(马赛克、黑白、色彩过滤、高斯、模糊、模糊等等20多种)、动画、(水印、画面多重播放等)

视频第一帧、视频帧截图功能,视频生成gif功能。

调整显示比例:默认、16:9、4:3、填充;播放时旋转画面角度(0,90,180,270);镜像旋转

IJKPlayer、EXOPlayer、MediaPlayer切换、自定义内核

小窗口、多窗体下(包括桌面)的小窗口播放。

片头广告、跳过广告支持、中间插入广告功能。

暂停前后台切换不黑屏;调整不同清晰度的支持;无缝切换支持;锁定/解锁全屏点击功能;进度条小窗口预览

可自定义渲染层、自定义管理层、自定义播放层(控制层)、自定义缓存层

引入依赖

maven{urlhttps://jitpack.io}

maven{url/repository/public}

//完整版引入

implementationcom.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer:v8.3.3-release-jitpack

//是否需要AliPlayer模式

implementationcom.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-aliplay:v8.3.3-release-jitpack

开发设置

设置Activity的configChanges和screenOrientation

activity

android:name=".MainActivity"

android:exported="true"

android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"

android:screenOrientation="fullSensor"

intent-filter

actionandroid:name="ent.action.MAIN"/

categoryandroid:name="ent.category.LAUNCHER"/

/intent-filter

/activity

xmlversion="1.0"encoding="utf-8"

LinearLayoutxmlns:android="/apk/res/android"

xmlns:app="/apk/res-auto"

xmlns:tools="/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity"

com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer

android:id="@+id/videoPlayer"

android:layout_width="match_parent"

android:layout_height="match_parent"/

/LinearLayout

设置要播放的视频链接

videoPlayer=findViewById(R.id.videoPlayer)

videoPlayer.setUp(videoUrl,true,"title")

如果你想添加视频封面的话,可以这样设置

valcoverImg=ImageView(this)

coverImg.setImageResource(R.drawable.cover)

videoPlayer.thumbImageView=coverImg

具体实现

隐藏自带的标题和返回键

videoPlayer.titleTextView.visibility=View.GONE

videoPlayer.backButton.visibility=View.GONE

设置旋转,横屏显示

orientationUtils=OrientationUtils(this,videoPlayer)

videoPlayer.fullscreenButton.setOnClickListener{

orientationUtils.resolveByClick()

开始播放

videoPlayer.startPlayLogic()

除此之外,还需处理一下生命周期

overridefunonPause(){

super.onPause()

videoPlayer.onVideoPause()

overridefunonResume(){

super.onResume()

videoPlayer.onVideoResume()

overridefunonDestroy(){

super.onDestroy()

GSYVideoManager.releaseAllVideos()

orientationUtils.releaseListener()

}

在横屏时,如果想点击返回键回到竖屏而不是退出的话,需要重写onBackPressed

overridefunonBackPressed(){

if(orientationUtils.screenType==ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){

videoPlayer.fullscreenButton.performClick()

return

videoPlayer.setVideoAllCallBack(null)

super.onBackPressed()

}

如果,视频是以列表的形式展现的话,也是OK的,首先搞个RecyclerView

xmlversion="1.0"encoding="utf-8"

androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="/apk/res/android"

xmlns:tools="/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".VideoListActivity"

androidx.recyclerview.widget.RecyclerView

android:id="@+id/video_recyclerView"

android:layout_width="match_parent"

android:layout_height="match_parent"/

/androidx.constraintlayout.widget.ConstraintLayout

编写item布局

xmlversion="1.0"encoding="utf-8"

LinearLayoutxmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:paddingBottom="30dp"

com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer

android:id="@+id/item_player"

android:layout_width="match_parent"

android:layout_height="300dp"/

/LinearLayout

RecyclerView适配器

classVideoAdapter(privatevalurlList:ListString,privatevalcontext:Context):

RecyclerView.AdapterVideoAdapter.ViewHolder(){

innerclassViewHolder(view:View):RecyclerView.ViewHolder(view){

valitemPlayer:StandardGSYVideoPlayer=view.findViewById(R.id.item_player)

overridefunonCreateViewHolder(parent:ViewGroup,viewType:Int):ViewHolder{

valview=LayoutInflater.from(context).inflate(R.layout.item_video,parent,false)

returnViewHolder(view)

overridefunonBindViewHolder(holder:ViewHolder,position:Int){

//配置StandardGSYVideoPlayer

with(holder.itemPlayer){

setUpLazy(urlList[position],true,null,null,"title")

//隐藏标题和返回键

titleTextView.visibility=View.GONE

backButton.visibility=View.GONE

//全屏按键

fullscreenButton.setOnClickListener{

holder.itemPlayer.startWindowFullscreen(context,false,true)

//防止错位设置

playPosition=position

//是否根据视频尺寸,自动选择横竖屏全屏

isAutoFullWithSize=true

//音频焦点冲突时是否释放

isReleaseWhenLossAudio=false

//全屏动画

isShowFullAnimation=true

//不能触摸滑动

setIsTouchWiget(false)

overridefungetItemCount()=urlList.size

Activity

valvideoRecyclerView=findViewByIdRecyclerView(R.id.video_recyclerView)

vallayoutManager=LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)

videoRecyclerView.layoutManager=layoutManager

//GlobalUrl.urlList为视频链接集合

valvideoAdapter=VideoAdapter(GlobalUrl.urlList,this)

videoRecyclerView.adapter=videoAdapter

videoRecyclerView.addOnScrollListener(object:RecyclerView.OnScrollListener(){

overridefunonScrolled(recyclerView:RecyclerView,dx:Int,dy:Int){

super.onScrolled(recyclerView,dx,dy)

//可见区域的第一个item

valfirstPosition=layoutManager.findFirstVisibleItemPosition()

//可见区域的最后一个item

vallastPosition=layoutManager.findLastVisibleItemPosition()

//播放的位置

valplayPosition=GSYVideoManager.instance().playPosition

if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论