当前位置: 首页 > 知识库问答 >
问题:

自定义ExoPlayer MediaSource--从哪里开始?

祖浩淼
2023-03-14

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

要做到这一点,我认为我需要创建一个自定义媒体源--但是我找不到任何关于这样做的好文档或教程。关于MediaSources的ExoPlayer文档在这种情况下实际上毫无用处,只描述了如何利用ConcatenatingMediaSource、MergingMediaSource和LoopingMediaSource来自定义媒体的播放。

继续我自己的研究,我想要的可能是可以用一个自定义提取器来完成的。当我将内容传递给ExtractorMediaSource时,我收到错误com.google.android.exoplayer2.source.unrecognizedInputFormatException:没有可用的提取器(MatroskaExtractor、FragmentedMp4Extractor、Mp4Extractor、Mp3Extractor、AdtsExtractor、Ac3Extractor、TsExtractor、FlvExtractor、OggExtractor、PsExtractor、WavExtractor、AmrExtractor)可以读取流。。这让我想知道,让提取器解析XML、提取内容并将数据传回是否更好。我还不确定这两个组件之间有什么区别,也不知道哪一个更适合,而且缺乏文档。

共有1个答案

祁晟
2023-03-14

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

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

首先,exoplayer中的提取器不应用于解析XML,根据文档:

然而,我不建议这样做。在这种情况下,最好的选择是创建解析器来获取内容Url,并将其传递给底层播放器。您的内容Url将链接到MP4容器,可能是DRM内容等,但所有这些都可以由播放器很好地处理,而不会增加所有其他复杂性。

至于创建广告,这可以通过以下几种方式完成:

  • 有一个单一的播放器实例,在内容和广告之间交换。很容易,但你需要跟踪位置信息,而且当你切换时,你会有缓冲。
  • 只有一个播放器实例,但使用ConcateNatingMediaSource,为此您需要解析XML为内容和每个广告创建MediaSource,然后将这些添加到ConcateNatingMediaSource.
  • 只有一个播放器实例,但要使用exoplayer提供的adsloader。这是最好的解决方案,但遗憾的是缺乏文档。为此,您可以提供一个链接来加载广告,并提供一个单独的链接来加载内容。
  • 创建一个可以从XML中获取所需信息的解析器,例如内容链接和广告链接。
  • 创建一个播放器,该播放器为内容创建媒体源,然后为广告创建媒体源,将这些媒体源添加到连接媒体源中。

如果您想了解如何执行某些方面的操作,我建议您看看我们的开源库,它在底层使用exo-player。我们最近甚至开始使用adsloader。https://github.com/novoda/no-player

 类似资料:
  • 我找不到那个方法。

  • 问题内容: 我正在尝试开始学习如何创建套接字服务器。我想添加一些有用的功能(例如auth,也许还有其他一些功能)。也许有人可以给我指出一个很好的教程,这将帮助我入门(+也许还有其他一些想法) 问题答案: 看这里:60秒内扭曲的网。这是一组博客文章,逐步描述了如何使用Twisted做很多常见的事情,所有这些都是由Twisted的最大贡献者Jean- Paul Calderone撰写的。这确实是您应该

  • 我正在尝试用Angular和一个基本的REST后端来构建一个项目的前端部分,该后端还可以处理安全问题。 我对Spring有非常基本的了解,但还没有真正使用Spring Security。 我正试图找到一种方法来构建一个安全的简单REST后端。我在网上搜索了很多,找到的主要内容是本教程:https://spring.io/guides/tutorials/spring-security-and-an

  • 问题内容: 当我在其中放置bean定义时,出现一条错误消息,指示Tomcat 7无法启动,因为有一个。我将整个堆栈跟踪上传到了文件共享站点,您可以通过单击此链接来阅读。但是,当我注释掉bean定义并尝试重新启动服务器时,我收到另一条错误消息,指示没有的bean定义。您可以通过单击此链接在文件共享站点上阅读第二个堆栈跟踪。 那么我应该将bean定义放在哪里,其语法应该是什么? 我认为问题可能在于,我

  • 问题内容: 我应该调用哪个头文件才能将PATH_MAX用作用于调整字符串大小的int? 我希望能够声明: 但是当我这样做时,我的编译器(Linux上为Clang / LLVM)发出以下错误: 我试图做一个谷歌搜索,但仍然没有运气。 不能解决问题/错误。 我是否也正确将PATH_MAX的值设置为int? 问题答案: 它在。 如本博客所述存在一些缺陷(感谢paulsm4)

  • 我不确定在实施过程中应该采取哪种方法,需要一些指导。 我在Yii2框架(PHP)中构建了一个RESTAPI(API.mysite.com),用于访问mysite中的数据。com(数据库)。在mysite上。com我们的用户将能够创建连接的应用程序,该应用程序将提供客户端id机密-授予对其帐户的访问权限(全范围?)。 根据我的研究,下一步似乎是设置一些东西来实际提供传递给api的承载令牌-我一直倾向