**This is only for those, who wants HTTPS protocal in an Android platforms. Else ignore it **
==================================================================================================================
import android.annotation.SuppressLint;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
@SuppressLint(โCustomX509TrustManagerโ)
public class HttpsTrustManager implements X509TrustManager {
private static TrustManager[] trustManagers;
private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[]{};
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkClientTrusted(
X509Certificate[] x509Certificates, String s) {
}
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkServerTrusted(
X509Certificate[] x509Certificates, String s) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return _AcceptedIssuers;
}
public static void allowAllSSL() {
HttpsURLConnection.setDefaultHostnameVerifier((arg0, arg1) -> true);
SSLContext context = null;
if (trustManagers == null) {
trustManagers = new TrustManager[]{new HttpsTrustManager()};
}
try {
context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
} catch (NoSuchAlgorithmException | KeyManagementException e) {
e.printStackTrace();
}
assert context != null;
HttpsURLConnection.setDefaultSSLSocketFactory(context
.getSocketFactory());
}
}
=============================================================================================================================
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.extractor.ts.DefaultTsPayloadReaderFactory;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.source.hls.DefaultHlsExtractorFactory;
import com.google.android.exoplayer2.source.hls.HlsMediaSource;
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSource;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSource;
import com.google.android.exoplayer2.upstream.HttpDataSource;
public class RadioService extends Service {
private ExoPlayer exoPlayer;
@Override
public void onCreate() {
//INIT EXOPLAYER.............................................................................................................................................
AdaptiveTrackSelection.Factory trackSelectionFactory = new AdaptiveTrackSelection.Factory();
DefaultTrackSelector trackSelector = new DefaultTrackSelector(context, trackSelectionFactory);
exoPlayer = new ExoPlayer.Builder(context)
.setTrackSelector(trackSelector)
.build();
exoPlayer.addListener(listener);
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName());
mWakeLock.setReferenceCounted(false);
WifiManager.WifiLock wifiLock = ((WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE))
.createWifiLock(WifiManager.WIFI_MODE_FULL, "RadioLock");
wifiLock.acquire();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//HANDLE YOUR INTENT ACTION HERE.........................................................................................
return START_NOT_STICKY;
}
//Execute playing class
private void startPlaying() {
StreamClass streamClass = new StreamClass();
streamClass.execute();
}
//INIT YOUR STREAM CLASS.................................................................................................
private class StreamClass extends AsyncTask<String, Void, Boolean> {
MediaSource mediaSource;
protected void onPreExecute() {
}
protected Boolean doInBackground(final String... args) {
HttpsTrustManager.allowAllSSL(); //HERE YOU ALLOW ALL HTTP PROTOCAL SSL. Go back & check that class......................<<<<<<<<<<<<<<<---------
String url = "radio_url";
String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:40.0) Gecko/20100101 Firefox/40.0"; //OPTIONAL BUT YOU GIVE IT A TRY
HttpDataSource.Factory httpDataSourceFactory = new DefaultHttpDataSource.Factory().
setUserAgent(getUserAgent()).setAllowCrossProtocolRedirects(true);
DataSource.Factory dataSourceFactory = new DefaultDataSource.Factory(getApplicationContext(),
httpDataSourceFactory);
if (url.endsWith(".m3u8")) {
mediaSource = new HlsMediaSource.Factory(dataSourceFactory).
setExtractorFactory(new DefaultHlsExtractorFactory(
DefaultTsPayloadReaderFactory.FLAG_IGNORE_H264_STREAM,
true))
.setAllowChunklessPreparation(true)
.createMediaSource(MediaItem.fromUri(url));
} else {
mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(MediaItem.fromUri(url));
}
return true;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
exoPlayer.seekTo(exoPlayer.getCurrentMediaItemIndex(), exoPlayer.getCurrentPosition());
exoPlayer.setMediaSource(mediaSource);
exoPlayer.prepare();
exoPlayer.setPlayWhenReady(true);
}
}
Player.Listener listener = new Player.Listener() {
@Override
public void onPlaybackStateChanged(int playbackState) {
if (playbackState == Player.STATE_ENDED) {
//NEXT EVENT
} else if (playbackState == Player.STATE_BUFFERING) {
//BUFFERING EVENT
} else if (playbackState == Player.STATE_READY) {
//createNotification();
}
}
@Override
public void onPlayWhenReadyChanged(boolean playWhenReady, int reason) {
if (playWhenReady) {
if (!mWakeLock.isHeld()) {
mWakeLock.acquire(60000);
}
} else {
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
}
}
@Override
public void onPlayerError(@NonNull PlaybackException error) {
RadioService.this.onPlayerError();
}
};
private void play() {
exoPlayer.setPlayWhenReady(true);
exoPlayer.seekTo(exoPlayer.getCurrentMediaItemIndex(), exoPlayer.getCurrentPosition());
//changePlayPause();
//updateNotification();
}
public static String getUserAgent() {
StringBuilder result = new StringBuilder(64);
result.append("Dalvik/");
result.append(System.getProperty("java.vm.version"));
result.append(" (Linux; U; Android ");
String version = Build.VERSION.RELEASE;
result.append(version.length() > 0 ? version : "1.0");
if ("REL".equals(Build.VERSION.CODENAME)) {
String model = Build.MODEL;
if (model.length() > 0) {
result.append("; ");
result.append(model);
}
}
String id = Build.ID;
if (id.length() > 0) {
result.append(" Build/");
result.append(id);
}
result.append(")");
return result.toString();
}
}