2016-09-19 74 views
2

Exoplayer库似乎对我来说太复杂了。任何人都可以帮助我如何使用Android上新发布的exoplayer 2库流式广播电台网址?我目前正在尝试从服务器流式传输mp3文件,并希望将播放器放在IntentService中以保持音频文件在后台播放。提前致谢。实现新发布的ExoPlayer 2

回答

1

这里是ExoPlayer的简单演示跳对于MP3

compile 'com.google.android.exoplayer:exoplayer:r2.4.2' 

然后

public class MainActivity extends AppCompatActivity implements ExoPlayer.EventListener{ 

private BandwidthMeter bandwidthMeter; 
private TrackSelector trackSelector; 
private TrackSelection.Factory trackSelectionFactory; 
private SimpleExoPlayer player; 
private DataSource.Factory dataSourceFactory; 
private ExtractorsFactory extractorsFactory; 
private DefaultBandwidthMeter defaultBandwidthMeter; 
private MediaSource mediaSource; 

private String songUrl = "http://www.mfiles.co.uk/mp3-downloads/edvard-grieg-peer-gynt1-morning-mood-piano.mp3"; 

private Button stopButton; 
private Button startButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    startButton = (Button) findViewById(R.id.btnStart); 
    stopButton = (Button) findViewById(R.id.btnStop); 

    bandwidthMeter = new DefaultBandwidthMeter(); 
    extractorsFactory = new DefaultExtractorsFactory(); 

    trackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter); 

    trackSelector = new DefaultTrackSelector(trackSelectionFactory); 

    defaultBandwidthMeter = new DefaultBandwidthMeter(); 

    dataSourceFactory = new DefaultDataSourceFactory(this, 
      Util.getUserAgent(this, "mediaPlayerSample"),defaultBandwidthMeter); 


    mediaSource = new ExtractorMediaSource(Uri.parse(songUrl), 
      dataSourceFactory, 
      extractorsFactory, 
      null, 
      null); 

    player = ExoPlayerFactory.newSimpleInstance(this,trackSelector); 

    player.addListener(this); 
    player.prepare(mediaSource); 

    Log.v("TEST","playing state : " + player.getPlaybackState()); 

    startButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      player.setPlayWhenReady(true); 
     } 
    }); 

    stopButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      player.setPlayWhenReady(false); 
     } 
    }); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    player.setPlayWhenReady(false); 
} 


@Override 
public void onLoadingChanged(boolean isLoading) { 
    Log.i("TEST", "onLoadingChanged: " + isLoading + ""); 
    Log.i("TEST", "Buffered Position: " + player.getBufferedPosition() + ""); 
    Log.i("TEST", "Buffered Percentage: " + player.getBufferedPercentage() + ""); 
} 

@Override 
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { 

    if(playbackState == ExoPlayer.STATE_READY){ 
     Log.i("TEST", "ExoPlayer State is: READY"); 
    } else if (playbackState == ExoPlayer.STATE_BUFFERING){ 
     Log.i("TEST", "ExoPlayer State is: BUFFERING"); 
    } else if (playbackState == ExoPlayer.STATE_ENDED){ 
     Log.i("TEST", "ExoPlayer State is: ENDED"); 
    } else if (playbackState == ExoPlayer.STATE_IDLE){ 
     Log.i("TEST", "ExoPlayer State is: IDLE"); 
    } 


} 

@Override 
public void onTimelineChanged(Timeline timeline, Object manifest) { 

} 

@Override 
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) { 

} 

@Override 
public void onPlayerError(ExoPlaybackException error) { 

} 

@Override 
public void onPositionDiscontinuity() { 

} 

@Override 
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) { 

} 
} 
4

这是一个非常基本的设置通过ExoPlayer2获得音频流:

Handler handler = new Handler(); 
TrackSelector trackSelector = new DefaultTrackSelector(handler); 
LoadControl loadControl = new DefaultLoadControl(); 
SimpleExoPlayer exoPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl); 

Uri audioUri = Uri.parse("http://stream.basso.fi:8000/stream"); 
DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("ExoPlayerDemo"); 
ExtractorsFactory extractor = new DefaultExtractorsFactory(); 
MediaSource audioSource = new ExtractorMediaSource(audioUri, dataSourceFactory, extractor, null, null); 
exoPlayer.prepare(audioSource); 
exoPlayer.setPlayWhenReady(true); 

是的,有很多篮球的通过... :)

+0

对于HLS音频,只需将MediaSource更改为例如:new HlsMediaSource(audioUri,dataSourceFactory,1,null,null) – mtkopone

+0

您好,您的代码不适合我。难道是因为DefaultTrackSelector()现在需要一个TrackSelection.Factory而不是一个Handler实例? – matdev