Android EXOPlayer 音视频库(2)

电脑杂谈  发布时间:2019-12-25 04:02:34  来源:网络整理

exoplayer是什么_手机小说jar下载_exoplayer jar

一个视频可以使用LoopingMediaSource无缝地循环固定数量。 以下例子播放视频两次。

MediaSource source = new ExtractorMediaSource(videoUri, ...);
// Plays the video twice.
LoopingMediaSource loopingSource = new LoopingMediaSource(source, 2);

ConcatenatingMediaSource可连续播放两个或多个单独的MediaSources。 以下例子依次播放两个视频。 两个视频源之间是无缝的转化。 并且不要求连接的两个源具有相似的格式(例如,包含480p H264的视频文件与包括720p VP9的视频文件连接在一起播放)。内容源甚至可以是不同的类别(例如exoplayer jar,将视频与仅音频串联连接在一起)。

MediaSource firstSource = new ExtractorMediaSource(firstVideoUri, ...);
MediaSource secondSource = new ExtractorMediaSource(secondVideoUri, ...);
// Plays the first video, then the second video.
ConcatenatingMediaSource concatenatedSource =
    new ConcatenatingMediaSource(firstSource, secondSource);

DynamicConcatenatingMediaSource类似于ConcatenatingMediaSource,但是它允许在播放之前和播放之后动态添加,删除和移动MediaSources。 DynamicConcatenatingMediaSource非常合适用户播放时设置播放列表的播放列表使用状况。

** MediaSource实例不需要多次添加到DynamicConcatenatingMediaSource,或者以前未被删除的再次添加。 应该改用新的示例。**

可以进一步将复合MediaSources组合在一起,用于最不寻常的用例。 给定两个视频A和B,以下例子显示了怎样一起使用LoopingMediaSource和ConcatenatingMediaSource来播放序列(A,A,B)。

MediaSource firstSource = new ExtractorMediaSource(firstVideoUri, ...);
MediaSource secondSource = new ExtractorMediaSource(secondVideoUri, ...);
// Plays the first video twice.
LoopingMediaSource firstSourceTwice = new LoopingMediaSource(firstSource, 2);
// Plays the first video twice, then the second video.
ConcatenatingMediaSource concatenatedSource =
    new ConcatenatingMediaSource(firstSourceTwice, secondSource);

以下实例是等效的

MediaSource firstSource = new ExtractorMediaSource(firstVideoUri, ...);
MediaSource secondSource = new ExtractorMediaSource(secondVideoUri, ...);
// Plays the first video twice, then the second video.
ConcatenatingMediaSource concatenatedSource =
    new ConcatenatingMediaSource(firstSource, firstSource, secondSource);

重要的是导致在组合中多次使用相似的MediaSource实例,除非依照文档明确准许。 在里面的例子中使用firstSource两次是一个这样的状况,因为ConcatenatingMediaSource的Javadoc明确申明允许重复的条目。 然而,一般来说,组合物形成的对象的图形应当是树。 允许在组合中使用多个等效的MediaSource实例。

手机小说jar下载_exoplayer是什么_exoplayer jar

播放过程中可以ExoPlayer的player各种状况的事件,这些事件可以用来做为更新用户界面模块的触发器,比如播放控制。大多组件也可报告它们自己的低级事件,这些可以被拿来性能。

ExoPlayer可以使用addListener和removeListener方法来添加跟删除EventListener。播放状况改变的之后会通知注册的器,包括播放失败的出现事件。

开发人员需要使用来推动自定义的播放控制跟更新播放器的状况改变。一个app也需要将发生的错误展现给用户看。

使用SimpleExoPlayer时,可以在播放器上修改其它侦听器。 特别地exoplayer jar,addVideoListener允许应用程序接收与视频展现有关的事件,这些事件或许对于调整UI(例如,正在渲染至那个视频的表面的宽高比)。 侦听器也可以设定为接收调试信息,例如借助调用setVideoDebugListener和setAudioDebugListener。

除了高级别的事件外,ExoPlayer库提供的其它模块也允许自己的事件被。通常必须将Handler对象释放给那些组件,这些部件决定了读取侦听器方法的轮询。在大多数情况下,您必须在主线程处理相关事件。

ExoPlayer组件允许在播放过程中设置配置。 通过使用sendMessages或blockingSendMessages方法将消息通过ExoPlayer传递到模块来进行某些修改。 这种方式推动了线程安全性,并且可以设置播放器执行操作的排序。

ExoPlayer与Android MediaPlayer的主要特点之一是无法自定义和扩展播放器,以更好地适应开发人员的用例。 ExoPlayer库专门设计了这一点,定义了许多接口和抽象基类,使应用程序开发人员可以轻松地更换库提供的默认实现。 以下是建立自定义组件的一些用例:

在Android 4.4(API级别19)及更高版本上,ExoPlayer支持数字版权管理(DRM)保护播放。为了使用ExoPlayer播放受DRM保护的内容,您的应用程序必须在实例化播放器时注入DrmSessionManager。 ExoPlayerFactory提供允许这些工厂方法。 DrmSessionManager对象负责提供DrmSession实例,该案例为解读提供了MediaCrypto对象,并推动所需的解读密钥对所使用的底层DRM模块可用。

ExoPlayer库提供了一个名为DefaultDrmSessionManager的DrmSessionManager的默认实现,它使用MediaDrm。会话管理器支持设施上存在模块化DRM组件的任何DRM方案。所有Android设备都必须支持Widevine模块化DRM(具有L3安全性,尽管许多设施也支持L1)。某些设施或许支持其它方案,如PlayReady。所有Android TV设备都支持PlayReady。

ExoPlayer演示应用程序中的PlayerActivity演示了怎样在例子化播放器时建立跟注入DefaultDrmSessionManager。

参考连接:


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-134564-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...