Android - Stream camera as RTMP stream

33,552

Solution 1

In the accepted answer of the question you linked someone suggests using JavaCV.

It requires API 8 or newer and features a FFmpegFrameRecorder class.

Link to github:

https://github.com/bytedeco/javacv

They even have a full sample of capturing flv (it's rather large so I won't paste it here): https://github.com/bytedeco/javacv/blob/master/samples/RecordActivity.java

In your case you probably need to replace:

private String ffmpeg_link = "/mnt/sdcard/stream.flv";

with

private String ffmpeg_link = "rtmp://<server>:<port>/stream";

Solution 2

If you can publish from your android device using a protocol supported by ffmpeg (see the list of protocols supported) you could use the following command to transmit the video to your server :

ffmpeg -re -i <input link> -vcodec h264 -ar 44100 -f flv "rtmp://<host>/<publication>"

Solution 3

You should take a look at spydroid; it does exactly what you are looking for. Their website may be found here: https://code.google.com/p/spydroid-ipcamera/

They provide a library that you can use, along with an explanation of the various streaming options and some code examples. Said information may be found here: https://github.com/fyhertz/libstreaming

Share:
33,552
Gooey
Author by

Gooey

Interested in app and web development

Updated on July 09, 2022

Comments

  • Gooey
    Gooey almost 2 years

    I want to capture the camera stream from an Android device and stream it to a server with RTMP (the server is out of my control). I have not figured out yet how to create a stream of data from the camera itself, but that is for a later concern.

    At the moment there are two problems: I wish to support API 9+ and RTMP is not native supported by Android.

    I've taken a look around and found this SO post Convert video Input Stream to RTMP and https://github.com/yixia/VitamioBundle. The former suggested a library that has little to no documentation. The latter probably supports it (?), but it requires API 14+.

    Are there decent examples or libraries out there, that that supports RTMP streaming from an Android device? I've also read something about converting RTSP or FFMPEG, if that is a viable way then I guess it will suffice too.

    Edit 1:

    I've found this library (It has a lot of resemblance to the one mentioned above) and tried to work with. I imported it in Android Studio and wrote some code, but it appears to crash internally with a java.lang.NoClassDefFoundError RTSP Codec Factory error. So apparently that doesn't work too well on Android.

    Also, I've encountered several times Adobe air. I do not want to code in Action Script 3 (AS3) as this library will just be a (small) part of a native app. If Adobe Air has a library which I am unaware of, then I would happily integrate it if that is possible.

  • Gooey
    Gooey about 9 years
    I will definitely take a look.
  • Gooey
    Gooey about 9 years
    Are you sure this supports RTMP? I only find RT(S)P in the list (wiki). Or can you use these? I am new to streaming stuff, so I don't really know for sure.
  • Gooey
    Gooey about 9 years
    Could you elaborate more on this? How would you run that command from inside an android app? This app should send a stream using RTMP to a server that is out of his control.
  • thomas
    thomas about 9 years
    Sorry, I thought you were the owner of the server. You could try this repository github.com/cine-io/android-ffmpeg-with-rtmp but I don't know if it works well. Otherwise you could also develop an AIR application, it works!
  • Gooey
    Gooey about 9 years
    I do not want to code in AS3, so I guess AIR will not do. Unless they have a library you can add?
  • Gooey
    Gooey about 9 years
    This looks promising. I tried the example but getting a java.lang.ExceptionInInitializerError caused by Couldn't load jniopencv_core: findLibrary returned null error.
  • aergistal
    aergistal about 9 years
    Did you deploy all libs? Look around SO and Google Code (rip) because there are some related issues
  • farhang67
    farhang67 over 8 years
    It works for me with nginx rtmp server but it only streams a black video. I think it has codec issue. I'm using recorder.setVideoCodec() to set codec ...
  • farhang67
    farhang67 over 8 years
    finally I solved black video issue by setting RECORD_LENGTH = 0 in RecordActivity class.
  • DAC84
    DAC84 about 7 years
    I tried to sent RTMP stream to RED5 server and its work. The live stream is not getting stored in the RED5 server as flv file. Do u have any idea about the changes to be done to store the stream in Red5 server. Thanks in advance.