推薦一個吊炸天的開源項目:YouTube 開源播放器,Android開發必備

2021-02-14 開發者全社區

文導讀|   點擊標題閱讀

網際網路寒冬下,程式設計師如何突圍提升自己?

未來我的 Android 路要怎麼走~

有了這個開源項目,再也不怕去BAT和字節跳動面試考算法了

轉自:公眾號 IT爛筆頭 (ID: nj_android)歡迎關注

在這之前筆者使用原生的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://github.com/google/ExoPlayer
官方文檔:https://exoplayer.dev


更多學習和討論,歡迎加入我們的知識星球,這裡有1000+小夥伴,讓你的學習不寂寞~·

看完本文有收穫?請轉發分享給更多人

我們的知識星球第三期開期了,已達到1100人了,能連續做三期已很不容易了,有很多老用戶續期,目前續期率達到50%,說明了大家對我們的知識星球還是很認可的,歡迎大家加入儘早我們的知識星球,更多星球信息參見:

歡迎加入Java和Android架構社群

如何進階成為Java的Android版和架構師?

說兩件事

微信掃描或者點擊上方二維碼領取的Android \ Python的\ AI \的Java等高級進階資源

更多學習資料點擊下面的「閱讀原文 」獲取

謝謝老闆,點個好看↓

相關焦點

  • 【乾貨】不止是Android,Github超高影響力開源項目,學習開發必備教科書
    熱文導讀 | 點擊標題閱讀【乾貨】github上十二款最著名的Android播放器開源項目
  • 【乾貨】github上十二款最著名的Android播放器開源項目
    熱文導讀 | 點擊標題閱讀歡迎加入Java和Android架構社區吊炸天介紹:節操視頻播放器是一個讓開發者可以三兩行代碼就能集成到應用中的視頻播放框架,並且提供了開放的接口來滿足不同開發者的不同需求。6.Timber項目地址: https://github.com/naman14/Timber介紹:Timber是一個設計漂亮,功能完善,Material Design風格的音樂播放器。如果你曾想過開發自己的音樂app或者跟音樂相關的app,那麼這個項目可以一看。
  • 【精華】十二大最著名的Android播放器開源項目
    /android-UniversalMusicPlayerandroid-UniversalMusicPlaye1.android-UniversalMusicPlaye介紹:這是一個音樂播放的 App,是一個非常好的範例,告訴你如何編寫一個在 Android Phone、Tablet、TV、Wear、Auto ...
  • 幾個不錯的Android開源音視頻播放器
    整理了一下Github上幾個開源的音視頻播放器項目,有興趣的同學可以clone代碼去研究學習。https://github.com/googlesamples/android-UniversalMusicPlayer這是Google開源的一個音頻播放器項目,它向我們展示了如何在不同的設備上(Android phones, tablets, Android Auto, Android Wear, Android TV and Google Cast)提供一致的用戶體驗
  • YouTube開源播放器中文使用指南
    在這之前筆者使用原生的MediaPlayer、B站開源的IJKVideoView等播放器。直到發現ExoPlayer,這款由YouTube開發的播放器真的是非常強大。對於自定義播放器非常友好,裡面將很多模塊抽象成獨立的組件可供使用者自行定製,當然官方也提供了一些默認的實現。如果你正在開發視頻類功能,強烈推薦你嘗試一下ExoPlayer。
  • GitHub 開源推薦 | mpv - 一個免費、開源、跨平臺的多媒體播放器
    專注分享 GitHub 上有趣、好玩的開源項目,以幫助大家提高編程技巧,找到編程樂趣。如果你對開源感興趣,想和大家分享一些優質項目,隨時歡迎投稿(微信號:iwaleon)。mpv 是一個免費、開源、跨平臺的多媒體播放器,可用於 Windows、Linux、MacOS、BSD 以及 Android 等平臺。
  • FreeTube:注重隱私的開源桌面 YouTube 播放器 | Linux 中國
    編譯自 | https://www.ostechnix.com/freetube-an-open-source-desktop-youtube-player-for-privacy-minded-people/  作者 | Sk 譯者 | geekpi 💎 💎 共計翻譯:703 篇 貢獻時間:1644 天你已經知道我們需要 Google 帳戶才能訂閱頻道並從 YouTube
  • 吊炸天!74款APP完整源碼!
    TTAndroidClient開源IM一個適用於公司內部同事交流的開源im,該源碼是由Teamtalk團隊貢獻,同時他們開源了其他配套的源碼。 因為該項目涉及到侵權已經被git下架。v2ex-daily:v2ex網站的android客戶端v2ex是一個創意工作者交流的社區,裡面也有很多的程式設計師,v2ex-daily是為v2ex開發的android客戶端。
  • MAndroid 2019開源項目匯總---原生Android篇
    MusicLake音樂播放器awesome-gank.io庫用於收集gank.io的開源項目Cashew腰果Cashew是一個gank.io的客戶端GithubTrends是一個用來看查看 GitHub 熱門項目FastHub終極版 GitHub 客戶端monkey-androidGithub 第三方客戶端Google 官方demo名字介紹圖片android-architecture
  • Android開發必備的「80」個開源庫
    utm_source=tuicool&utm_medium=referral從零開始的 Android 新項目http://blog.zhaiyifan.cn/2016/03/14/android-new-project-from-0-p1/你需要知道的 Android 拍照適配方案https://www.jianshu.com/p/f269bcda335f
  • Android 開發不可錯過的開源項目
    代碼不多,是新手學習動畫很好的項目。/googlesamples/android-UniversalMusicPlayer Stars 8351這個開源項目展示了如何實現一個橫跨各種Android平臺的音樂播放器,包括手機,平板,汽車,手錶,電視等。
  • 一個牛逼的開源 H5 視頻播放器
    今天給大家分享的這個開源項目,對於前端開發者來講非常非常的有用。因為它是一個 H5 的視頻播放器。字節跳動出品,必屬精品啊!尤其是我感覺在 Web 這塊,視頻播放這塊,字節跳動的技術絕對在國內首屈一指。
  • GitHub上最火的74個Android開源項目
    相關閱讀:吊炸天!74款APP完整源碼!
  • 幾個不錯的Android開源項目
    項目介紹這是仿最美應用開發的基於mvp+rxjava+retrofit的項目,很值得學github地址:https://github.com/JJOGGER/BeautifulAppMusicoco 完整項目:音樂播放器項目介紹功能:
  • 【吐血推薦】Android 開源項目列表,趕緊收藏吧!
    app  rebase-android: https://github.com/drakeet/rebase-android日常 是一款由 drakeet 負責推薦和分享各種好玩新鮮的欄目應用,基於 Rebase 服務, 學習型非常強
  • 一個強大的開源HTML5視頻播放器,字節出品!
    【精選展示板】本欄專注於分享優質的開源項目、學習資源、技術文檔、開發工具,讓你快速查找精品輪子,
  • Android視頻播放最全總結:MediaPlayer+TextureView封裝一個完美實現全屏、小窗視頻播放器,附項目源碼
    20個開源庫吊炸天!如果需要根據不同的項目需求來修改播放器的功能,就只重寫NiceVideoPlayerController就可以了。NiceVideoPlayer首先,需要一個FrameLayout容器mContainer,裡面有兩層內容,第一層就是展示播放視頻內容的TextureView,第二層就是播放器控制器mController。
  • Android開發必須把握的七大開源項目
    這個開源項目展示了如何實現一個橫跨各種Android平臺的音樂播放器,包括手機,平板,汽車,手錶,電視等。Google官方推出,跨平臺開發必看項目。總結:建議學習順序從第一個開始一直到最後一個,由易到難。項目中用到的開源庫,如果不熟悉,網上搜一些文章進行學習,把開源庫的基本使用都了解了之後再去看項目,這樣就不會一頭霧水。
  • 打造一個高逼格的android開源項目 | 小白全攻略
    孤獨狂飲的博客地址:http://www.jianshu.com/u/0b682654ad9f在平時的開發過程中,我們經常會查閱很多的資料,最常參考的是 github 的開源項目。通常在項目的主頁面能看到項目的簡介和基本使用,並且時不時能看到頁面匯中有好多的彩色標籤,看起來很酷,很專業,很有逼格,能提升很多的好感度。
  • 10個完整的Android開源項目,值得大家學習借鑑
    Star:14175 Fork:2952 介紹:開源完整的聊天應用。demo:androidxy.com/zh/detail/e…2.項目:plaidGithub地址:https://github.com/nickbutcher/plaidStar:9797 Fork:2058 介紹:開源完整的資訊閱讀類app,有完整的評論、分享等功能。