EXOPlayer 直播 - 實施和有用的技巧

已發表: 2018-06-08

借助實時流媒體播放音樂和視頻是 Android 設備的一項重要活動。 YouTube 是最強大的視頻內容共享平台之一。 因此,您可以購買 YouTube 頻道的訂閱者以與更多人聯繫。 因此,用戶有很多可能性可以做到這一點,其中大多數是開源的。 由於它們的範圍很大,有時很難選擇最好的。 然而,存在某種方式可以為您的項目提供最好的設施。 在本文中,我們將分享我們對選擇何種播放器服務及其原因的看法。 讓我們向您介紹無限流媒體可能性的世界,其中原生 MediaPlayer 仍然是最受歡迎的播放器之一。 不過,也出現了一位新的外地球員。 ExoPlayer 帶有 EXOPlayer 直播功能,功能範圍更廣,隨時準備成為您的下一個最愛。

EXOPlayer直播主圖

簡短概述

早在 2014 年,為帶有自定義控件操作和“exo 實時流”的視頻播放器實現 Google ExoPlayer 庫是一個絕妙的主意。 內置的原生 MediaPlayer 在不同設備上的穩定可靠行為等重要問題上證明了其不一致。 它的反复無常、繁重的代碼和不妥協的性能策略使其在專家中臭名昭著。 相反,新發布的 ExoPlayer 建立在 Android 的低級媒體 API 的基礎上,確保了最佳的音樂和視頻流的可能性。

其發布的首要原因當然是 HTTP Live Streaming (HLS) 的實現——一種由 Apple 開發的媒體廣播協議。 其中,視頻內容由實時加載並具有自適應比特傳輸率的片段組成。 這就是 ExoPlayer 實時流媒體如何成為原生 MediaPlayer API 的完全可定制的替代方案,為跨所有設備流式傳輸視頻和音頻提供方便的 API。 現在,它被包括 BBC 在內的數以千計的應用程序所使用。

替代品(以及為什麼不應該選擇它們)

當然,ExoPlayer 有許多相當成功的競爭對手。 它們包括以下知名服務:

  • 維密歐

vimeo exo 流媒體圖像

  • 維生素;

vitamio exoplayer hls 圖像

  • LibVLC。

但是,現在可以肯定地說,ExoPlayer 比它們中的任何一個都要好得多。 儘管訂閱者數量驚人,但 Vimeo 缺乏靈活性,因為內容僅存儲在其服務器上,並提供 iframe 鏈接以在 WebView 中播放。 這會顯著降低應用程序的性能。 Vitamio 基於流行的 FFmpeg 庫並擁有許多有用的功能,因此廣受歡迎。 然而,它是一項非免費服務,所以沒有多少人準備好使用它。 LibVLC 的功能相當有限,因為它只處理支持 NDK 的項目。 這就是為什麼 ExoPlayer 是當今此類服務中最受歡迎的原因。

什麼是積極的?

與任何服務一樣,ExoPlayer 有其優點和缺點。 它的主要優點包括:

  • 實現 exoplayer HLS 及其所有高級功能,例如錯誤處理等;
  • 輕鬆上手;
  • Java基礎,使調試成功成為可能;
  • 多種格式;
  • 完全支持 Android 4.4 及更高版本的 Widevine 通用加密。
  • 完全可定制的控制組件;
  • 在流中播放音頻和視頻的可能性;
  • 字幕支持;
  • Google Cast SDK 支持,使其能夠與電視或音響系統配合使用;
  • 媒體源使用。

後者不僅允許配置 exoplayer HLS 流,還允許配置 DASH (DashMediaSource) 和 SmoothStreaming (SsMediaSource)。 它還支持 EXOPlayer 實時流媒體組件,如旁加載字幕,以及視頻序列的回放。 它擁有的另一個令人興奮的功能是新發布的 PlayerNotificationManager,它使用戶能夠獲得播放通知以控制您的視頻或音頻外流。 使用它們,您可以順暢地前進、後退、轉向下一曲目等。要為 HLS 視頻流創建 MediaSource,您需要執行以下簡單操作:


有趣的getHlsMediaSource(hls: String): MediaSource {
valbandwidthMeter = DefaultBandwidthMeter()
val applicationName = Util.getUserAgent(context, APPLICATION_NAME)
val dataSourceFactory = DefaultDataSourceFactory(context, applicationName,bandwidthMeter)
val factory = HlsMediaSource.Factory(dataSourceFactory)
返回 factory.createMediaSource(Uri.parse(hls))
}


此外,EXOPlayer 實時流媒體庫還有一系列其他出色的功能,例如 MergingMediaSource、ConcatenatingMediaSource、TrackSelector 和 LoopingMediaSource。 它們都保證了複雜的 Exo 流媒體系統的完美性能。 默認情況下,ExoPlayer 具有一系列這些組件用於基本功能。 然而,它也可以利用大量的定制實現來實現非標準性能。

總而言之,exo live stream 處理所有重要任務,例如流式傳輸視頻並識別與內容源相關的錯誤,將支持大量現代格式的視頻或音頻播放器添加到您的移動或電視應用程序中。時間短等

什麼是負數?

當然,沒有什麼是完美的。 EXOPlayer 直播,儘管它具有現代性和許多令人興奮的功能,但也不例外。 其主要缺點如下:

  • 設計限制;
  • 缺乏對早於 16 個 Android 版本的支持;
  • 在屏幕鎖定的情況下,玩家無法進行娛樂;
  • 沒有倒退到最後查看的位置。

後一個挑戰的工作解決方案如下所示:


覆蓋樂趣onPause() {

超級.onPause()

釋放播放器()

}


私人樂趣releasePlayer() {

如果simpleExoPlayer != null ){

resumePosition = Math.max(0, simpleExoPlayer !!. contentPosition )

shouldAutoPlay = simpleExoPlayer !!。 準備好時播放

simpleExoPlayer !!.release()

simpleExoPlayer = null

}

}


覆蓋樂趣onResume() {

超級.onResume()

初始化播放器()

}


私人樂趣initPlayer() {

simpleExoPlayer = streamConfigurator .createExoPlayer()

簡單的ExoPlayerView。 使用控制器=

簡單的ExoPlayerView。 播放器= simpleExoPlayer

simpleExoPlayer ?.seekTo( resumePosition )

}


但是,這些問題可能是由於 Android 架構的特殊性和超線程造成的,Android 開發人員可能會遇到一些困難。 除此之外,ExoPlayer 直播是一個不錯的選擇。

EXOPlayer直播算法

專家聲稱 ExoPlayer 非常方便且易於使用,我們完全同意這種想法。 要開始使用它,您只需執行幾個簡單的步驟。 他們包括:

  • 以依賴形式將 ExoPlayer 添加到您的項目中。 將其添加到 app 模塊的文件中將確保其適用於完整的 ExoPlayer 實時流媒體庫;
  • 創建一個 SimpleExoPlayer 實例(為此使用 ExoPlayerFactory);
  • 將播放器附加到視圖以進行視頻輸出和簡單的用戶輸入;
  • 準備播放器的 MediaSource 播放。
  • 播放器的發布(帶有特殊代碼)。

結論

ExoPlayer 直播是一種開源現成的解決方案,可以解決其他庫的許多問題。 正如您所看到的,它的優點和積極特徵的列表比消極特徵的列舉要長得多。 可能由於這個原因,它被用於絕大多數 Android 應用程序,並得到 Google 的全面支持。 與其主要替代方案相比,它更加靈活和簡單。 我們的團隊建議您開始使用它,因為它令人興奮的功能會讓您大吃一驚。