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
- This library is hosted on Maven Central, so make sure you added
mavenCentral()
as one of repositories
dependencyResolutionManagement {
...
repositories {
...
mavenCentral()
}
}
- 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'
}
- Add a view to XML layout:
<com.longdo.mjpegviewer.MjpegView
android:id="@+id/mjpegview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
- 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();
- 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()
}
},
)
}
}
- Don't forget to add internet access permission to Android manifests file
<uses-permission android:name="android.permission.INTERNET" />
- You can also download .aar at https://github.com/perthcpe23/android-mjpeg-view/tree/master/aar