首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定制ExoPlayer MediaSource --从哪里开始?

定制ExoPlayer MediaSource --从哪里开始?
EN

Stack Overflow用户
提问于 2019-05-13 15:01:56
回答 1查看 3K关注 0票数 1

我正致力于使用ExoPlayer创建一个定制的媒体播放器(我以前曾就同一主题提出过几个问题,因为我对Android开发非常陌生,而且我写的每一行代码似乎都碰壁了)。

作为这个自定义播放器的一部分,我想下载、解析和处理我们的业务生成的XML文件来定义我们的内容。这个XML文件提供了一个网络ID的URL ( 4-6秒的视频广告内容的所有者),一个内容的URL,以及一个播放预卷和中间卷广告的广告标签URL。

我的目标是将这个XML文件作为视频源传递给prepare(),调用setPlayWhenReady(true),然后按预期播放所有内容(网络ID、内容和广告)。

要做到这一点,我相信我需要创建一个定制的MediaSource --但是我找不到任何好的文档或教程。在这种情况下,关于ExoPlayer的MediaSources文档实际上是无用的,只描述了如何使用ConcatenatingMediaSource、MergingMediaSource和LoopingMediaSource来定制媒体的回放。

更新

继续我自己的研究,这是可能的,我想要的可能是通过一个定制的抽油车完成。当我将内容传递给ExtractorMediaSource时,我会收到错误com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor, AmrExtractor) could read the stream.。这让我想知道,是否最好让Extractor解析XML,提取内容,并将数据传回。我还不确定这两个组件之间的区别是什么,或者哪个更适合,并且缺乏文档。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-14 09:23:28

因此,解析这个XML文件应该是视频播放器的责任,而不是客户端应用程序的责任。

因此,您实际上是在尝试创建一个新的模式,用于为底层播放器分发视频(不管是什么,都可以处理)。这似乎是客户端的逻辑。但是,你想要一个答案,所以我试着给你一个答案。

首先,不应该使用Extractor in ExoPlayer来解析您的XML,正如文档所示:

从容器格式中提取媒体数据。

这将用于从例如MP4的视频容器中提取视频数据。

在您的场景中,您可能希望看到类似于使用DashManifestParserParsingLoadable.Parser,其职责是解析您的输入模型。然后,这个ParsingLoadable.ParserMediaSource用来获取回放所需的信息。

然而,我不建议这样做。在这个场景中,最好的选择是创建一个Parser来获取内容Url,并将其传递给底层播放器。您的content将链接到一个MP4容器,可能是DRM的内容等等,但所有这些都可以由播放器很好地处理,而无需添加所有其他复杂性。

至于创建广告,可以通过多种方式做到这一点:

  • 有一个单玩家实例,在内容和广告之间交换。很简单,但是你需要跟踪位置信息,而且当你切换的时候你会有缓冲。
  • 有一个单一的播放器实例,但是使用ConcatenatingMediaSource,为此您将解析xml,为内容和每个广告创建一个MediaSource,然后将这些添加到ConcatenatingMediaSource中。
  • 有一个单一的播放器实例,但使用AdsLoader提供的ExoPlayer。这是最好的解决方案,但令人遗憾的是缺乏文档。为此,您可以提供一个加载广告的链接和一个单独的加载内容链接。

所以。总结一下。

  • 创建一个解析器,可以从XML获取所需的信息,即内容链接和广告链接。
  • 创建一个为内容创建媒体源的播放器,然后为广告创建媒体源,然后将这些媒体源添加到连接媒体源中。

如果您想了解如何做某些事情,我建议您看看我们的开源库,它在幕后使用了Exo-Player。我们最近甚至开始使用AdsLoaderhttps://github.com/novoda/no-player

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56115056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档