Add Depedency
//============================java Code Start
=========================================
implementation 'org.videolan.android:libvlc-all:3.4.2'
//============================java Code Start
=========================================
Calling RecyclerView xml
//============================java Code Start
=========================================
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity12">
<androidx.recyclerview.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/streams_recycler_view12"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:clipToPadding="false"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingStart="4dp"
android:paddingEnd="4dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
//============================java Code Start
=========================================
Design of RecyclerView xml
//============================java Code Start
=========================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/camera_name"/>
<SurfaceView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/camera_surface_view"/>
</LinearLayout>
//============================java Code Start
=========================================
Multiple IP camera Live video play
on android java code
//============================java Code Start
=========================================
package com.example.camera3;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.camera3.video.CameraAdapter;
import org.videolan.libvlc.LibVLC;
import org.videolan.libvlc.MediaPlayer;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.videolan.libvlc.LibVLC;
import org.videolan.libvlc.Media;
import org.videolan.libvlc.MediaPlayer;
import java.util.ArrayList;
import java.util.List;
public class MainActivity12
extends AppCompatActivity {
private RecyclerView
recyclerView;
private CameraAdapter cameraAdapter;
private LibVLC libVLC;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main12);
// Initialize the libvlc library
ArrayList<String> options = new ArrayList<>();
options.add("--no-drop-late-frames");
options.add("--no-skip-frames");
libVLC =
new LibVLC(this, options);
// Initialize the RecyclerView
recyclerView = findViewById(R.id.streams_recycler_view12);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
// Initialize the camera adapter
List<Camera> cameras = new ArrayList<>();
cameras.add(new Camera("Camera 1", "http://192.168.235.103:8080/video"));
cameras.add(new Camera("Camera 2", "http://192.168.235.103:8080/video"));
cameras.add(new Camera("Camera 3", "http://192.168.235.103:8080/video"));
cameraAdapter = new
CameraAdapter(cameras);
recyclerView.setAdapter(cameraAdapter);
}
@Override
protected void onDestroy()
{
super.onDestroy();
// Release the libvlc library
libVLC.release();
}
// Define a Camera model
public class Camera {
private String
name;
private String url;
public Camera(String name, String url) {
this.name = name;
this.url = url;
}
public String
getName() {
return name;
}
public String
getUrl() {
return url;
}
}
// Define a custom adapter for the RecyclerView
public class CameraAdapter extends RecyclerView.Adapter<CameraAdapter.ViewHolder>
{
private List<Camera>
cameras;
public CameraAdapter(List<Camera>
cameras) {
this.cameras = cameras;
}
@Override
public ViewHolder
onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.video_layout_cell, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position)
{
Camera camera = cameras.get(position);
holder.cameraName.setText(camera.getName());
// Initialize the camera
player
CameraPlayer cameraPlayer
= new CameraPlayer(libVLC, holder.cameraSurfaceView, camera.getUrl());
holder.cameraSurfaceView.setTag(cameraPlayer);
cameraPlayer.start();
}
@Override
public void onViewRecycled(ViewHolder holder) {
// Stop the camera player
CameraPlayer cameraPlayer
= (CameraPlayer) holder.cameraSurfaceView.getTag();
if (cameraPlayer != null) {
cameraPlayer.stop();
}
}
@Override
public int getItemCount() {
return cameras.size();
}
public class ViewHolder extends RecyclerView.ViewHolder
{
public TextView cameraName;
public SurfaceView cameraSurfaceView;
public ViewHolder(View view) {
super(view);
cameraName = view.findViewById(R.id.camera_name);
cameraSurfaceView = view.findViewById(R.id.camera_surface_view);
}
}
}
public class CameraPlayer implements MediaPlayer.EventListener, SurfaceHolder.Callback
{
private LibVLC
libVLC;
private SurfaceView surfaceView;
private String mediaUrl;
private MediaPlayer mediaPlayer;
public CameraPlayer(LibVLC libVLC, SurfaceView surfaceView, String mediaUrl) {
this.libVLC = libVLC;
this.surfaceView = surfaceView;
this.mediaUrl = mediaUrl;
this.mediaPlayer = new MediaPlayer(libVLC);
}
public void start()
{
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
Media media = new Media(libVLC, Uri.parse(mediaUrl));
mediaPlayer.setMedia(media);
mediaPlayer.setEventListener(this);
mediaPlayer.setAspectRatio(null);
mediaPlayer.setScale(0);
media.release();
}
public void stop()
{
mediaPlayer.stop();
mediaPlayer.getVLCVout().detachViews();
mediaPlayer.release();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mediaPlayer.getVLCVout().setVideoSurface(holder.getSurface(), holder);
mediaPlayer.getVLCVout().attachViews();
mediaPlayer.play();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// Do nothing
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mediaPlayer.getVLCVout().detachViews();
}
@Override
public void onEvent(MediaPlayer.Event
event) {
switch (event.type) {
case MediaPlayer.Event.EndReached:
case MediaPlayer.Event.EncounteredError:
mediaPlayer.stop();
mediaPlayer.getVLCVout().detachViews();
break;
default:
break;
}
}
}
}
//============================java Code Start =======================================