80 lines
2.3 KiB
Java
80 lines
2.3 KiB
Java
|
|
package com.example.livestreaming;
|
||
|
|
|
||
|
|
import android.os.Bundle;
|
||
|
|
|
||
|
|
import androidx.annotation.Nullable;
|
||
|
|
import androidx.appcompat.app.AppCompatActivity;
|
||
|
|
import androidx.media3.common.MediaItem;
|
||
|
|
import androidx.media3.common.PlaybackException;
|
||
|
|
import androidx.media3.common.Player;
|
||
|
|
import androidx.media3.exoplayer.ExoPlayer;
|
||
|
|
|
||
|
|
import com.example.livestreaming.databinding.ActivityPlayerBinding;
|
||
|
|
|
||
|
|
public class PlayerActivity extends AppCompatActivity {
|
||
|
|
|
||
|
|
public static final String EXTRA_PLAY_URL = "extra_play_url";
|
||
|
|
public static final String EXTRA_TITLE = "extra_title";
|
||
|
|
|
||
|
|
private ActivityPlayerBinding binding;
|
||
|
|
private ExoPlayer player;
|
||
|
|
private boolean triedAltUrl = false;
|
||
|
|
|
||
|
|
@Override
|
||
|
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||
|
|
super.onCreate(savedInstanceState);
|
||
|
|
binding = ActivityPlayerBinding.inflate(getLayoutInflater());
|
||
|
|
setContentView(binding.getRoot());
|
||
|
|
|
||
|
|
String t = getIntent().getStringExtra(EXTRA_TITLE);
|
||
|
|
setTitle(t != null ? t : "Live");
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
protected void onStart() {
|
||
|
|
super.onStart();
|
||
|
|
String url = getIntent().getStringExtra(EXTRA_PLAY_URL);
|
||
|
|
if (url == null || url.trim().isEmpty()) return;
|
||
|
|
|
||
|
|
triedAltUrl = false;
|
||
|
|
|
||
|
|
ExoPlayer exo = new ExoPlayer.Builder(this).build();
|
||
|
|
binding.playerView.setPlayer(exo);
|
||
|
|
|
||
|
|
String altUrl = getAltHlsUrl(url);
|
||
|
|
exo.addListener(new Player.Listener() {
|
||
|
|
@Override
|
||
|
|
public void onPlayerError(PlaybackException error) {
|
||
|
|
if (triedAltUrl) return;
|
||
|
|
if (altUrl == null || altUrl.trim().isEmpty()) return;
|
||
|
|
triedAltUrl = true;
|
||
|
|
|
||
|
|
exo.setMediaItem(MediaItem.fromUri(altUrl));
|
||
|
|
exo.prepare();
|
||
|
|
exo.setPlayWhenReady(true);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
exo.setMediaItem(MediaItem.fromUri(url));
|
||
|
|
exo.prepare();
|
||
|
|
exo.setPlayWhenReady(true);
|
||
|
|
player = exo;
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
protected void onStop() {
|
||
|
|
super.onStop();
|
||
|
|
if (player != null) {
|
||
|
|
player.release();
|
||
|
|
player = null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private String getAltHlsUrl(String url) {
|
||
|
|
if (!url.endsWith(".m3u8")) return null;
|
||
|
|
if (url.contains("/index.m3u8")) return null;
|
||
|
|
|
||
|
|
return url.substring(0, url.length() - ".m3u8".length()) + "/index.m3u8";
|
||
|
|
}
|
||
|
|
}
|