MJPEG video streaming on Android

Overview

ipcam-view ipcam-view

Android Arsenal JitPack

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 {
    maven { url 'https://jitpack.io' }
}
dependencies {
    implementation 'com.github.niqdev:ipcam-view:<LATEST_RELEASE>'
}

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
Comments
  • Can't set background color

    Can't set background color

    I am not able to change the background color of the MjpegView to remove the black borders.

    <com.github.niqdev.mjpeg.MjpegSurfaceView
                        android:id="@+id/streamView"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="#FFFFFF"
                        stream:type="stream_default" />
    

    Is there any magic trick or something like that?

    Edit: Okay I was able to do this programmatically after casting the MjpegView into a normal view but then I have the problem that I can use every color instead of Color.transparent. When I try to ((View) streamView).setBackgroundColor(Color.TRANSPARENT); it remains black

    opened by PhilippNowak96 26
  • NetworkOnMainThread Exception

    NetworkOnMainThread Exception

    if (mjpegView.isStreaming()) {
                    mjpegView.stopPlayback();
                }
    

    causes the exception and cannot be called in async task or any other worker thread i.e. has to be called from the UI thread :( , How to fix this ?

    bug 
    opened by sidzi 20
  • Fix scaling issue

    Fix scaling issue

    Hi @niqdev I just tested the new version 2.3.1. Unfortunately, I found that I implemented something wrong in the last PR; the scaling didn't work properly. Here I have a fix that I have tested extensively. Sorry for the hassel.

    opened by zaptoopa 17
  • F-Droid

    F-Droid

    F-Droid received a Request For Packaging for your app. To be build by F-Droid, we need to find a way to build everything from source. Could you help us to do so? Here are the problematic prebuilt libraries:

    ERROR: Found shared library at mjpeg-view/src/main/jniLibs/x86/libImageProc.so ERROR: Found shared library at mjpeg-view/src/main/jniLibs/mips/libImageProc.so ERROR: Found shared library at mjpeg-view/src/main/jniLibs/armeabi-v7a/libImageProc.so ERROR: Found shared library at mjpeg-view/src/main/jniLibs/armeabi/libImageProc.so

    opened by Poussinou 17
  • Throwing a Fatal error

    Throwing a Fatal error

    I just copied and pasted the code and changed the links around but can't get the example working, and like it is throwing a really strange error. I think here is the code in question I belive: private void loadIpCam() { Mjpeg.newInstance() .credential(getPreference("demo"), getPreference("nxwitness")) .open(getPreference("http://demo.networkoptix.com:7001/media/5bafc0e9-56be-97f8-5034-45a50cecf3d8.mpjpeg"), TIMEOUT) .subscribe( inputStream -> { mjpegView.setSource(inputStream); mjpegView.setDisplayMode(calculateDisplayMode()); mjpegView.showFps(true); }, throwable -> { Log.e(getClass().getSimpleName(), "mjpeg error", throwable); Toast.makeText(this, "Error", Toast.LENGTH_LONG).show(); }); } and it throws this error in Android Studios, it looks like there is dependency missing somewhere or something? Caused by: java.lang.NoSuchMethodError: No static method com_github_niqdev_mjpeg_Mjpeg$$Lambda$1_lambda$connect$0(Lcom/github/niqdev/mjpeg/Mjpeg;Ljava/lang/String;)Lrx/Observable; in class Lcom/github/niqdev/mjpeg/Mjpeg; or its super classes (declaration of 'com.github.niqdev.mjpeg.Mjpeg' appears in /data/app/danmax.javaalexa-2/base.apk)

    opened by dkostins 14
  • Live image recording and single image acquire

    Live image recording and single image acquire

    Hello, I want to open a PR that has following features:

    1. Recording live image streaming and saving it as MJPEG file.
    2. Acquiring a single image and saving it as JPG file
    3. All the files are saving at /sdcard/Android/data/{packagename}/files

    recording snapshot saved_files

    .

    opened by wxkly8888 13
  • Unable to use ipcam-view with the native support of java 1.8 with Android studio 2.1.1

    Unable to use ipcam-view with the native support of java 1.8 with Android studio 2.1.1

    I'm having trouble using ipcam-view with the native support of Android Studio 2.1.1 of Java 1.8.

    When i tried to launch the fragment containing the Webcam View I Obtain :

    Caused by: java.lang.IncompatibleClassChangeError: The method 'rx.Observable com.github.niqdev.mjpeg.Mjpeg.com_github_niqdev_mjpeg_Mjpeg_lambda$connect$0(java.lang.String)' was expected to be of type direct but instead was found to be of type virtual (declaration of 'com.github.niqdev.mjpeg.Mjpeg' appears in /data/app/android.application.

    In my buidle.graddle (App) I added :

    jackOptions { enabled true }

    and

    compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }

    in my fragment, the code was :

    MjpegView mjpegView = (MjpegView) view.findViewById(R.id.WebCam_View);

        int TIMEOUT = 5; 
    
        Mjpeg.newInstance()
                //.credential("USERNAME", "PASSWORD")
                .open("URL", TIMEOUT)
                .subscribe(inputStream -> {
                    mjpegView.setSource(inputStream);
                    mjpegView.setDisplayMode(DisplayMode.BEST_FIT);
                    mjpegView.showFps(true);
                });
    

    Thank you for your help and for the work you have done on this project.

    Best regards

    Richard

    enhancement 
    opened by ripleyXLR8 13
  • Multiple MjpegViews in one activity

    Multiple MjpegViews in one activity

    If I put 2 MjpegViews in one activity, one stays black, and the other one is streaming OK. Both streams work if put alone in a activity.

    Is this a known issue? Am I doing something wrong?

    Thanks.

    opened by bmachek 12
  • FATAL EXCEPTION: Thread-17 - when I rotate from portrait to landscape

    FATAL EXCEPTION: Thread-17 - when I rotate from portrait to landscape

    Tried on emulator, genymotion and Nexus 5x. When I rotate the device I sometimes get this error. Camera url is not public.

    : FATAL EXCEPTION: Thread-17 Process: com.r3dm4n.gradinitaalex, PID: 31635 java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap com.github.niqdev.mjpeg.MjpegInputStreamDefault.readMjpegFrame()' on a null object reference at com.github.niqdev.mjpeg.MjpegViewDefault$MjpegViewThread.run(MjpegViewDefault.java:129)

    opened by r3dm4n 10
  • Propagate Network Unavailable Exception

    Propagate Network Unavailable Exception

    Is there any way to have an exception be propagated back to the application in the event that the server is down, so I can use try/catch to handle the exception within my application?

    opened by ariesccv 10
  • onPause() and onResume() java.lang.IllegalThreadStateException: Thread already started

    onPause() and onResume() java.lang.IllegalThreadStateException: Thread already started

    When I tried to put the app in the background and then return to app again this error occurred/showed:

    I also tried to clone the source and similar error occured:

    java.lang.IllegalThreadStateException: Thread already started at java.lang.Thread.checkNotStarted(Thread.java:849) at java.lang.Thread.start(Thread.java:1059) at com.github.niqdev.mjpeg.MjpegViewDefault._startPlayback(MjpegViewDefault.java:186) at com.github.niqdev.mjpeg.MjpegViewDefault._setSource(MjpegViewDefault.java:238) at com.github.niqdev.mjpeg.MjpegViewDefault.setSource(MjpegViewDefault.java:283) at com.github.niqdev.mjpeg.MjpegSurfaceView.setSource(MjpegSurfaceView.java:67)

    @Override public void onResume() { super.onResume(); initIPCam(); }

    @Override public void onPause() { camera_viewer.stopPlayback(); }

    opened by disono 10
  • Bump appcompat from 1.4.2 to 1.5.1

    Bump appcompat from 1.4.2 to 1.5.1

    Bumps appcompat from 1.4.2 to 1.5.1.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 2
  • Bump core-ktx from 1.8.0 to 1.9.0

    Bump core-ktx from 1.8.0 to 1.9.0

    Bumps core-ktx from 1.8.0 to 1.9.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 4
  • Facing issue on streaming with some devices

    Facing issue on streaming with some devices

    I'm testing this demo project with a camera device but facing streaming issues on some devices, same URL and the app is working on other devices.

    Device Details Name - Realme 6 (RMX2001) android os - 11

    2022-06-29 19:47:32.127 24206-24206/com.github.niqdev.ipcam E/IpCamDefaultActivity: mjpeg error java.util.concurrent.TimeoutException at rx.internal.operators.OnSubscribeTimeoutTimedWithFallback$TimeoutMainSubscriber.onTimeout(OnSubscribeTimeoutTimedWithFallback.java:166) at rx.internal.operators.OnSubscribeTimeoutTimedWithFallback$TimeoutMainSubscriber$TimeoutTask.call(OnSubscribeTimeoutTimedWithFallback.java:191) at rx.internal.schedulers.EventLoopsScheduler$EventLoopWorker$2.call(EventLoopsScheduler.java:189) at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)

    2022-06-29 19:50:42.856 25720-25758/com.github.niqdev.ipcam E/Mjpeg: error during connection java.net.ConnectException: Failed to connect to /192.168.4.1:81 at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:147) at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116) at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186) at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128) at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248) at com.github.niqdev.mjpeg.Mjpeg.lambda$connect$0$com-github-niqdev-mjpeg-Mjpeg(Mjpeg.java:108) at com.github.niqdev.mjpeg.Mjpeg$$ExternalSyntheticLambda0.call(Unknown Source:4) at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) at rx.Observable.subscribe(Observable.java:10423) at rx.Observable.subscribe(Observable.java:10390) at rx.internal.operators.OnSubscribeTimeoutTimedWithFallback.call(OnSubscribeTimeoutTimedWithFallback.java:64) at rx.internal.operators.OnSubscribeTimeoutTimedWithFallback.call(OnSubscribeTimeoutTimedWithFallback.java:36) at rx.Observable.unsafeSubscribe(Observable.java:10327) at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.call(OperatorSubscribeOn.java:100) at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.call(CachedThreadScheduler.java:230) at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923)

    opened by tejaskanani07 0
  • missing permission

    missing permission

    the app should declare permission in order to use camera.

    head of the app's AndroidManifest.xml looks like this(line 1 to 7):

    <?xml version="1.0" encoding="utf-8"?>
    <manifest
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.github.niqdev.ipcam">
    
        <uses-permission android:name="android.permission.INTERNET" />
    

    AndroidManifest.xml of mjpeg streaming app in play store looks like this (line 1 to 15)

    <?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="30" android:compileSdkVersionCodename="11" package="com.dev47apps.obsdroidcam" platformBuildVersionCode="30" platformBuildVersionName="11">
        <uses-feature android:name="android.hardware.camera" android:required="true"/>
        <uses-feature android:name="android.hardware.wifi" android:required="false"/>
        <uses-feature android:name="android.hardware.microphone" android:required="false"/>
        <uses-feature android:name="android.hardware.screen.landscape" android:required="false"/>
        <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
        <uses-permission android:name="android.permission.WAKE_LOCK"/>
        <uses-permission android:name="android.permission.BLUETOOTH"/>
        <uses-permission android:name="android.permission.CAMERA"/>
        <uses-permission android:name="android.permission.RECORD_AUDIO"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    

    touched ours would look like this:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.github.niqdev.ipcam">
        <uses-feature android:name="android.hardware.camera" android:required="true"/>
        <uses-feature android:name="android.hardware.wifi" android:required="true"/>
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.WAKE_LOCK"/>
        <uses-permission android:name="android.permission.CAMERA"/>
        <uses-permission android:name="android.permission.RECORD_AUDIO"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    
    opened by wb1016 1
Releases(2.4.0)
  • 2.4.0(Nov 24, 2022)

    What's Changed

    Other Changes

    • Bump appcompat from 1.4.0 to 1.4.1 by @dependabot in https://github.com/niqdev/ipcam-view/pull/187
    • Bump gradle from 7.0.4 to 7.1.0 by @dependabot in https://github.com/niqdev/ipcam-view/pull/188
    • Bump gradle from 7.1.0 to 7.1.1 by @dependabot in https://github.com/niqdev/ipcam-view/pull/189
    • Bump actions/checkout from 2.4.0 to 3 by @dependabot in https://github.com/niqdev/ipcam-view/pull/195
    • Bump actions/upload-artifact from 2.3.1 to 3 by @dependabot in https://github.com/niqdev/ipcam-view/pull/194
    • Bump gradle from 7.1.1 to 7.1.2 by @dependabot in https://github.com/niqdev/ipcam-view/pull/192
    • Bump actions/setup-java from 2 to 3 by @dependabot in https://github.com/niqdev/ipcam-view/pull/200
    • Bump gradle from 7.1.2 to 7.1.3 by @dependabot in https://github.com/niqdev/ipcam-view/pull/199
    • Update Gradle Wrapper from 7.3.3 to 7.4.2 by @github-actions in https://github.com/niqdev/ipcam-view/pull/197
    • Bump kotlin_version from 1.6.10 to 1.6.20 by @dependabot in https://github.com/niqdev/ipcam-view/pull/198
    • Bump kotlin_version from 1.6.20 to 1.6.21 by @dependabot in https://github.com/niqdev/ipcam-view/pull/201
    • Bump gradle from 7.1.3 to 7.2.0 by @dependabot in https://github.com/niqdev/ipcam-view/pull/202
    • Bump gradle from 7.2.0 to 7.2.1 by @dependabot in https://github.com/niqdev/ipcam-view/pull/203
    • Bump appcompat from 1.4.1 to 1.4.2 by @dependabot in https://github.com/niqdev/ipcam-view/pull/204
    • Bump core-ktx from 1.7.0 to 1.8.0 by @dependabot in https://github.com/niqdev/ipcam-view/pull/205
    • Bump kotlin_version from 1.6.21 to 1.7.10 by @dependabot in https://github.com/niqdev/ipcam-view/pull/208
    • Bump gradle from 7.2.1 to 7.2.2 by @dependabot in https://github.com/niqdev/ipcam-view/pull/210
    • Update Gradle Wrapper from 7.4.2 to 7.5.1 by @github-actions in https://github.com/niqdev/ipcam-view/pull/211
    • Bump kotlin_version from 1.7.10 to 1.7.20 by @dependabot in https://github.com/niqdev/ipcam-view/pull/216
    • Bump gradle from 7.2.2 to 7.3.1 by @dependabot in https://github.com/niqdev/ipcam-view/pull/217
    • Bump kotlin_version from 1.7.20 to 1.7.21 by @dependabot in https://github.com/niqdev/ipcam-view/pull/218
    • increase maximum frame size to support newer cameras by @mdeneen in https://github.com/niqdev/ipcam-view/pull/219
    • api33 by @hannesa2 in https://github.com/niqdev/ipcam-view/pull/223
    • Move namespace by @hannesa2 in https://github.com/niqdev/ipcam-view/pull/222
    • Release with auto generated changelog by @hannesa2 in https://github.com/niqdev/ipcam-view/pull/221

    New Contributors

    • @mdeneen made their first contribution in https://github.com/niqdev/ipcam-view/pull/219

    Full Changelog: https://github.com/niqdev/ipcam-view/compare/2.3.4...2.4.0

    Source code(tar.gz)
    Source code(zip)
    mjpeg-view-release.aar(317.61 KB)
Owner
Also on https://gitlab.com/niqdev
null
Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.

ijkplayer Platform Build Status Android iOS Video player based on ffplay Download Android: Gradle # required allprojects { repositories {

bilibili 28.9k May 26, 2021
android video player base on ijkplayer

GiraffePlayer NOTE:this project is no longer update please using improved GiraffePlayer2 ,for flutter please visit GPlayer out of the box android vide

tom 683 Nov 14, 2022
Cache support for any video player with help of single line

Video cache support for Android Table of Content Why AndroidVideoCache? Features Get started Recipes Disk cache limit Listen caching progress Providin

Alexey Danilov 5.1k Dec 26, 2022
Convert video to GIF. Simple and fast.

Convert video to GIF. Simple and fast.

tasy5kg 24 Nov 26, 2022
[] Easily integrate Camera features into your Android app

Deprecated CameraView is deprecated. No more development will be taking place. Use Jetpack CameraX instead. CameraView This is not an official Google

Google 4.8k Dec 29, 2022
[] FFmpeg build for android random architectures with example jni

AndroidFFmpegLibrary This project aims to create working library providing playing video files in android via ffmpeg libraries. With some effort and N

AppUnite Sp. z o.o. Spk. 1k Mar 1, 2021
a system for building custom ffmpeg binaries for Android

This is a new android-ffmpeg project since it seems there were so many different ways of doing it, it was confusing. So here is my clean, easily chan

Guardian Project 967 Nov 12, 2022
Android Java wrapper around ffmpeg command line binary

FFMPEG Library for Android This project is a Java wrapper around an ffmpeg command line binary for use in Android applications. It depends on the andr

Guardian Project 555 Dec 5, 2022
script(s) to build ffmpeg for android, including support for RTMP (and OpenSSL)

android-ffmpeg-with-rtmp This repository contains script(s) to build ffmpeg for android with RTMP (and OpenSSL) support. Instructions Install the Andr

cine.io 234 Dec 28, 2022
Script and Instructions for building FFmpeg for Android

FFmpeg-Android Herein lies scripts and instructions for compiling FFmpeg for Android with RTMP support. Much thanks to Chris Ballinger and Liu Feipeng

David Brodsky 80 Dec 13, 2022
Convert audio files inside your Android app easily. Supported formats: AAC, MP3, M4A, WMA, WAV and FLAC.

AndroidAudioConverter Convert audio files inside your Android app easily. This is a wrapper of FFmpeg-Android-Java lib. Supported formats: AAC MP3 M4A

Adriel Café 1.3k Jan 5, 2023
A mod of the Twitch Android Mobile App adding BetterTTV and FrankerFaceZ emotes

A mod of the Twitch Android Mobile App adding BetterTTV and FrankerFaceZ emotes

null 377 Jan 2, 2023
Android MoveNet single human pose estimation by ncnn

Android MoveNet single human pose estimation by ncnn

FeiGeChuanShu 93 Dec 31, 2022
Free p2p cdn android github sdk to reduce video streaming costs of live and on demand video using webrtc by upto 90% and improve scalability by 6x - 🚀 Vadootv 🚀

Android p2p cdn sdk to distribute load and reduce costs(https://peervadoo.com) Vadootv is a p2p sdk integration to reduce your video streaming costs b

Vadootv 40 Oct 5, 2022
MovieStreaming - Movie Streaming is a streaming app and developed with Kotlin and Koin Dependency injection

MovieStreaming Movie Streaming is a streaming app and developed with Kotlin and

Amir Ali 3 Nov 19, 2022
Yet Another Video Player (or YAVP) is a Video Player for Android that is based on Googles ExoPlayer.

Yet Another Video Player Yet Another Video Player (or YAVP) is a Video Player for Android that is based on Googles ExoPlayer. Who Is YAVP For? First o

null 62 Dec 29, 2022
Compose-video-player - Video player for Android Compose powered by ExoPlayer

Compose Video Player Video player for Android Compose powered by ExoPlayer. Addi

Juan Pablo Herrera 22 Dec 13, 2022
A customized video view that will automatically pause video is user is not looking at device screen!!!!!

UserAwareVideoView Featured in: Medium What is this library for? UserAwareVideoView is a customizable VideoView that smartly play and pause the video

Keval Patel 51 Jun 27, 2021
Video Transcoder is an application which uses the open source program FFmpeg to transcode video files from one format to another.

Video Transcoder Do you want to encode videos on your phone into different formats, trim videos, or extract audio? Are you looking for a free solution

Branden Archer 358 Dec 30, 2022
A simple video calling application uses Firebase database and WebRTC API that enables you Peer-to-Peer Full-HD video and audio connection.

A simple video calling application uses Firebase database and WebRTC API that enables you Peer-to-Peer Full-HD video and audio connection.

Indrajit Sahu 10 Sep 27, 2022