Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
MobileVlcKit compiling Failed
25 février 2016, par BittooHi 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 RakatanI 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 Zhangeveryone: 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
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)
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 David542I 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 useffmpeg
in scripts and that command will be recognized? -
ffmpeg - How is avcodec_decode_video2 works ?
25 février 2016, par BryceAs 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?