我试图使用getBitRateEstimate获取带宽,但它一直返回-1:
(我认为这个问题与不向DataSourceFactory提供仪表有关,但我无法弄清楚如何做到这一点)
以下是代码:
private void createView(Context context) {
LayoutParams layoutParams = new LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
playerView = new PlayerView(getContext());
bandwidthMeter = new DefaultBandwidthMeter();
playerView.setLayoutParams(layoutParams);
myContext = context;
addView(playerView, 0, layoutParams);
}
public void initializeMediaPlayer() {
/**
* Create Simple Exoplayer Player
*/
if(player == null) {
//bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory = new
AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector = new
DefaultTrackSelector(videoTrackSelectionFactory);
DefaultAllocator defaultAllocator = new
DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE);
LoadControl loadControl = new
DefaultLoadControl(defaultAllocator, 1450, 3000, 1000, 1000,
C.LENGTH_UNSET, false);
RenderersFactory renderersFactory = new DefaultRenderersFactory(myContext);
player = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector, loadControl);
playerView.setUseController(false);
playerView.setPlayer(player);
}
/**
* Create RTMP Data Source
*/
rtmpDataSourceFactory = new RtmpDataSourceFactory();
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
MediaSource videoSource = new ExtractorMediaSource.Factory(rtmpDataSourceFactory).createMediaSource(Uri.parse(source));
//MediaSource videoSource = new ExtractorMediaSource(Uri.parse("rtmp://35.231.80.114/live/myStream"),
// rtmpDataSourceFactory, extractorsFactory, null, null);
player.addListener(new PlayerEventListener());
player.setPlayWhenReady(true);
player.seekToDefaultPosition();
player.prepare(videoSource);
}
答案 0 :(得分:0)
RtmpDataSourceFactory
有一个构造函数,它以TransferListener
为参数。 DefaultBandwidthMeter
实现了TransferListener,因此您可以将其传递给构造函数:
DefaultBandwidthMeter defaultBandwidthMeter = new DefaultBandwidthMeter();
RtmpDataSourceFactory rtmpDataSourceFactory =
new RtmpDataSourceFactory(defaultBandwidthMeter);
通过这种方式,带宽计通知传输的数据,用于计算比特率估计值。