Skip to content
MJPEG video streaming on Android
Branch: master
Clone or download
Latest commit 69cfbb3 Dec 2, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app [release][1.9.0] Dec 2, 2018
gradle/wrapper bump stable libs Dec 2, 2018
images [release][1.9.0] Dec 2, 2018
mjpeg-view Merge pull request #75 from xeno14/rotate Dec 2, 2018
.gitignore
LICENSE change license from CC to MIT Aug 7, 2016
README.md update lib v1.6.0 Dec 2, 2018
bintray.gradle change license from CC to MIT Aug 7, 2016
build.gradle update lib v1.6.0 Dec 2, 2018
compileJni.sh
gradle.properties draft MjpegStream Feb 13, 2016
gradlew first commit Feb 12, 2016
gradlew.bat first commit Feb 12, 2016
settings.gradle refactor library name Mar 1, 2016

README.md

ipcam-view ipcam-view

Android Arsenal Download

Android MJPEG video streaming made simple!

A wrapper library around the well known SimpleMjpegView and android-camera-axis projects.

If you have problem to identify your IpCam url, please follow this link

Features

  • Default support by android-camera-axis
  • Native support by SimpleMjpegView
  • Handle credentials and cookies
  • Multiple camera in one activity
  • Snapshot
  • Flip and rotate image
  • Video recording
  • Custom appearance

Gradle dependency

repositories {
    jcenter()
}
dependencies {
    compile 'com.github.niqdev:mjpeg-view:1.6.0'
}

Demo app

main default

two-camera snapshot

custom-appearance settings

Get it on F-Droid Get it on Google Play

Usage

Add to your layout: example

<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  // ADD THIS
  xmlns:stream="http://schemas.android.com/apk/res-auto"
  ...>

    <com.github.niqdev.mjpeg.MjpegSurfaceView
      android:id="@+id/VIEW_NAME"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      stream:type="stream_default OR stream_native" />

</RelativeLayout>

Read stream in your activity/fragment: example

int TIMEOUT = 5; //seconds

Mjpeg.newInstance()
  .credential("USERNAME", "PASSWORD")
  .open("IPCAM_URL.mjpg", TIMEOUT)
  .subscribe(inputStream -> {
      mjpegView.setSource(inputStream);
      mjpegView.setDisplayMode(DisplayMode.BEST_FIT);
      mjpegView.showFps(true);
  });

Customize appearance

To get a transparent background for the surface itself (while stream is loading) as well as for the stream background

mjpegView.setTransparentBackground();
// OR
stream:transparentBackground="true"

To hide the MjpegView later, you might need to reset the transparency due to internal behaviour of applying transparency

mjpegView.resetTransparentBackground();

To set other colors than transparent, be aware that they will only be applied on a running stream i.e. you can't change the color of the surface itself which you will see while the stream is loading

Note that it only works when transparentBackground is not set to true and that you are not able to directly set transparent background color here

mjpegView.setCustomBackgroundColor(Color.DKGRAY);
// OR
stream:backgroundColor="@android:color/darker_gray"

To change the colors of the fps overlay

mjpegView.setFpsOverlayBackgroundColor(Color.DKGRAY);
mjpegView.setFpsOverlayTextColor(Color.WHITE);

To clear the last frame since the canvas keeps the current image even if you stop the stream, e.g. hide/show

mjpegView.clearStream();

To flip the image

mjpegView.flipHorizontal(true);
mjpegView.flipVertical(true);

To rotate the image

mjpegView.setRotate(90);  // degrees

Apps that use this library

You are welcome to add your app to the list!

Development

Download Android NDK:

  • manually
  • in Android Studio: File > Other Settings > Default Project Structure > download NDK

Compile manually (verify your paths)

$ chmod a+x compileJni.sh
$ ./compileJni.sh
You can’t perform that action at this time.