Wie man ffserver von android fährt

Ich muss von einer Android-Kamera / Datei zu einem entfernten ffserver, der mein Video übertragen wird, streamen. Ich kann dies auf dem Desktop in Ubuntu tun, indem ich einen Befehl wie:

ffmpeg -f video4linux2 -s 640x480 -r 25 -i /dev/video0 http://192.168.0.20:8090/cam1.ffm 

Oder stream eine Datei wie folgt:

 ffmpeg -i /home/kev/share/movie.mp4 http://192.168.0.20:8090/cam1.ffm 

Also im Grunde möchte ich in der Lage sein, die oben von Android zu tun. Nach mehreren Recherchen das ist, was ich so weit gemacht habe – ich stieß auf diesen Link http://bambuser.com/opensource, von dem ich die ffmpeg Quelle heruntergeladen und gebaut habe. Der Build gibt mehrere Dinge aus: 1. shared libs [libavcodec, libavcore, libavdevice, libavfilter, libavformat, libavutil, libswscale] 2. ausführbare Dateien [ffmpeg, ffprobe]

Nicht sicher, wie man meine Funktionalität mit diesen Ressourcen steckt, das ist, was ich bisher versucht habe: 1. lud die libs in meine Aktivität mit System.loadLibrary () dann kopiert die ffmpeg ausführbare Datei in den Assets-Ordner, die zur Laufzeit ich kopiert auf meine Anwendung "Dateien" Verzeichnis dann setze ich Berechtigungen für die ausführbare Datei mit Runtime.getRuntime (). Exec (). Dann war der letzte Schritt, um es in Java mit der folgenden Aussage auszuführen:

 Runtime.getRuntime().exec("ffmpeg -i file:///android_asset/movie.mp4http://<server>:8090/cam1.ffm"); 

2. kopiert ffmpeg.c, die freigegebenen Bibliotheken und den Ordner "include", der vom Build zu meinem jni Ordner erstellt wurde und eine jni-Funktion hinzugefügt hat, die die main () – Funktion in ffmpeg.c umgibt. Mit diesem Ansatz habe ich mich selbst zu kopieren mehrere Header-Dateien aus der ffmpeg Quelle für die ndk-build zu folgen und ich bezweifle sehr, wenn dies der Weg zu gehen ist.

Die oben genannten zwei Ansätze havnt für mich gearbeitet, ich bin mir nicht sicher, wo ich falsch gehen, so jede Hilfe auf, wie man ein einfaches ffmpeg Streaming wie eine mp4-Datei von Android zu tun wäre sehr geschätzt.

  • Android: Aufnahme und Streaming zur gleichen Zeit
  • GStreamer auf Android
  • Problem beim Aufruf von ffmpeg.c zweimal, dass die App abstürzt?
  • Wie bewerbe ich die Video-Filterung in Android?
  • Wie kompiliere ich ffmpeg-2.2.2 auf Windows mit Cygwin und Android ndk r9c
  • FFmpeg konvertieren einzelne Bild in Video Android
  • Wie man die Leistung der Bitmap-Zeichnung auf Android erhöht
  • Wie benutzt man android ndk r9b, um FFMPEG für Android zu kompilieren
  • 3 Solutions collect form web for “Wie man ffserver von android fährt”

    Ich habe es funktioniert mit apporach 2, das ist, was ich tat. 1. kopiert ffmpeg.c, den Ordner "include" und die freigegebenen Bibliotheken in den Jni-Ordner meines Projekts.

    1. Modifizierte ffmpeg.c mit Bezug auf diesen Blog Post http://demo860.blogspot.com/2010/07/android-ffmpeg-dynamic-module-jni.html

    2. Es gab mehrere Fehler beim Aufbau mit ndk, also habe ich gerade die fehlenden Abhängigkeiten hinzugefügt, bis endlich der Build erfolgreich war.

    Zuerst würde die App starten und dann sofort beenden, das war wegen ein paar Dinge, die ich vergessen habe, dies zu tun, stellen Sie sicher, dass Sie das folgende getan haben, um sich einige Stunden und Haarausfall zu sparen: – legen Sie die Internet-Erlaubnis auf Manifest (wenn Medien Datei ist in sdcard, set Schreibe externe Speicherberechtigung und stelle sicher, dass die sdcard montiert ist) – stellen Sie sicher, dass der ffserver läuft und korrekt konfiguriert ist. Sie können durch Streaming von einem Desktop bestätigen – stellen Sie sicher, dass Sie die richtigen params übergeben haben

    Jetzt kann ich Stream von einer mp4-Datei in meiner SDK zu einem entfernten ffserver, havnt versucht Streaming von der Geräte-Kamera noch.

    Es scheint ein bisschen spät zu sein, um diese Frage zu beantworten, aber wenn du eine Lösung brauchst, hier ist …

    Nun, ich hatte einen Workaround auf das gleiche Problem, aber durch den ersten Ansatz, der mit einem kompilierten FFmpeg Binary statt JNI

    Zuerst, soweit es mir scheint, sind die von Bambuser bereitgestellten Bauten viel zu alt und FFmpeg hat einen bösartigen Entwicklungszyklus … Also würde ich lieber vorschlagen, eine eigene Binärdatei aus der neuesten FFmpeg Source zu erstellen …

    Hier ist ein Skript, das verwendet werden könnte, um ein zu generieren:

     #!/bin/bash echo "" echo " ********** FFmpeg Android Build ********** " echo "" NDK=$HOME/android-ndk-r8d PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 PLATFORM=$NDK/platforms/android-14/arch-arm PREFIX=$HOME/FFmpeg.Binaries.Android FFMPEG_BASE=$HOME/FFmpeg.Build if [ -d "$FFMPEG_BASE" ]; then rm -v -r -f $FFMPEG_BASE fi if [ -d "$PREFIX" ]; then rm -v -r -f $PREFIX fi mkdir $FFMPEG_BASE mkdir $PREFIX # x264 Installation echo "" echo " ********** libx264 Installation ********** " echo "" cd $FFMPEG_BASE git clone --depth 1 git://git.videolan.org/x264 cd $FFMPEG_BASE/x264 ./configure --prefix=$PREFIX \ --enable-static \ --enable-pic \ --disable-asm \ --disable-cli \ --host=arm-linux \ --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ --sysroot=$PLATFORM make sudo make install sudo ldconfig #FFmpeg Installation echo "" echo " ********** FFmpeg (Android) Installation ********** " echo "" cd $FFMPEG_BASE # git clone --depth 1 git://source.ffmpeg.org/ffmpeg cd $FFMPEG_BASE/ffmpeg ./configure --target-os=linux --prefix=$PREFIX \ --enable-cross-compile \ --enable-runtime-cpudetect \ --disable-asm \ --arch=arm \ --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \ --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ --disable-stripping \ --nm=$PREBUILT/bin/arm-linux-androideabi-nm \ --sysroot=$PLATFORM \ --enable-nonfree \ --enable-version3 \ --enable-gpl \ --disable-doc \ --enable-avresample \ --enable-demuxer=rtsp \ --enable-muxer=rtsp \ --disable-ffserver \ --disable-ffprobe \ --enable-ffmpeg \ --enable-ffplay \ --enable-libx264 \ --enable-encoder=libx264 \ --enable-decoder=h264 \ --enable-protocol=rtp \ --enable-hwaccels \ --enable-zlib \ --extra-cflags="-I$PREFIX/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \ --extra-ldflags="-L$PREFIX/lib" make -j4 install $PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o $PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libavresample/libavresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog -lx264 --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a # rm -v -r -f $FFMPEG_BASE clear echo "" echo "FFmpeg Android Build Successful..." echo "" ls -l -R $PREFIX exit 

    Für das obige Skript zu arbeiten, ist Android NDK erforderlich und könnte von hier heruntergeladen werden . Laden Sie die NDK herunter und extrahieren Sie in Ihr /home/<username> Verzeichnis oder passen Sie das Skript nach Ihren Bedürfnissen an …

    Und auch vermeiden Sie die file:// Protokoll in der Kommandozeile, geben Sie einfach den absoluten Pfad der Eingabedatei an. Und versuchen Sie, die Ausgabe aus dem FFmpeg-Prozess von gettin 'Instanzen seiner stdout und stderr Streams zu protokollieren …

    Sie müssen keine freigegebenen Bibliotheken kopieren und Ordner einfügen. Sie können stattdessen die Funktion "PREBUILD_SHARED_LIBRARY" von Andriod.mk verwenden.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.