SimpleExoPlayer не транслируется во второй раз - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу воспроизвести радиоканал из URL с помощью SimpleExoPlayer, код работает только в первый раз, то есть, когда я нажимаю кнопку воспроизведения, он работает, а затем я нажимаю снова, он останавливается. Но если я снова нажму кнопку воспроизведения, он не будет играть. Я пытался удалить кэш в каждом событии остановки, но это также не решило проблему.

public class MainActivity extends AppCompatActivity {

private String source;
private SimpleExoPlayer simpleExoPlayer;
private boolean isPlaying;

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

    ImageButton btnPlay = findViewById(R.id.image_play);
    source = "http://mp3stream7.apasf.apa.at/stream/1/";
    isPlaying = false;

    btnPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!isPlaying) {
                setupPlayer();
                simpleExoPlayer.setPlayWhenReady(true);
                isPlaying = true;
            } else {
                simpleExoPlayer.stop();
                simpleExoPlayer.setPlayWhenReady(false);
                isPlaying = false;
            }
        }
    });

}

private void setupPlayer() {

    DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(MainActivity.this, null,
            DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF);

    TrackSelector trackSelector = new DefaultTrackSelector();
    simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector);

    String userAgent = Util.getUserAgent(MainActivity.this, "Play Audio");
    ExtractorMediaSource mediaSource = new ExtractorMediaSource(Uri.parse(source),
            new CacheDataSourceFactory(MainActivity.this, 100 * 1024 * 1024, 5 * 1024 * 1024),
            new DefaultExtractorsFactory(), null, null);
    simpleExoPlayer.prepare(mediaSource);

}

private void release_player() {
    simpleExoPlayer.release();
}

@Override
protected void onDestroy() {
    simpleExoPlayer.release();
    super.onDestroy();
}


@Override
protected void onPause() {
    simpleExoPlayer.release();
    super.onPause();
}

}

1 Ответ

0 голосов
/ 08 апреля 2020

попробуйте это:

  public class MainActivity extends AppCompatActivity {

private String source;
private SimpleExoPlayer simpleExoPlaye = null;
private boolean isPlaying;

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

    ImageButton btnPlay = findViewById(R.id.image_play);
    source = "http://mp3stream7.apasf.apa.at/stream/1/";
    isPlaying = false;

    //add this
    setupPlayer();

    btnPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!isPlaying) {
                //remove setupPlayer(); from here
                simpleExoPlayer.setPlayWhenReady(true);
                isPlaying = true;
            } else {
                //remove  simpleExoPlayer.stop(); from here
                simpleExoPlayer.setPlayWhenReady(false);
                isPlaying = false;
            }
        }
    });

}

@Override
public void onResume() {
    super.onResume();
    if (simpleExoPlayer != null) {
        simpleExoPlayer.setPlayWhenReady(isPlaying);
    } else {
        setupPlayer();
    }

}


private void setupPlayer() {

    if (simpleExoPlayer != null) {
        simpleExoPlayer.stop();
    }
    DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(MainActivity.this, null,
            DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF);

    TrackSelector trackSelector = new DefaultTrackSelector();
    simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector);

    String userAgent = Util.getUserAgent(MainActivity.this, "Play Audio");
    ExtractorMediaSource mediaSource = new ExtractorMediaSource(Uri.parse(source),
            new CacheDataSourceFactory(MainActivity.this, 100 * 1024 * 1024, 5 * 1024 * 1024),
            new DefaultExtractorsFactory(), null, null);
    simpleExoPlayer.prepare(mediaSource);

}


@Override
protected void onDestroy() {
    //remove releaze from onDestroy and onPause
    simpleExoPlayer.stop();
    super.onDestroy();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...