Exoplayer HTTP Stream video play with username password authentication

Exoplayer is very powerful and lite weight media player to use at Android application. It's used to play different kinds of audio and video either locally or remote URL. 

Follow the below step to play HTTP stream at your application.

Step 1: add your dependencies at app level:

implementation 'com.google.android.exoplayer:exoplayer:2.11.5'
implementation 'com.google.android.exoplayer:exoplayer-core:2.11.5'
implementation 'com.google.android.exoplayer:exoplayer-dash:2.11.5'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.11.5'
implementation 'com.google.android.exoplayer:exoplayer-hls:2.11.5'
implementation 'com.google.android.exoplayer:exoplayer-smoothstreaming:2.11.5'

Step 2: Add permission to manifest:

 <uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<uses-sdk/>

Step 3: add below to initialization exo player view.

PlayerView playerView;
SimpleExoPlayer player;
playerView = (PlayerView) findViewById(R.id.player_view);

private void initPlayer() {
TrackSelector trackSelector = new DefaultTrackSelector(context);
DefaultLoadControl loadControl = new DefaultLoadControl();
player = ExoPlayerFactory.newSimpleInstance(context, trackSelector, loadControl);
playerView.setPlayer(player);
playerView.setUseController(false);
player.setPlayWhenReady(true);
player.seekTo(0, 0);

Uri uri = Uri.parse("http://schonell:EP3pMisMNsjmao2F@hv-tower-b.dyndns.org:7305");
MediaSource mediaSource = buildMediaSource(uri);
player.prepare(mediaSource, true, false);
}

private MediaSource buildMediaSource(final Uri uri) {
HttpDataSource.BaseFactory myDSFactory = new HttpDataSource.BaseFactory() {
@Override
protected HttpDataSource createDataSourceInternal(HttpDataSource.RequestProperties defaultRequestProperties) {
byte[] toEncrypt = uri.getUserInfo().getBytes();
String encoded = "Basic " + Base64.encodeToString(toEncrypt, Base64.DEFAULT).trim();
DefaultHttpDataSourceFactory dsf = new DefaultHttpDataSourceFactory("exotest");
HttpDataSource ds = dsf.createDataSource();
ds.setRequestProperty("Authorization", encoded);
return ds;
}
};

ExtractorMediaSource.Factory emf = new ExtractorMediaSource.Factory(myDSFactory);
return emf.createMediaSource(uri);
}
If everything goes well then you can below like video stream in your app.




Happy coding!!! and comment below if you face any problem. 
I'll try to you solve your problem.

Post a Comment

0 Comments