最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android多功能視頻播放器GSYVideoPlayer開發(fā)流程

 更新時(shí)間:2022年11月01日 08:33:09   作者:幸大叔  
怎么在Android中實(shí)現(xiàn)GSYVideoPlayer視頻播放器?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲

前言

今天,和大家分享一個(gè)開源的多功能視頻播放器 — GSYVideoPlayer,支持彈幕,濾鏡、水印、gif截圖,片頭廣告,聲音、亮度調(diào)節(jié)等眾多功能,這里就利用它來(lái)實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的視頻播放器,那么,話不多說(shuō),Go ~

GSYVideoPlayer 一個(gè)基于IJkPlayer的播放器
支持調(diào)節(jié)聲音亮度
邊播邊緩存 使用了AndroidVideoCache;ExoPlayer使用SimpleCache
支持多種協(xié)議h263\4\5、Https、concat、rtsp、hls、rtmp、crypto、mpeg等等
簡(jiǎn)單濾鏡(馬賽克、黑白、色彩過(guò)濾、高斯、模糊、模糊等等20多種)、動(dòng)畫、(水印、畫面多重播放等)
視頻第一幀、視頻幀截圖功能,視頻生成gif功能。
調(diào)整顯示比例:默認(rèn)、16:9、4:3、填充;播放時(shí)旋轉(zhuǎn)畫面角度(0,90,180,270);鏡像旋轉(zhuǎn)
IJKPlayer、EXOPlayer、MediaPlayer切換、自定義內(nèi)核
小窗口、多窗體下(包括桌面)的小窗口播放。
片頭廣告、跳過(guò)廣告支持、中間插入廣告功能。
暫停前后臺(tái)切換不黑屏;調(diào)整不同清晰度的支持;無(wú)縫切換支持;鎖定/解鎖全屏點(diǎn)擊功能;進(jìn)度條小窗口預(yù)覽
可自定義渲染層、自定義管理層、自定義播放層(控制層)、自定義緩存層

引入依賴

        maven { url 'https://jitpack.io' }
        maven { url "https://maven.aliyun.com/repository/public" }

    //完整版引入
    implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer:v8.3.3-release-jitpack'
    //是否需要AliPlayer模式
    implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-aliplay:v8.3.3-release-jitpack'

開發(fā)設(shè)置

設(shè)置 Activity 的 configChanges 和 screenOrientation

        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
            android:screenOrientation="fullSensor" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/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>

設(shè)置要播放的視頻鏈接

        videoPlayer = findViewById(R.id.videoPlayer)
        videoPlayer.setUp(videoUrl, true, "title")

如果你想添加視頻封面的話,可以這樣設(shè)置

        val coverImg = ImageView(this)
        coverImg.setImageResource(R.drawable.cover)
        videoPlayer.thumbImageView = coverImg

具體實(shí)現(xiàn)

隱藏自帶的標(biāo)題和返回鍵

        videoPlayer.titleTextView.visibility = View.GONE
        videoPlayer.backButton.visibility = View.GONE

設(shè)置旋轉(zhuǎn),橫屏顯示

        orientationUtils = OrientationUtils(this, videoPlayer)
        videoPlayer.fullscreenButton.setOnClickListener {
            orientationUtils.resolveByClick()
        }

開始播放

videoPlayer.startPlayLogic()

除此之外,還需處理一下生命周期

    override fun onPause() {
        super.onPause()
        videoPlayer.onVideoPause()
    }
    override fun onResume() {
        super.onResume()
        videoPlayer.onVideoResume()
    }
    override fun onDestroy() {
        super.onDestroy()
        GSYVideoManager.releaseAllVideos()
        orientationUtils.releaseListener()
    }

在橫屏?xí)r,如果想點(diǎn)擊返回鍵回到豎屏而不是退出的話,需要重寫 onBackPressed

    override fun onBackPressed() {
        if (orientationUtils.screenType == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
            videoPlayer.fullscreenButton.performClick()
            return
        }
        videoPlayer.setVideoAllCallBack(null)
        super.onBackPressed()
    }

如果,視頻是以列表的形式展現(xiàn)的話,也是OK的,首先搞個(gè)RecyclerView

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/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布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/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適配器

class VideoAdapter(private val urlList: List<String>, private val context: Context) :
    RecyclerView.Adapter<VideoAdapter.ViewHolder>() {
    inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val itemPlayer: StandardGSYVideoPlayer = view.findViewById(R.id.item_player)
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(context).inflate(R.layout.item_video, parent, false)
        return ViewHolder(view)
    }
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        //配置StandardGSYVideoPlayer
        with(holder.itemPlayer) {
            setUpLazy(urlList[position], true, null, null, "title")
            //隱藏標(biāo)題和返回鍵
            titleTextView.visibility = View.GONE
            backButton.visibility = View.GONE
            //全屏按鍵
            fullscreenButton.setOnClickListener {
                holder.itemPlayer.startWindowFullscreen(context, false, true)
            }
            //防止錯(cuò)位設(shè)置
            playPosition = position
            //是否根據(jù)視頻尺寸,自動(dòng)選擇橫豎屏全屏
            isAutoFullWithSize = true
            //音頻焦點(diǎn)沖突時(shí)是否釋放
            isReleaseWhenLossAudio = false
            //全屏動(dòng)畫
            isShowFullAnimation = true
            //不能觸摸滑動(dòng)
            setIsTouchWiget(false)
        }
    }
    override fun getItemCount() = urlList.size
}

Activity

        val videoRecyclerView = findViewById<RecyclerView>(R.id.video_recyclerView)
        val layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
        videoRecyclerView.layoutManager = layoutManager
        //GlobalUrl.urlList為視頻鏈接集合
        val videoAdapter = VideoAdapter(GlobalUrl.urlList, this)
        videoRecyclerView.adapter = videoAdapter
        videoRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                //可見區(qū)域的第一個(gè)item
                val firstPosition = layoutManager.findFirstVisibleItemPosition()
                //可見區(qū)域的最后一個(gè)item
                val lastPosition = layoutManager.findLastVisibleItemPosition()
                //播放的位置
                val playPosition = GSYVideoManager.instance().playPosition
                if (playPosition >= 0) { //說(shuō)明有播放
                    if (playPosition < firstPosition || playPosition > lastPosition) {
                        if (GSYVideoManager.isFullState(this@VideoListActivity)) {
                            return
                        }
                        GSYVideoManager.releaseAllVideos()
                        videoAdapter.notifyDataSetChanged()
                    }
                }
            }
        })

別忘了對(duì)返回鍵和生命周期的處理哦

    override fun onBackPressed() {
        super.onBackPressed()
        if (GSYVideoManager.backFromWindowFull(this)) {
            return
        }
        super.onBackPressed()
    }
    override fun onPause() {
        super.onPause()
        GSYVideoManager.onPause()
    }
    override fun onResume() {
        super.onResume()
        GSYVideoManager.onResume()
    }
    override fun onDestroy() {
        super.onDestroy()
        GSYVideoManager.releaseAllVideos()
    }

到此這篇關(guān)于Android多功能視頻播放器GSYVideoPlayer開發(fā)流程的文章就介紹到這了,更多相關(guān)Android GSYVideoPlayer內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

遵义县| 靖边县| 施甸县| 定安县| 谢通门县| 泰安市| 亳州市| 鹤庆县| 遂平县| 静乐县| 丁青县| 淄博市| 海宁市| 鹤庆县| 营口市| 庆云县| 正宁县| 苗栗市| 白朗县| 永定县| 盐池县| 永康市| 军事| 泸西县| 阳高县| 奉新县| 房产| 辉县市| 噶尔县| 赣榆县| 志丹县| 如东县| 澳门| 焦作市| 财经| 盈江县| 亚东县| 峨山| 罗田县| 溧水县| 双城市|