2017-05-27 92 views
2

我在我的android應用程序中使用Exoplayer播放視頻和音頻文件。以循環的視頻/音頻根據Exoplayer developer's guide,,這是你必須做的Exoplayer不循環的視頻

MediaSource mediaSource = new ExtractorMediaSource(videoUri, ...); 
// Loops the video indefinitely. 
LoopingMediaSource loopingSource = new LoopingMediaSource(mediaSource); 

什麼,所以我實現它像這樣在我的活動的onCreate方法

BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); 
    TrackSelection.Factory factory = new AdaptiveTrackSelection.Factory(bandwidthMeter); 
    TrackSelector trackSelector = new DefaultTrackSelector(factory); 

    simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(this,trackSelector); 
    simpleExoPlayer.setPlayWhenReady(true); 
    simpleExoPlayerView.setPlayer(simpleExoPlayer); 

    // Measures bandwidth during playback. Can be null if not required. 
    bandwidthMeter2 = new DefaultBandwidthMeter(); 

// Produces DataSource instances through which media data is loaded. 
    dataSourceFactory = new DefaultDataSourceFactory(this, 
     Util.getUserAgent(this, applicationName), bandwidthMeter2); 

// Produces Extractor instances for parsing the media data. 
    extractorsFactory = new DefaultExtractorsFactory(); 
    mediaSource = new ExtractorMediaSource(videoUri,dataSourceFactory, extractorsFactory, null, null); 

    loopingSource = new LoopingMediaSource(mediaSource); 
    simpleExoPlayer.prepare(mediaSource); 

但我的視頻文件的循環沒有發生。它只玩一次。

回答

2

我發現Exoplayer開發人員指南中留有一些至關重要的信息。在創建LoopingMediaSource實例後,不應該調用simpleExoPlayer.prepare(mediaSource);,而應該調用simpleExoPlayer.prepare(loopingSource);。以下是完整代碼

 BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); 
    TrackSelection.Factory factory = new AdaptiveTrackSelection.Factory(bandwidthMeter); 
    TrackSelector trackSelector = new DefaultTrackSelector(factory); 

    simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(this,trackSelector); 
    simpleExoPlayer.setPlayWhenReady(true); 
    simpleExoPlayerView.setPlayer(simpleExoPlayer); 

    // Measures bandwidth during playback. Can be null if not required. 
    bandwidthMeter2 = new DefaultBandwidthMeter(); 

// Produces DataSource instances through which media data is loaded. 
    dataSourceFactory = new DefaultDataSourceFactory(this, 
     Util.getUserAgent(this, applicationName), bandwidthMeter2); 

// Produces Extractor instances for parsing the media data. 
    extractorsFactory = new DefaultExtractorsFactory(); 

     MediaSource mediaSource = new ExtractorMediaSource(videoUri,dataSourceFactory, extractorsFactory, null, null); 
    // Loops the video indefinitely. 
    LoopingMediaSource loopingSource = new LoopingMediaSource(mediaSource); 

    simpleExoPlayer.prepare(loopingSource);