Newest 'ffmpeg' Questions - Stack Overflow

http://stackoverflow.com/questions/tagged/ffmpeg

Les articles publiés sur le site

  • MobileVlcKit compiling Failed

    25 février 2016, par Bittoo

    Hi i am trying to use MobileVLCKit.For that i am using cocoapads like below pod 'MobileVLCKit'

    pod 'MobileVLCKit'
    

    then i compile my project it is showing plenty of errors below is my error Log

      NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    
    "std::basic_string, std::allocator >::find(wchar_t const*, unsigned long, unsigned long) const", referenced from:
      TagLib::String::find(TagLib::String const&, int) const in MobileVLCKit(tstring.cpp.o)
      TagLib::String::split(TagLib::String const&) const in MobileVLCKit(tstring.cpp.o)
    
      dash::mpd::BasicCMParser::parseCommonAttributesElements(dash::xml::Node*, dash::mpd::CommonAttributesElements*, dash::mpd::CommonAttributesElements*) const in MobileVLCKit(libdash_plugin_la-BasicCMParser.o)
    

    I tried with architecture x86_64 but still showing lot of errors. I don't know how to clear these errors.so can any body please help me

  • Low performance when extracting frames from video

    25 février 2016, par Rakatan

    I am writing a video processing application and have hit a bit of a snag.

    The idea is to extract frames (images) from a video file, process them on the GPU and then write them back to a new video file.

    So far i have been successful in doing this using JavaCV.

    The only problem is that extracting the frames takes a very long time (in the 200ms region). This is way to much, as added to the GPU processing time and the time it takes to write to a new file, it results in a total process duration of about 700ms per frame.

    This is how i grab the frames:

     FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(videoLocation);
     frameGrabber.start();
    
     frameGrabber.setFrameNumber(frameNumber);
     frame = frameGrabber.grabImage();
    

    Pretty standard, nothing special, and it works. I am able to process the frame, convert it to a bitmap, etc...

    As i have said before, the bottom two instructions (setting the frame number and grabbing the image) take a very very long time. Writing the frames also takes a fair bit.

    I would greatly appreciate if anyone has any input regarding this issue. Maybe i'm not setting up something correctly, maybe there is another solution that is faster.

  • FFmpeg support for libstagefright hardware decoding

    25 février 2016, par Ming Zhang

    everyone: I am new to ffmpeg. Recently I am working on project to port ffmpeg to android device. At the beginning, I compiled ffmpeg to shared libs(.so files) in a very normal way following some guides on Internet, load them into my android app. It works perfectly.

    Now I want ffmpeg to use libstagefright to fulfill HW decoding. The problem is, I can compile the .so libs, but when I launch my app and load those .so libs, there is always a java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1314]: 114 cannot locate '_ZN7android11MediaBufferC1Ej'

    I stuck there for a few days. Does anyone encountered any similar problems before? It would be great if someone can give me some hint about this error.

    My steps: 1. Compile ffmpeg-2.1.4 souce code to .so shared libs. I use the build_libstagefright script to do this, and make some modification based on some guides from Internet.

    #!/bin/bash
    #export NDK=/home/mingzhang/android/android-ndk-r9c
    export NDK=/home/mingzhang/android/android-ndk-r7
    if [ "$NDK" = "" ]; then
        echo NDK variable not set, assuming ${HOME}/android-ndk
        export NDK=${HOME}/android-ndk
    fi
    
    echo "Fetching Android system headers"
    git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_base.git ../android-source/frameworks/base
    git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_av.git ../android-source/frameworks/av
    git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_native.git ../android-source/frameworks/native
    git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_hardware_libhardware.git ../android-source/hardware/libhardware
    git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_system_core.git ../android-source/system/core
    
    echo "Fetching Android libraries for linking"
    # Libraries from any froyo/gingerbread device/emulator should work
    # fine, since the symbols used should be available on most of them.
    #if [ ! -d "../android-libs" ]; then
    #    if [ ! -f "../update-cm-7.0.3-N1-signed.zip" ]; then
    #        wget http://download.cyanogenmod.com/get/update-cm-7.0.3-N1-signed.zip -P../
    #    fi
    #    unzip ../update-cm-7.0.3-N1-signed.zip system/lib/* -d../
    #    mv ../system/lib ../android-libs
    #    rmdir ../system
    #fi
    
    SYSROOT=$NDK/platforms/android-9/arch-arm
    # Expand the prebuilt/* path into the correct one
    #TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64
    TOOLCHAIN=/home/mingzhang/android/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
    export PATH=$TOOLCHAIN/bin:$PATH
    ANDROID_SOURCE=../android-source
    ANDROID_LIBS=../android-libs
    ABI="armeabi-v7a"
    CC=$TOOLCHAIN/bin/arm-linux-androideabi-gcc
    #CC=$TOOLCHAIN/bin/arm-eabi-gcc-4.4.3
    NM=$TOOLCHAIN/bin/arm-linux-androideabi-nm
    #NM=$TOOLCHAIN/bin/arm-eabi-nm
    
    rm -rf ../build/stagefright
    mkdir -p ../build/stagefright
    
    ADDI_CFLAGS="-marm"
    DEST=../build/stagefright
    DEST="$DEST/$ABI"
    
    FLAGS="--target-os=linux --arch=arm --cpu=armv7-a --cross-prefix=arm-linux-androideabi- --cc=$CC --nm=$NM"
    #FLAGS="--target-os=linux --arch=arm --cpu=armv7-a --cross-prefix=arm-eabi- --cc=$CC --nm=$NM"
    FLAGS="$FLAGS --sysroot=$SYSROOT"
    #FLAGS="$FLAGS --disable-avdevice --disable-decoder=h264 --disable-decoder=h264_vdpau --enable-libstagefright-h264"
    FLAGS="$FLAGS --enable-shared --disable-demuxers --disable-muxers --disable-parsers --disable-avdevice --disable-filters --disable-programs --disable-encoders --disable-decoders --disable-decoder=h264 --disable-decoder=h264_vdpau --enable-decoder=libstagefright_h264 --enable-libstagefright-h264 \
        --enable-asm \
        --enable-neon \
        --enable-cross-compile \
        --enable-gpl \
        --disable-static \
        --enable-memalign-hack"
    
    EXTRA_CFLAGS="-I$DEST/include"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/native/include"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/native/include/media/openmax"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/av/include"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/base/include -I$ANDROID_SOURCE/system/core/include"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/hardware/libhardware/include"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/base/media/libstagefright"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/base/include/media/stagefright/openmax"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK/sources/cxx-stl/gnu-libstdc++/4.6/include -I$NDK/sources/cxx-stl/gnu-libstdc++/4.6/libs/$ABI/include"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK/sources/cxx-stl/stlport/stlport"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -march=armv7-a -mfloat-abi=softfp -mfpu=neon -marm -mtune=cortex-a8"
    EXTRA_CFLAGS="$EXTRA_CFLAGS -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -D_STLP_USE_NEWALLOC"
    
    EXTRA_LDFLAGS="-Wl,--fix-cortex-a8 -L$ANDROID_LIBS -Wl,-rpath-link,$ANDROID_LIBS -L$NDK/sources/cxx-stl/gnu-libstdc++/4.6/libs/$ABI -static-libstdc++"
    EXTRA_CXXFLAGS="-Wno-multichar -fno-exceptions -fno-rtti"
    FLAGS="$FLAGS --prefix=$DEST"
    
    mkdir -p $DEST
    
    echo $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-cxxflags="$EXTRA_CXXFLAGS" > $DEST/info.txt
    ./configure $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-cxxflags="$EXTRA_CXXFLAGS" | tee $DEST/configuration.txt
    [ $PIPESTATUS == 0 ] || exit 1
    make clean
    #make -j4 || exit 1
    #make -j4
    make install || exit 1
    
    1. Copy the compiled include and lib directories to my android-ndk-r7/sources/ffmpeg-2.1.4/android/arm directory. The Android.mk file under this directory is.

      LOCAL_PATH:= $(call my-dir)

      include $(CLEAR_VARS) LOCAL_MODULE:= libavcodec LOCAL_SRC_FILES:= lib/libavcodec-55.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

      include $(CLEAR_VARS) LOCAL_MODULE:= libavformat LOCAL_SRC_FILES:= lib/libavformat-55.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

      include $(CLEAR_VARS) LOCAL_MODULE:= libswscale LOCAL_SRC_FILES:= lib/libswscale-2.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

      include $(CLEAR_VARS) LOCAL_MODULE:= libavutil LOCAL_SRC_FILES:= lib/libavutil-52.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

      include $(CLEAR_VARS) LOCAL_MODULE:= libavfilter LOCAL_SRC_FILES:= lib/libavfilter-3.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

      include $(CLEAR_VARS) LOCAL_MODULE:= libwsresample LOCAL_SRC_FILES:= lib/libswresample-0.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

    2. Under the jni directory of my android app, the Android.mk is.

      LOCAL_PATH:= $(call my-dir)
      include $(CLEAR_VARS)
      
      LOCAL_MODULE    := libripple
      #LOCAL_CFLAGS    := -Werror
      LOCAL_SRC_FILES := entrypoint.cpp scene.cpp
      LOCAL_LDLIBS    := -llog -lGLESv2 -lm
      
      include $(BUILD_SHARED_LIBRARY)
      
      include $(CLEAR_VARS)
      
      LOCAL_MODULE    := myfflib
      LOCAL_SRC_FILES := fflib.c
      LOCAL_LDLIBS := -L/home/mingzhang/ffmpeg_android/android-libs -llog -ljnigraphics -lz -landroid -ldl -lm -llog -lgcc -lc -lstagefright -lmedia -lutils -lbinder #-lstdc++
      LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil libutils libstagefright libbinder libmedia libstdc++-6
      
      include $(BUILD_SHARED_LIBRARY)
      $(call import-module,ffmpeg-2.1.4/android/arm)
      

      And the Application.mk is:

      APP_ABI=armeabi-v7a
      #APP_STL=gnustl_static
      APP_STL=stlport_static
      

    I am not sure what else materials you need, if anything is missing, please let me know, I will upload it. Thank you guys very much!!!

  • Preferred way to make script directly executable

    25 février 2016, par David542

    I can run ffmpeg by executing the executable file in ~/bin:

    $ ~/bin/ffmpeg
    

    To be able to just do $ ffmpeg, one option would be to create an alias in my '~.bash_profile or $ sudo ln -s ~/bin/ffmpeg /usr/bin/ffmpeg. Is there a better way to do this, so that I can use ffmpeg in scripts and that command will be recognized?

  • ffmpeg - How is avcodec_decode_video2 works ?

    25 février 2016, par Bryce

    As we know, one AVPacket contains one AVFrame, and we can use int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, const AVPacket *avpkt) to decode a packet to frame, if it works, got_frame_ptr will set with nonzero, otherwise, it's zero.

    int len = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
    if ( len < 0 )
    {
        fprintf(stderr, "Problems decoding frame\n");
        return 1;
    }
    
    fprintf(stderr, "len = %d\n", len );
    
    // Did we get a video frame?
    if(frameFinished) {
        dosomething();
    }
    

    I wanna konw how it would fail(got_frame_ptr is 0), is the AVPacket we got error or something else?