YouTube開源播放器中文使用指南

2021-02-14 IT爛筆頭

在這之前筆者使用原生的MediaPlayer、B站開源的IJKVideoView等播放器。直到發現ExoPlayer,這款由YouTube開發的播放器真的是非常強大。對於自定義播放器非常友好,裡面將很多模塊抽象成獨立的組件可供使用者自行定製,當然官方也提供了一些默認的實現。如果你正在開發視頻類功能,強烈推薦你嘗試一下ExoPlayer。

預備知識

DRM:Digital Rights Management,即數字版權管理。指的是出版者用來控制被保護對象的使用權的一些技術,這些技術保護的有數位化內容(例如:軟體、音樂、電影)。

PlayReady:PlayReady是微軟推出的一種DRM解決方案,其工作原理讀者可自行查閱相關資料。

Widevine:同上,Widevine屬於谷歌的一種DRM解決方案。


優點

在不同Android版本和不同的手機設備上擁有更統一的行為表現,更少的設備差異帶來的問題。

作為一個獨立的庫,可以很輕易的升級。

可以根據用戶的需求方便的對播放器行為進行定製和擴展,ExoPlayer中的很多組件都支持自定義和擴展。

支持播放視頻列表,並且可以支持對視頻的裁剪、合併,以及循環播放設置。

支持更多的視頻格式,包括MediaPlayer不支持的DASHSmoothStreaming

支持 Widevine功能,這個功能可以下載和播放經過Google加密的視頻文件。

能夠方便的集成額外的擴展庫,比如IMA擴展庫。

缺點

ExoPlayer支持大部分流媒體格式,並且對DRM的支持也比較友好,比如下方就是官方提供的支持的設備情況:

用例Android版本號Android API LevelAudio Playback4.116Video Playback4.116DASH(no DRM)4.116DASH(Widevine CENC; 「cenc」 scheme)4.419DASH (ClearKey)5.021SmoothStreaming (no DRM)4.116SmoothStreaming (PlayReady SL2000)AndroidTVAndroidTVHLS (no DRM)4.116HLS (AES-128 encryption)4.116HLS (Widevine CENC; 「cenc」 scheme)4.419HLS (Widevine CENC; 「cbcs」 scheme)7.125  

我們只要按照下面的步驟就能簡單的將ExoPlayer使用起來了:

上面已經整體介紹了使用ExoPlayer去播放視頻的步驟。下面我們就針對每一個步驟詳細的去介紹下如何具體地落實到代碼中去。

添加ExoPlayer的依賴

首先我們要保證在項目根目錄的build.gradle中包含Google和JCenter倉庫:

repositories {
    google()
    jcenter()
}


在app module的build.gradle中添加對ExoPlayer的依賴:

implementation 'com.google.android.exoplayer:exoplayer:2.8.4'

當然2.8.4不是唯一的版本,你可以使用任意一個release版本。注意,如果你依賴比較高版本的ExoPlayer,恰好的你的項目中有依賴support包,由於高版本的ExoPlay依賴Androidx,所以會出現衝突。所以,在使用高版本ExoPlayer之前,需要將support包和Androidx之間的衝突先解決。

另外需要注意的是,在所有有依賴ExoPlayer庫的模塊中都需要打開對Java8的支持,需要在模塊的build.gradle中添加如下代碼:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

創建播放器實例

ExoPlayer提供了一個工廠類ExoPlayerFactory用來實例化不同的ExoPlayer的對象。工廠類裡面提供了很多可自定義的一些參數用來定製個性化的播放器實例。例如我們下面使用的例子就是通過newSimpleInstance方法實例化一個SimpleExoPlayer對象。

BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector = new DefaultTrackSelector(videoTackSelectionFactory);
LoadControl loadControl = new DefaultLoadControl();
mExoPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);

將播放器綁定到渲染的View

ExoPlayer庫本身給我們提供了一個將播放控制操作,字幕以及surface封裝好的PlayerView。我們可以直接在我們的布局文件中引用PlayerView。並通過下面的方式和播放器綁定:

playerView.setPlayer(mExoPlayer);

播放前的準備

對於ExoPlayer而言,所有被用來進行播放的資源都使用MediaSource進行包裝。所以當需要播放媒體資源時,你得先創建一個和資源相關的MediaSource對象,然後通過ExoPlayer.prepare方法將封裝的對象傳入。ExoPlayer提供了非常豐富的MediaSource類型,可用來播放DASH(DashMediaSource)、SmoothStreaming(SsMediaSource)、HLS(HlsMediaSource),以及用來播放多資源拼接的(ConcatenatingMediaSource)等等。示例如下:

ConcatenatingMediaSource concatenatingMediaSource = new ConcatenatingMediaSource(mediaSources);
mExoPlayer.setRepeatMode(Player.REPEAT_MODE_ALL);
mExoPlayer.prepare(concatenatingMediaSource);

控制播放

當播放準備好了以後,我們可以通過setPlayWhenReady方法控制播放,當然ExoPlayer也提供了豐富的API去控制播放的過程。我們可以參考官方的API說明:官方文檔

釋放播放器

當我們不再使用播放器的時候,將手機有限的資源進行釋放是非常的必要的。我們可以使用下面的代碼對播放器進行釋放:

mExoPlayer.release();

本文簡單介紹下EXOPlayer的基本使用。如果筆者感興趣可以去官方項目地址學習源碼。也可以閱讀官方的文檔。既然是Yutube使用的播放器,如何強大讀者自行去挖掘,也可挖掘源碼中的設計架構。

項目地址:https:
官方文檔:https:

相關焦點

  • FreeTube:注重隱私的開源桌面 YouTube 播放器 | Linux 中國
    如果你不希望 Google 追蹤你在 YouTube 上的行為,那麼有一個名為 「FreeTube」 的開源 Youtube 播放器。它能讓你無需使用帳戶觀看、搜索和下載 Youtube 視頻並訂閱你喜愛的頻道,這可以防止 Google 獲取你的信息。它為你提供完整的無廣告體驗。另一個值得注意的優勢是它有一個內置的基礎的 HTML5 播放器來觀看視頻。
  • youtube-dl - 開源跨平臺的視頻下載器
    內鍵入 C:\Program Files\Path\youtube-dl 上方配置的 存放路徑,然後點擊 確定 - 確定 進行保存。檢查 環境變量 是否 配置成功,打開 命令提示符 輸入命令 youtube-dl 按 Enter
  • 【腳本修復】:YouTube下載器,支持後臺播放,支持浮窗 (已開源)
    支持後臺播放,支持浮窗。更新內容:修復無法下載,後臺播放,小浮窗的Bug。修復小組件添加自定義圖片地址無法顯示的bug移除登錄功能,新版又不需要了桌面組件顯示效果:圖左為後臺播放    |    圖右為視頻下載下載功能如何使用:
  • [轉]Kodi 開源多媒體播放器使用
    https://kodi.tv/odi (原名 XBMC) 是一款經典開源免費、跨平臺且極其強大專業的多媒體影音播放器,包含專業的影音內容管理以及解碼播放功能於一體
  • 極客之選 - MPV 播放器配置指南
    MPV 是一個免費、簡潔,開源,跨平臺,且性能和功能兼備的播放器。
  • 優秀的 macOS 視頻播放器 IINA 發布 1.0.0 RC,支持從瀏覽器播放
    不知不覺,macOS 下非常好用的視頻、音頻播放器 IINA 已經發布了 1.0.0 RC 版本,並包含了瀏覽器擴展,可以讓用戶在瀏覽器中直接調用
  • 推薦一個吊炸天的開源項目:YouTube 開源播放器,Android開發必備
    未來我的 Android 路要怎麼走~有了這個開源項目,再也不怕去BAT和字節跳動面試考算法了轉自:公眾號 IT爛筆頭 (ID: nj_android)歡迎關注在這之前筆者使用原生的MediaPlayer、B站開源的IJKVideoView等
  • 教你如何用youtube-dl下載YouTube視頻
    此處選擇比較強大的方法,youtube-dl。該項目開源,我愛開源。這裡有更多介紹。諸位大佬一直在更新和維護。這裡介紹一點簡單的常用操作。準備工作第一步,準備梯子。不然如何訪問YouTube~ 這步由於大家都懂的原因,我也只能無可奉告,悶聲發大財了。
  • 15款你必須了解的開源視音頻播放器
    Bomi過去稱為CMPlayer,是一款方便、易於使用且功能強悍的媒體播放器,它基於MPV播放器開發,並為之增強圖形化界面,適合對原生MPV配置文件與全快捷鍵操作頭疼的用戶,支持硬體加速,同時增強字幕處理功能,可以自動記錄恢復的歷史,提供恢復播放。
  • Linux 中的十大開源視頻播放器
    ,我們列出了 Linux 中的十大開源播放器。讓我們來看看:1、XBMC – Kodi 媒體中心這是一個靈活的跨平臺播放器,核心使用 C++ 編寫,並提供 Python 腳本作為附加組件。令人印象深刻,因為:5、SMPlayer這個跨平臺的媒體播放器,只使用 C++ 的 Qt 庫編寫,它是一個強大的多功能播放器。
  • 使用 Chrome 擴展將 YouTube 播放器控制項添加到 Linux 桌面 | Linux 中國
    一個我懷念的 Unity 功能(雖然只使用了一小段時間)是在 Web 瀏覽器中訪問 YouTube 等網站時在 Ubuntu 聲音指示器中自動出現播放器控制項,因此你可以直接從頂部欄暫停或停止視頻,以及瀏覽視頻/歌曲信息和預覽。
  • 一個牛逼的開源 H5 視頻播放器
    今天給大家分享的這個開源項目,對於前端開發者來講非常非常的有用。因為它是一個 H5 的視頻播放器。字節跳動出品,必屬精品啊!尤其是我感覺在 Web 這塊,視頻播放這塊,字節跳動的技術絕對在國內首屈一指。
  • Linux 中的十大開源視頻播放器 | Linux 中國
    因此,為了幫助你挑選適合你需求的最佳播放器,我們列出了 Linux 中的十大開源播放器。讓我們來看看:1、XBMC – Kodi 媒體中心這是一個靈活的跨平臺播放器,核心使用 C++ 編寫,並提供 Python 腳本作為附加組件。
  • 開源播放器MPV簡介
    MPV 是一款基於 MPlayer 和 MPlayer2 的多平臺開源播放器,其在 Linux 上擁有廣泛的輸出設備支持,內置ffmpeg解碼器,支持絕大部分的視頻和音頻格式
  • GitHub 開源推薦 | mpv - 一個免費、開源、跨平臺的多媒體播放器
    專注分享 GitHub 上有趣、好玩的開源項目,以幫助大家提高編程技巧,找到編程樂趣。如果你對開源感興趣,想和大家分享一些優質項目,隨時歡迎投稿(微信號:iwaleon)。mpv 是一個免費、開源、跨平臺的多媒體播放器,可用於 Windows、Linux、MacOS、BSD 以及 Android 等平臺。
  • YouTube正式默認使用HTML5視頻播放器
    YouTube視頻網站現在默認使用HTML5播放器,這意味著更好的性能、 穩定性、 電池壽命和甚至是更好的安全性。
  • 本地YouTube下載器實現被Google禁止的功能
    ,才可以使用。Tampermonkey安裝和使用教程在這裡 《Tampermonkey》 油猴子!,點擊audio開頭的標籤連結即可,如果你需要將音頻轉換為mp3格式,推薦使用格式工廠 http://www.pcgeshi.com/ 進行轉換, 如果你不想下載格式工廠可以使用在線mp3轉換工具 https://online-audio-converter.com/cn/image-20201220100829793《本地YouTube下載器》 下載連結
  • 開源全景播放器VLC 360° 預覽版發布
    流行開源播放器VLC宣布發布VLC 360° 技術預覽版。
  • 【精華】十二大最著名的Android播放器開源項目
    是Bilibili發布的基於 FFplay 的輕量級 Android/iOS 視頻播放器。8.JamsMusicPlayer項目地址: https://github.com/psaravan/JamsMusicPlayer介紹:一個開源的音樂播放器代碼
  • VLC多媒體播放器使用及下載
    VLC多媒體播放器是一款多媒體播放器。VLC播放器支持數十種音頻、視頻格式的解碼,讓用戶不用再辛苦轉碼才能觀看罕見格式。