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

外播放器-质量自动更改不起作用(hls)

凌意
2023-03-14

我对ExoPlayer没有什么问题。当我尝试播放hls流的视频时,几乎一切都很好。hls流包含3组不同的块列表,每个块列表用于不同的带宽。

但是hls自适应流不起作用,播放器只能与一个块列表一起工作,对于慢速的互联网连接,这个解决方案是不可用的。

 BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
 TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
 TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
 this.simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(getActivity(), trackSelector);
 this.videoPlayer.setPlayer(this.simpleExoPlayer);

 DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this.getActivity(), Util.getUserAgent(this.getActivity(), "appName"));
 MediaSource mediaSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(hlsUrl));
 this.simpleExoPlayer.prepare(mediaSource);
 this.simpleExoPlayer.setPlayWhenReady(true);

我也尝试实现MediaSourceEventListener,并且onDownstreamFormatChanged只在播放器初始化时调用一次。

谢谢你的任何建议

共有1个答案

吉泰宁
2023-03-14

这里的关键是,您需要将传入AdaptiveTrackSelection.Factory的“BandwidthMeter”也传递给dataSourceFactory。只有在这些变化之后,Exoplayer才会像预期的那样进行自适应流媒体。

String userAgent = "XYZPLAYER";
DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory(userAgent, bandwidthMeter, DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS, DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS, true);
DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this, bandwidthMeter, httpDataSourceFactory);
 类似资料:
  • 我正试图在ExoPlayer中设置视频比特率。我已经这样设置了: 但不管用。在我发现的任何地方,我都发现人们在使用HlsChunk源代码,这在ExoPlayer2.6中是私有的。有人能帮我吗?

  • 我有一个创建和播放我播放列表的文字JS对象。在HTML页面中,我有一个包含我所有曲目的列表。当我点击某些曲目时,一切正常,但当我点击一个曲目,等待曲目结束时,下一个曲目就不播放了。这是我的代码的部分: 还有一件事,当第一首歌曲结束并调用下一首歌曲的播放时,曲目没有加载(onload事件没有消息返回)。谢谢,对不起我的英语不好。A. 好的,我试着在设置上添加“FlashVersion:9”,这就解决

  • 问题内容: 我正在使用此代码,当我看到我看到自动播放不起作用时。 并且无法在移动设备上正常运行,在网站上也可以正常运行。谁能告诉我这个问题? 谢谢,感激不尽 问题答案: 现在是2020年 请注意(出于以下原因?)Chrome已更改了其自动播放政策,因此您现在必须: 用户与页面进行任何(任何)交互后的音频上下文 或“排名很高”(例如,相信Chrome浏览器默认不会根据用户和世界的行为停止播放音频)

  • 我试图让“更改订阅”使用Android的驱动器API工作,但到目前为止还没有成功。 null 有人知道这个问题的解决方案吗,或者能指出我做错了什么吗? 我编写了一些简单的testcode(见下文),它只需要连接的,下面是我测试的内容: 1. 3. 如果我通过testFileUpdate用一些新数据更新文件,我会在上得到以下结果: 和:

  • 问题内容: 我花了很多时间试图弄清楚为什么像这样嵌入视频: 一旦将页面加载到FireFox中,便会自动开始播放,但无法在基于Webkit的浏览器中自动播放。这仅在某些随机页面上发生。到目前为止,我找不到原因。我怀疑CMS编辑器创建了一些未封闭的标签或大量JS。 问题答案: 我能得到的最佳解决方案是在 …不是很漂亮,但是可以正常工作。 更新 最近,许多浏览器只能在没有声音的情况下自动播放视频,因此您

  • 问题内容: 我正在使用JPanel(更改其组件),但是我想从External JFrame进行更改。 抱歉,我使用Netbeans编写了这段代码(我知道它放了一些该问题不需要的东西),并尝试对其进行干净的编辑,因为它的实际代码更大 这是JPanel的代码,名称为“ MyPanel”。 框架!!! 当执行该操作时,JPanel( 审核INNER CALL )起作用!但是JFrame( 审核// OU