Creating a simple instance of ExoPlayer

前端 未结 3 1519
心在旅途
心在旅途 2020-12-29 11:48

I am currently looking to develop an application that utilises Dash through the ExoPlayer in Android.

To begin with I am going through the demo project however am ha

相关标签:
3条回答
  • 2020-12-29 12:24

    Today while working on a project, I found that this.myExoPlayer = ExoPlayerFactory.newSimpleInstance(getActivity()); and some others are now deprecated and Android studio suggested to use new way. So I did a quick Google for it but everywhere I found the old way. So I looked into the SimpleExoPlayer.java file, read some methods. So this is how you initialize simpleExoPlayer:

      Activity activity = getActivity(); // if you are in a fragment
      // Or,   activity = YourActivity.this;      if you are in an Activity
      SimpleExoPlayer simpleExoPlayer = new SimpleExoPlayer.Builder(activity).build();
    

    I hope this is helpful.

    0 讨论(0)
  • 2020-12-29 12:40

    Here is how you would do it using the new ExoPlayer 2 API, and the SimpleExoPlayer.

    First create the player:

    DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, bandwidthMeter);
    
    TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
    DefaultTrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
    LoadControl loadControl = new DefaultLoadControl();
    
    SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context, trackSelector, loadControl);
    
    player.addListener(...); // To receive events from the player
    

    Then create your MediaSource. For MP3 you can use ExtractorMediaSource:

    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    Uri uri = Uri.parse(mp3UriString);
    Handler mainHandler = new Handler(Looper.getMainLooper());
    MediaSource mediaSource = new ExtractorMediaSource(uri, dataSourceFactory, extractorsFactory, mainHandler, mediaSourceListener); // Listener defined elsewhere
    

    Then prepare and play when ready:

    player.prepare(mediaSource);
    player.setPlayWhenReady(true);
    

    For DASH you would use DashMediaSource instead of ExtractorMediaSource.

    0 讨论(0)
  • 2020-12-29 12:42

    First of all instantiate your ExoPlayer with this line:

    exoPlayer = ExoPlayer.Factory.newInstance(RENDERER_COUNT, minBufferMs, minRebufferMs);
    

    If you want to play audio only you can use these values:

    RENDERER_COUNT = 1 //since you want to render simple audio
    minBufferMs = 1000 
    minRebufferMs = 5000
    

    Both buffer values can be tweaked according to your requirements

    Now you have to create a DataSource. When you want to stream mp3 you can use the DefaultUriDataSource. You have to pass the Context and a UserAgent. To keep it simple play a local file and pass null as userAgent:

    DataSource dataSource = new DefaultUriDataSource(context, null);
    

    Then create the sampleSource:

    ExtractorSampleSource sampleSource = new ExtractorSampleSource(
                        uri, dataSource, new Mp3Extractor(), RENDERER_COUNT, requestedBufferSize);
    

    uri points to your file, as an Extractor you can use a simple default Mp3Extractor if you want to play mp3. requestedBufferSize can be tweaked again according to your requirements. Use 5000 for example.

    Now you can create your audio track renderer using the sample source as follows:

    MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource);
    

    Finally call prepare on your exoPlayer instance:

    exoPlayer.prepare(audioRenderer);
    

    To start playback call:

    exoPlayer.setPlayWhenReady(true);
    
    0 讨论(0)
提交回复
热议问题