avcodec_find_encoder(AV_CODEC_ID_H264) gibt null zurück

Baue ich ein android-Anwendung, die verschlüsselt aufgenommene Bild von der Kamera-Vorschau und später entschlüsseln. Ich bin mit dem ffmpeg-Bibliothek zum codieren und decodieren. Bauen statische Bibliothek mit x264 habe ich dieses tutorial verwendet. http://dl.dropbox.com/u/22605641/ffmpeg_android/main.html. Als source-code von ffmpeg, wenn ich das eine heruntergeladen aus dem link im tutorial kann ich es eingebaut, aber kann Sie nicht bauen-Bibliothek, wenn ich Quellcode hier herunterladen git clone git://source.ffmpeg.org/ffmpeg.git-ffmpeg. Ich habe in integrierten Bibliothek in ubuntu und in windows 7 in Eclipse. Da Brauch ich nur h264-encoder und-decoder benutzt habe ich folgenden code für ffmpeg, leicht abgewandelt von der Anleitung.

#!/bin/bash

NDK=~/Documents/android-ndk-r8e
PLATFORM=$NDK/platforms/android-8/arch-arm
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
PREFIX=/home/android-ffmpeg

function build_one
{
    ./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 \
    --disable-everything \
    --enable-gpl \
    --disable-doc \
    --enable-avresample \
    --disable-ffplay \
    --disable-ffserver \
    --enable-ffmpeg \
    --disable-ffprobe \
    --enable-avcodec \
    --enable-libx264 \
    --enable-encoder=libx264 \
    --enable-encoder=libx264rgb \
    --enable-decoder=h263 \
    --enable-decoder=h264 \
    --enable-decoder=svq3 \   
    --enable-zlib \
    --enable-gpl \
    --enable-pic \
    --disable-devices \
    --disable-avdevice \
    --extra-cflags="-I/home/android-ffmpeg/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
    --extra-ldflags="-L/home/android-ffmpeg/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
}

build_one

Nach Aufbau der Bibliothek, die ich in der Lage gewesen zu bauen android-ndk. Ein kleiner Teil meiner JNI code ist hier.

JNIEXPORT jint JNICALL Java_com_example_testjava_TestjniActivity_initencoder(JNIEnv* env,jobject obj){

    av_register_all();
    avcodec_register_all();
    codec = avcodec_find_encoder(AV_CODEC_ID_H264);
    if (!codec) {
      __android_log_write(ANDROID_LOG_INFO, "debug", "not found");                
       return -1;
    }
.
.
.
}

Wenn ich mein java-source-code, der Aufrufe initencoder() erhalte ich -1 als Rückgabewert und logcat druckt "nicht gefunden". Das bedeutet, dass avcodec_find_encoder() gibt null zurück, und wenn der Zustand ist ok. Ich weiß nicht, was falsch ist. Warum ist diese Funktion null zurückgeben? Ich habe gesucht, eine Menge, aber fand keine Lösung, könnte mich auf richtige Richtung. einige, sagt zu avcodec_init(). Aber ndk-build-Befehl schlägt fehl, und zeigt Fehlermeldung undefined reference to 'avcodec_init()'. Ich habe angefangen mit Bibliothek bauen, weil ich dachte, vielleicht habe ich Unrecht getan, die erste Etappe. Habe ich einen Fehler in der Bibliothek Gebäude wie nicht zu aktivieren, die Dinge, die ich sollte? Bitte helfen Sie mir hier. Das ist ziemlich dringend für mich.

  • Bitte Bearbeiten Sie Ihre post, so dass es enthält eine spezielle Frage. Dadurch wird es einfacher für uns, Ihnen zu helfen.
  • Ich habe das exakt gleiche Problem. Soweit ich weiß, avcodec_register_all() sollte aufgepasst habe, aber es hat nicht. Funktioniert gut auf Ubuntu, aber funktioniert nicht auf Android. Sie waren in der Lage, das Problem zu lösen?
  • Das gleiche Problem.Ist jemand lösen?
  • Scheint h264 ist nur ein decoder, kein encoder.
  • Habe das gleiche Problem auf Android, mit h264 zusammengestellt als encoder.
InformationsquelleAutor Monjura Rumi | 2013-04-04
Schreibe einen Kommentar