0

我正在尝试使用 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);

}
4

1 回答 1

0

RtmpDataSourceFactory有一个以 aTransferListener作为参数的构造函数。实现了 TransferListener ,因此您可以将其DefaultBandwidthMeter传递给构造函数:

DefaultBandwidthMeter defaultBandwidthMeter = new DefaultBandwidthMeter();
RtmpDataSourceFactory rtmpDataSourceFactory =
    new RtmpDataSourceFactory(defaultBandwidthMeter);

这样,带宽计就被告知用于计算比特率估计的传输数据。

于 2018-03-29T21:37:07.857 回答