dw个人网站模板下载,网站建设有发展吗,东营网站搜索引擎优化,网站建设有哪种方式贴上原网址#xff1a;https://google.github.io/ExoPlayer/guide.html
非完全翻译#xff0c;有需要可以原网址自取#xff0c;我发现网上也蛮多这个指导的翻译#xff0c;可以去看看~
开始啦#xff01;#xff1a; ExoPlayer是一个开源的应用级媒体播放器#xff0…贴上原网址https://google.github.io/ExoPlayer/guide.html
非完全翻译有需要可以原网址自取我发现网上也蛮多这个指导的翻译可以去看看~
开始啦 ExoPlayer是一个开源的应用级媒体播放器构建在Android的低级媒体API之上。 开源项目包含ExoPlayer库和demo app ExoPlayer library – 包含项目的一些核心类库Demo app – ExoPlayer的演示 本指南介绍了ExoPlayer库及其用途介绍了使用ExoPlayer的优缺点不翻需要自查以及如何使用ExoPlayer播放DASH、SmoothStreaming和HLS自适应流还有ExoPlayer事件、消息、定制、DRM支持等。1、library概述
ExoPlayer库的核心是ExoPlayer 界面。ExoPlayer实现不是直接实现加载和呈现媒体而是将这项工作委托给创建播放器或播放准备时注入的组件。 所有ExoPlayer实现共同的组件有 MediaSource确定要播放的媒体播放器从中读取要加载的媒体MediaSource在播放开始时通过ExoPlayer.prepare注入。Renderer各种渲染器播放器被创建的时候注入TrackSelector用于选择由MediaSource提供的轨道以供每个可用渲染器使用。 当播放器创建时TrackSelector将被注入。 LoadControl用于控制MediaSource缓冲更多媒体的时间以及缓冲多少媒体。 在创建播放器时注入LoadControl。 ExoPlayer可以使用这些组件但如果需要非标准行为也可以使用自定义实现来构建。 例如可以注入自定义的LoadControl来更改播放器的缓冲策略或者可以注入自定义渲染器来使用Android本身不支持的视频编解码器。 Getting started 对于简单的用例ExoPlayer入门包括实现以下步骤 1、添加ExoPlayer作为您的项目的依赖。 2、创建一个SimpleExoPlayer实例。 3、将播放器连接到视图用于视频输出和用户输入。 4、准备使用MediaSource播放的播放器。 5、完成后释放播放器。 Add ExoPlayer as a dependency 1、确保项目根目录中的build.gradle文件中包含jcenter库repositories {jcenter()
}2、添加一个gradle编译依赖关系到应用程序模块的build.gradle文件。 compile com.google.android.exoplayer:exoplayer:r2.X.X3、以下内容将添加依赖于CoreDASH和UI库模块这可能是播放DASH内容的应用程序所必需的compile com.google.android.exoplayer:exoplayer-core:r2.X.X
compile com.google.android.exoplayer:exoplayer-dash:r2.X.X
compile com.google.android.exoplayer:exoplayer-ui:r2.X.X Creating the player 我们可以使用ExoPlayerFactory创建一个ExoPlayer实例。 该工厂提供了一系列方法来创建具有不同级别的定制的ExoPlayer实例。 对于绝大多数用例应该使用ExoPlayerFactory.newSimpleInstance方法之一。 这些方法返回SimpleExoPlayer它扩展了ExoPlayer以添加额外的高级别播放器功能。 以下代码是创建SimpleExoPlayer的示例。 // 1. Create a default TrackSelector
Handler mainHandler new Handler();
BandwidthMeter bandwidthMeter new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory new AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector new DefaultTrackSelector(videoTrackSelectionFactory);// 2. Create the player
SimpleExoPlayer player ExoPlayerFactory.newSimpleInstance(context, trackSelector); Attaching the player to a view ExoPlayer库提供了一个SimpleExoPlayerView它将一个PlaybackControlView和一个Surface放在哪个视频中。 SimpleExoPlayerView可以包含在应用程序的布局xml中。 将播放器绑定到视图 // Bind the player to the view.
simpleExoPlayerView.setPlayer(player);如果需要对播放器控件和渲染视频的Surface进行细粒度控制则可以分别使用SimpleExoPlayer的setVideoSurfaceViewsetVideoTextureViewsetVideoSurfaceHolder和setVideoSurface方法直接设置播放器的目标SurfaceViewTextureViewSurfaceHolder或Surface。 可以使用PlaybackControlView作为独立组件或实现与播放器直接交互的自己的播放控件。 setTextOutput和setId3Output可用于在播放过程中接收字幕和ID3元数据输出。 Preparing the player 在ExoPlayer中每一块媒体均由MediaSource表示。 要播放一块媒体必须先创建一个相应的MediaSource然后将此对象传递给ExoPlayer.prepare。 ExoPlayer库为DASHDashMediaSourceSmoothStreamingSsMediaSourceHLSHlsMediaSource和常规媒体文件ExtractorMediaSource提供MediaSource实现。 以下代码显示如何使用适合播放MP4文件的MediaSource准备播放器。 // Measures bandwidth during playback. Can be null if not required.
DefaultBandwidthMeter bandwidthMeter new DefaultBandwidthMeter();
// Produces DataSource instances through which media data is loaded.
DataSource.Factory dataSourceFactory new DefaultDataSourceFactory(context,Util.getUserAgent(context, yourApplicationName), bandwidthMeter);
// Produces Extractor instances for parsing the media data.
ExtractorsFactory extractorsFactory new DefaultExtractorsFactory();
// This is the MediaSource representing the media to be played.
MediaSource videoSource new ExtractorMediaSource(mp4VideoUri,dataSourceFactory, extractorsFactory, null, null);
// Prepare the player with the source.
player.prepare(videoSource);播放器准备好后可以通过播放器上的方法来控制播放。 例如setPlayWhenReady可用于启动和暂停播放并且可以使用各种seekTo方法在媒体内查找。 如果播放器被绑定到SimpleExoPlayerView或PlaybackControlView则用户与这些组件的交互将导致播放器上的相应方法被调用。 Releasing the player 重要的是在不再需要时释放播放器以释放有限的资源如视频解码器供其他应用使用。 这可以通过调用ExoPlayer.release来完成。 MediaSource 在ExoPlayer中每一块媒体均由MediaSource表示。 ExoPlayer库为DASHDashMediaSourceSmoothStreamingSsMediaSourceHLSHlsMediaSource和常规媒体文件ExtractorMediaSource提供MediaSource实现。 在ExoPlayer演示应用程序中可以在PlayerActivity中找到实例化所有四个示例。 Side-loading a subtitle file 给出一个视频文件和一个单独的字幕文件MergingMediaSource可以用于将它们合并到单个源中进行播放。 // Build the video MediaSource.
MediaSource videoSource new ExtractorMediaSource(videoUri, ...);
// Build the subtitle MediaSource.
Format subtitleFormat Format.createTextSampleFormat(id, // An identifier for the track. May be null.MimeTypes.APPLICATION_SUBRIP, // The mime type. Must be set correctly.selectionFlags, // Selection flags for the track.language); // The subtitle language. May be null.
MediaSource subtitleSource new SingleSampleMediaSource(subtitleUri, dataSourceFactory, subtitleFormat, C.TIME_UNSET);
// Plays the video with the sideloaded subtitle.
MergingMediaSource mergedSource new MergingMediaSource(videoSource, subtitleSource); Seamlessly looping a video a fixed number of times 要无限循环通常最好使用ExoPlayer.setRepeatMode而不是LoopingMediaSource。 使用LoopingMediaSource可以使视频无缝地固定多次。 以下示例播放视频两次。 MediaSource source new ExtractorMediaSource(videoUri, ...);
// Plays the video twice.
LoopingMediaSource loopingSource new LoopingMediaSource(source, 2); Seamlessly playing a sequence of videos ConcatenatingMediaSource可以连续播放两个或多个单独的MediaSource。 以下示例依次播放两个视频。 源之间的转换是无缝的。 没有要求连接的源具有相同的格式例如将包含480p H264的视频文件与包含720p VP9的视频文件连接在一起是很好的。 源甚至可能是不同的类型例如将视频与仅音频流连接是很好的。 MediaSource firstSource new ExtractorMediaSource(firstVideoUri, ...);
MediaSource secondSource new ExtractorMediaSource(secondVideoUri, ...);
// Plays the first video, then the second video.
ConcatenatingMediaSource concatenatedSource new ConcatenatingMediaSource(firstSource, secondSource); Advanced composition 略应避免在组合中多次使用相同的MediaSource实例除非根据文档明确允许。 然而一般来说组合物形成的对象的图形应该是一棵树。 但是允许在组合中使用多个等效的MediaSource实例。 Player events 略 Sending messages to components 一些ExoPlayer组件允许在播放过程中更改配置。 按照惯例我们可以通过使用sendMessages或blockingSendMessages方法将消息通过ExoPlayer传递到组件来进行这些更改。 这种方法确保了线程安全性并且配置更改按照播放器上执行的任何其他操作顺序执行。 Customization 以下是构建自定义组件的一些用例 1 渲染器自定义渲染器来处理由库提供的默认实现不支持的媒体类型2 TrackSelector 实现自定义TrackSelector允许应用程序开发人员更改MediaSource所公开的轨道被选中以供每个可用渲染器使用的方式。3 LoadControl 实现自定义LoadControl允许应用程序开发人员更改播放器的缓冲策略。4 Extractor 如果需要支持库当前不支持的容器格式请考虑实现自定义Extractor类然后可以将其与ExtractorMediaSource一起使用以播放该类型的媒体。5 MediaSource 如果希望获取媒体样本以自定义方式提供给渲染器或者您希望实现自定义MediaSource合成行为则实现自定义MediaSource类可能适用。 6 DataSource ExoPlayer的上游包已经包含了不同用例的一些DataSource实现。若希望实现自己的DataSource类以其他方式加载数据例如通过自定义协议使用自定义HTTP堆栈或从自定义持久缓存加载数据。Customization guidelines