Multiple IP camera Live video stream on android

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 =======================================

Post a Comment

0 Comments
* Please Don't Spam Here. All the Comments are Reviewed by Admin.