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 的全面支持。 与其主要替代方案相比,它更加灵活和简单。 我们的团队建议您开始使用它,因为它令人兴奋的功能会让您大吃一惊。