【发布时间】:2019-05-13 15:01:56
【问题描述】:
我正在使用 ExoPlayer 创建一个自定义媒体播放器(我之前已经就同一主题提出了几个问题,因为我对 Android 开发非常陌生,而且似乎我遇到了每一行我写的代码)。
作为此自定义播放器的一部分,我想下载、解析和处理我们的业务生成的 XML 文件以定义我们的内容。此 XML 文件提供了一个网络 ID 的 URL(一个 4-6 秒的视频广告内容所有者)、一个内容的 URL 以及一个用于播放前贴片广告和插播广告的广告代码 URL。
我的目标是将这个 XML 文件作为视频源传递给 prepare(),调用 setPlayWhenReady(true),然后让所有内容按预期播放(网络 ID、内容和广告)
为此,我认为我需要创建一个自定义 MediaSource —— 但是我找不到任何好的文档或教程。 The ExoPlayer documentation on 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、提取内容并将数据传回是否更好。我还不确定这两个组件之间有什么区别,或者哪个更合适,并且缺少文档。
【问题讨论】:
-
"我的目标是将此 XML 文件作为视频源传递给 prepare(),调用 setPlayWhenReady(true),然后让所有内容按预期播放(网络 ID、内容和广告)"--为什么你认为这是
View的责任?恕我直言,下载和解析 XML 应该是存储库的责任,或者最坏的情况是视图模型。 -
我们计划将我们的播放器作为库分发,供客户在他们自己的应用程序中使用。就像你现在可以实例化一个
MediaPlayer,向它扔一个视频,它就像魔术一样——我希望人们能够实例化一个BFPlayer,向它扔一个视频,它就像魔术......还有一个额外的好处,那就是它会知道如何播放我们的内容。因此这个 XML 文件的解析应该是视频播放器的责任,而不是客户端的应用程序。
标签: android exoplayer exoplayer2.x