Skip to content

perthcpe23/android-mjpeg-view

Repository files navigation

android-mjpeg-view

Android custom View for displaying MJPEG stream.

  • This custom view only requires a specific http(s) url.
  • Supported image scaling methods are fit width, fit height, original size, stretch and best fit.
  • Only boundary is used to separate each jpeg image (i.e. each frame) from a stream. Content-length is ignored.
  • A boundary must be specified in an HTTP headr (Content-type), otherwise a default boundary pattern will be used.

Basic usage

  1. This library is hosted on Maven Central, so make sure you added mavenCentral() as one of repositories
dependencyResolutionManagement {
    ...
    repositories {
        ...
        mavenCentral()
    }
}
  1. Include a library in to your project by adding this to app level build.gradle file.
dependencies {
    ...
    implementation 'com.perthcpe23.dev:android-mjpeg-view:1.1.2'
}
  1. Add a view to XML layout:
<com.longdo.mjpegviewer.MjpegView
    android:id="@+id/mjpegview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
  1. Specify mjpeg source and start streaming
MjpegView viewer = (MjpegView) findViewById(R.id.mjpegview);
viewer.setMode(MjpegView.MODE_FIT_WIDTH);
viewer.setAdjustHeight(true);
viewer.setSupportPinchZoomAndPan(true);
viewer.setUrl("https://app.punyapat.me/mjpeg-server/mjpeg");
viewer.startStream();

//when user leaves application
viewer.stopStream();
  1. Or Android Compose (skip #3 and #4)
MyApplicationTheme {
    Surface(
        modifier = Modifier.fillMaxSize(),
    ) {
        AndroidView(
            modifier = Modifier.fillMaxSize(),
            factory = { context ->
                MjpegView(context).apply {
                    mode = MjpegView.MODE_FIT_WIDTH
                    isAdjustHeight = true
                    supportPinchZoomAndPan = true
                    setUrl("https://app.punyapat.me/mjpeg-server/mjpeg")
                    startStream()
                }
            },
        )
    }
}
  1. Don't forget to add internet access permission to Android manifests file
<uses-permission android:name="android.permission.INTERNET" />

Contact

perth.s28@gmail.com