Exoplayer的渲染器的解码器不符合所选轨道的格式



我正在测试一个HLS源,它有四种格式:720p、360p、180p和仅音频。

我目前对Exoplayer的实现如下:

DefaultBandwidthMeter bandwidthMeter;
//In onViewCreated()
bandwidthMeter = new DefaultBandwidthMeter.Builder()
.setInitialBitrateEstimate(2000000)
.setEventListener(getHandler(), (elapsedMs, bytes, bitrate) -> {
try {
Trace.i("GameSourceSpecs : " + elapsedMs + " " + bytes + " " + bitrate);
} catch (Exception e) {
Trace.w(e);
}
})
.build();
private MediaSource buildHLSMediaSource(Uri uri) {
DefaultDataSourceFactory dsf = new DefaultDataSourceFactory(getActivity(), "ua", bandwidthMeter);
DefaultHlsDataSourceFactory dsfHls = new DefaultHlsDataSourceFactory(dsf);
return new HlsMediaSource.Factory(dsfHls).createMediaSource(uri);
}
TrackSelection.Factory adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
trackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory);
((DefaultTrackSelector) trackSelector).setParameters(new DefaultTrackSelector.ParametersBuilder().build());
mMediaSource360 = buildHLSMediaSource(Uri.parse("http://35.187.250.251:8880/live/playlist.m3u8"));
mMediaSource360.addEventListener(getHandler(), new MSourceDebuggerListener("GameMediaSource360"));
//noinspection deprecation
mPlayer = ExoPlayerFactory.newSimpleInstance(mActivity, trackSelector, new DefaultLoadControl(
new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE),
1000,  // min buffer
2000, // max buffer
1000, // playback
1000,   //playback after rebuffer
DefaultLoadControl.DEFAULT_TARGET_BUFFER_BYTES,
true
));
mPlayer.prepare(source, true, true);
mPlayer.setPlayWhenReady(true);

我一直在尝试播放的HLS文件如下:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=544100,RESOLUTION=360x640
chunklist_w2108226616_b544100_sleng.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=294100,RESOLUTION=180x320
chunklist_w2108226616_b294100_sleng.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=48000
chunklist_w2108226616_b48000_ao_sleng.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1044100,RESOLUTION=720x1280
chunklist_w2108226616_b1044100_sleng.m3u8

我可以在带有getCurrentMappedTrackInfo()的Exoplayer中看到可用的曲目,列出了所有可用的视频曲目分辨率。然而,当我尝试使用将我的最大视频大小设置为720p时

dts.setParameters(new DefaultTrackSelector.ParametersBuilder() .setMaxVideoSize(720, 1280) .setMaxVideoBitrate(Integer.MAX_VALUE) .build());

视频音轨当然改成了720p,但解码器保持了360p。我该怎么做才能使解码器与所选曲目格式相匹配?

编辑:

我知道720p的比特率是1044100,上次我检查流还在播放时,我的带宽估计远高于这个数字(1900000左右(。

这是一个错误的警报,我很抱歉。事实证明,所说的720p流确实是一个错误标记的360p流,这引起了我的困惑。

整件事按计划进行。

相关内容

最新更新