exoplayer-自动改变质量不起作用(hls)

时间:2018-01-28 18:25:37

标签: android video hls exoplayer

我对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 个答案:

答案 0 :(得分:3)

这里的关键是你需要传递相同的" bandwidthMeter"您也将AdaptiveTrackSelection.Factory传递给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);