我正尝试使用ffmpeg二进制文件,并通过android中的本地linux命令调用它。大多数命令工作正常,但问题是,当我需要传递一个http url作为-i选项的输入时,我得到“没有这样的文件或目录”的网址。然而,url是存在的,并且在mac上运行SAME命令可以按预期完成这项工作。FFMPEG“no such file or directory”on Android
这里是我的ffmpeg的编译编译配置:
./configure \
$DEBUG_FLAG \
--arch=arm \
--cpu=cortex-a8 \
--target-os=linux \
--enable-runtime-cpudetect \
--prefix=$prefix \
--enable-pic \
--disable-shared \
--enable-static \
--cross-prefix=$NDK_TOOLCHAIN_BASE/bin/$NDK_ABI-linux-androideabi- \
--sysroot="$NDK_SYSROOT" \
--extra-cflags="-I../x264 -mfloat-abi=softfp -mfpu=neon" \
--extra-ldflags="-L../x264" \
\
--enable-version3 \
--enable-gpl \
\
--disable-doc \
--enable-yasm \
\
--enable-decoders \
--enable-nonfree \
--enable-encoders \
--enable-muxers \
--enable-demuxers \
--enable-parsers \
--enable-protocols \
--enable-protocol=http \
--enable-filters \
--enable-avresample \
\
--disable-indevs \
--enable-indev=lavfi \
\
--enable-hwaccels \
\
--enable-ffmpeg \
--enable-ffplay \
--enable-libmp3lame \
--enable-network \
\
--enable-libx264 \
--enable-libfaac \
--enable-zlib
其基于关闭此项目:https://github.com/guardianproject/android-ffmpeg-java
命令是沿该线的东西:
ffmpeg -i "http://someurl" -f mp3 -ab 192000 -vn demoo.mp3
的想法是从视频下载音轨并将其编码为mp3。我明确添加了多个启用协议选项,但似乎没有任何工作。我也尝试了一种替代配置,删除enable-gpl
以下的所有内容,以确保没有任何冲突,但它引发了相同的错误。如果我给它一个正常的文件系统路径,它工作正常。
这里下面的评论是命令的准确输出和输出:
03-25 00:22:08.806: VERBOSE/FFMPEG(16491): /data/data/org.ffmpeg.android/app_bin/ffmpeg -i "http://r6---sn-gvbxgn-tt1d.c.youtube.com/videoplayback?ipbits=8&cp=U0hVSVJLV19KUUNONV9KRUFJOnQ0STMtb0JXc0py&sparams=cp%2Cid%2Cip%2Cipbits%2Citag%2Cratebypass%2Csource%2Cupn%2Cexpire&id=c0045acebe0c3341&upn=IVAGxSD1hE0&source=youtube&ratebypass=yes&mv=m&key=yt1&expire=1364209857&itag=18&ms=au&ip=99.234.119.90&mt=1364185033&fexp=923418%2C901802%2C906383%2C902000%2C919512%2C913605%2C931202%2C900821%2C900823%2C931203%2C931401%2C908529%2C919373%2C930803%2C920201%2C929602%2C930101%2C930603%2C926403%2C900824%2C910223&sver=3&newshard=yes&signature=838AEB4650D8353B70DBC49341E0C40706DC6153.297639FD70A7F9710F29AE9E278A4FC4A32E0C67" -f mp3 -ab 192000 -vn /data/data/org.ffmpeg.android/files/demoooo.mp3 -loglevel debug
03-25 00:22:08.956: DEBUG/ffmpeg(16491): Process exited with code:1
03-25 00:22:08.966: DEBUG/ffmpeg(16491): Shell output:ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
03-25 00:22:08.976: DEBUG/ffmpeg(16491): Shell output: built on Mar 24 2013 02:24:38 with gcc 4.6 20120106 (prerelease)
03-25 00:22:08.976: DEBUG/ffmpeg(16491): Shell output: configuration: --arch=arm --cpu=cortex-a8 --target-os=linux --enable-runtime-cpudetect --prefix=/data/data/info.guardianproject.ffmpeg/app_opt --enable-pic --disable-shared --enable-static --cross-prefix=/Users/feribg/Dev/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi- --sysroot=/Users/feribg/Dev/android-ndk-r8d/platforms/android-3/arch-arm --extra-cflags='-I../x264 -mfloat-abi=softfp -mfpu=neon' --extra-ldflags=-L../x264 --enable-version3 --enable-gpl
03-25 00:22:08.976: DEBUG/ffmpeg(16491): Shell output: libavutil 51. 54.100/51. 54.100
03-25 00:22:08.976: DEBUG/ffmpeg(16491): Shell output: libavcodec 54. 23.100/54. 23.100
03-25 00:22:08.976: DEBUG/ffmpeg(16491): Shell output: libavformat 54. 6.100/54. 6.100
03-25 00:22:08.986: DEBUG/ffmpeg(16491): Shell output: libavdevice 54. 0.100/54. 0.100
03-25 00:22:08.996: DEBUG/ffmpeg(16491): Shell output: libavfilter 2. 77.100/2. 77.100
03-25 00:22:08.996: DEBUG/ffmpeg(16491): Shell output: libswscale 2. 1.100/2. 1.100
03-25 00:22:08.996: DEBUG/ffmpeg(16491): Shell output: libswresample 0. 15.100/0. 15.100
03-25 00:22:08.996: DEBUG/ffmpeg(16491): Shell output: libpostproc 52. 0.100/52. 0.100
03-25 00:22:08.996: DEBUG/ffmpeg(16491): Shell output:"http://r6---sn-gvbxgn-tt1d.c.youtube.com/videoplayback?ipbits=8&cp=U0hVSVJLV19KUUNONV9KRUFJOnQ0STMtb0JXc0py&sparams=cp%2Cid%2Cip%2Cipbits%2Citag%2Cratebypass%2Csource%2Cupn%2Cexpire&id=c0045acebe0c3341&upn=IVAGxSD1hE0&source=youtube&ratebypass=yes&mv=m&key=yt1&expire=1364209857&itag=18&ms=au&ip=99.234.119.90&mt=1364185033&fexp=923418%2C901802%2C906383%2C902000%2C919512%2C913605%2C931202%2C900821%2C900823%2C931203%2C931401%2C908529%2C919373%2C930803%2C920201%2C929602%2C930101%2C930603%2C926403%2C900824%2C910223&sver=3&newshard=yes&signature=838AEB4650D8353B70DBC49341E0C40706DC6153.297639FD70A7F9710F29AE9E278A4FC4A32E0C67": No such file or directory
很可能ffmpeg二进制文件太旧了。你能发布完整的错误输出吗? – slhck 2013-03-24 16:34:27
将你的过程分成两个步骤。 Http获取输入文件并将其存储在设备上。然后使用本地输入文件正常ffmpeg。 – 2013-03-24 19:52:17
如果你计划分发应用程序,IMO - 你应该使用普通的JNI接口,如git中的Guardian。 CLI易碎。如果你需要去CLI路由,你可以看看使用Busybox/WGET获取文件,然后是正常的CLI ffmpeg。您可以将它放在bash脚本中,以在设备上的CLI上运行脚本。 – 2013-03-24 19:58:04