1. 程式人生 > >Youtube 視訊自動播放

Youtube 視訊自動播放

最近在做一專案的時候,需要播放Youtube視訊。播放方式大體有三種
1. WebView(我最終用的)
2. Youtube SDK(需要谷歌開發者賬戶)
3. VideoView
其他兩種方式大家自行研究,本篇想說的時候在使用WebView的時候遇到的不能自動播放問題。
注:Demo中使用的是kotlin

首先說一下webview的正常載入Youtube視訊的邏輯

嵌入視訊

  1. 在計算機上,找到想要嵌入的 YouTube 視訊。
  2. 在視訊下方,點選分享 。
  3. 點選嵌入。
  4. 複製出現的方框中的 HTML 程式碼。
  5. 將該程式碼貼上到您的部落格或網站 HTML 中
    專案中程式碼:
val videohtml = "<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/HxHRbxhNZyU?list=PLbuqoK5oI0xKH4exZzZDMOCqpFRi2Ar6E?loop=2&autoplay=1\" frameborder=\"0\" allowfullscreen></iframe>"

但是最終發現始終無法完成自動播放,提示“如果沒有開始自動播放,請重啟終端裝置”。

最終解決方案

但是我最終採用了一個看似暴力的方法,模擬點選,其中故意延遲一秒防止還沒有加載出來。
實現方式如下:

        webview.setWebChromeClient(object : WebChromeClient() {
            override fun onProgressChanged(view: WebView, newProgress: Int) {
                Log.d(TAG, "progress:" + newProgress)
                if (newProgress == 100) {
                    var downTime = SystemClock.uptimeMillis()
                    downTime += 1000
val downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, view.x + view.width / 2, view.y + view.height / 2, 0) val upEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_UP, view.x + view.width / 2, view.y + view.height / 2, 0) view.onTouchEvent(downEvent) view.onTouchEvent(upEvent) downEvent.recycle() upEvent.recycle() } super.onProgressChanged(view, newProgress) } })