web-dev-qa-db-ja.com

作業ディレクトリ:null環境:null

Ffmpeg.so on Android作業ディレクトリを取得しています:null環境:nullエラー。

try {
    Process p = Runtime.getRuntime().exec("/data/data/com.example.foo/files/ffmpeg -f image2 -i "
+ Environment.getExternalStorageDirectory().getAbsolutePath() + "/img/b%d.jpg " 
+ Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/a444.mp4");   
} catch (IOException e) {
    e.printStackTrace();
}

エラーログ

04-09 01:50:45.683: I/Adreno-EGL(18393): <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I0404c4692afb8623f95c43aeb6d5e13ed4b30ddbDate: 11/06/13
04-09 01:50:45.713: D/OpenGLRenderer(18393): Enabling debug mode 0
04-09 01:53:56.487: D/dalvikvm(18551): Trying to load lib /data/app-lib/com.example.sodeneme-1/libffmpeg.so 0x423d7d00
04-09 01:53:56.487: D/dalvikvm(18551): Added shared lib /data/app-lib/com.example.sodeneme-1/libffmpeg.so 0x423d7d00
04-09 01:53:56.487: D/dalvikvm(18551): No JNI_OnLoad found in /data/app-lib/com.example.sodeneme-1/libffmpeg.so 0x423d7d00, skipping init
04-09 01:53:56.537: W/System.err(18551): Java.io.IOException: Error running exec(). Command: [/data/data/com.example.sodeneme/files/ffmpeg, -f, image2, -i, /storage/emulated/0/img/b%d.jpg, /storage/emulated/0/DCIM/Camera/a444.mp4] Working Directory: null Environment: null
04-09 01:53:56.537: W/System.err(18551):    at Java.lang.ProcessManager.exec(ProcessManager.Java:211)
04-09 01:53:56.537: W/System.err(18551):    at Java.lang.Runtime.exec(Runtime.Java:173)
04-09 01:53:56.537: W/System.err(18551):    at Java.lang.Runtime.exec(Runtime.Java:246)
04-09 01:53:56.537: W/System.err(18551):    at Java.lang.Runtime.exec(Runtime.Java:189)
04-09 01:53:56.537: W/System.err(18551):    at com.example.sodeneme.MainActivity.onCreate(MainActivity.Java:40)
04-09 01:53:56.537: W/System.err(18551):    at Android.app.Activity.performCreate(Activity.Java:5231)
04-09 01:53:56.537: W/System.err(18551):    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1087)
04-09 01:53:56.537: W/System.err(18551):    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2159)
04-09 01:53:56.537: W/System.err(18551):    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2245)
04-09 01:53:56.537: W/System.err(18551):    at Android.app.ActivityThread.access$800(ActivityThread.Java:135)
04-09 01:53:56.537: W/System.err(18551):    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1196)
04-09 01:53:56.537: W/System.err(18551):    at Android.os.Handler.dispatchMessage(Handler.Java:102)
04-09 01:53:56.537: W/System.err(18551):    at Android.os.Looper.loop(Looper.Java:136)
04-09 01:53:56.537: W/System.err(18551):    at Android.app.ActivityThread.main(ActivityThread.Java:5017)
04-09 01:53:56.537: W/System.err(18551):    at Java.lang.reflect.Method.invokeNative(Native Method)
04-09 01:53:56.537: W/System.err(18551):    at Java.lang.reflect.Method.invoke(Method.Java:515)
04-09 01:53:56.537: W/System.err(18551):    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:779)
04-09 01:53:56.537: W/System.err(18551):    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:595)
04-09 01:53:56.537: W/System.err(18551):    at dalvik.system.NativeStart.main(Native Method)
04-09 01:53:56.547: W/System.err(18551): Caused by: Java.io.IOException: No such file or directory
04-09 01:53:56.547: W/System.err(18551):    at Java.lang.ProcessManager.exec(Native Method)
04-09 01:53:56.547: W/System.err(18551):    at Java.lang.ProcessManager.exec(ProcessManager.Java:209)
04-09 01:53:56.547: W/System.err(18551):    ... 18 more
04-09 01:53:56.577: I/Adreno-EGL(18551): <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I0404c4692afb8623f95c43aeb6d5e13ed4b30ddbDate: 11/06/13
04-09 01:53:56.607: D/OpenGLRenderer(18551): Enabling debug mode 0

許可

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.READ_INTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
18
Mert

この許可をAndroidManifest.xmlファイルに追加する必要があるかもしれません:

Android.permission.WRITE_EXTERNAL_STORAGE
2
ChuongPham

/data/data/com.example.foo/files/ffmpegファイルには正しいファイル許可があります。

次のコマンドを使用して、ファイルのアクセス許可を確認できます。

String[] command = new String[]{"/system/bin/ls", "-l",
                                "/data/data/com.example.foo/files/ffmpeg" };
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(
                    new InputStreamReader(process.getInputStream()));
int read;

String output = "";

String line;
while ((line = reader.readLine()) != null) {
    output.concat(line + "\n");
    Log.w("myApp", "[[output]]:" + line);
}  
reader.close();
process.waitFor(); 

出力は次のようなものになります(実際の許可に応じて、この場合の許可は777です)。

[[output]]:-rwxrwxrwx u0_a67   u0_a67     254460 2015-03-02 17:12 ffmpeg

以下のコマンドを使用して、許可を744に設定できます。

String[] command = new String[]{"/system/bin/chmod", "744",
                                "/data/data/com.example.foo/files/ffmpeg" };

このコマンドを外部のアクティビティ(たとえば、サービスから)から実行する場合、許可は777(744ではなく)でなければなりません

2
Shashank Singla

Ffmpeg-Androidプロジェクトで作業しているときに、この同じ問題が自然に発生しました。私はすでに他の人が言及したすべての許可セットを持っていて、この問題は過去にありませんでした。

私は元のビルドに戻り、正常に動作してから最新バージョンを再構築しましたが、私の場合の解決策は簡単でしたClean and Rebuild ..

必死に感じているなら試してみてください!

0
Mete

私の場合、次の例のように「sh -c」を追加する必要があります。

sh -c shellcommand  

それが役に立てば幸い。

デビッド

0
us_david