2

我想使用FFMPEG将图像转换为android中的视频,现在我成功编译了库,还得到了Libffmpeg.so。使用平台:UBUNTU,Eclipse 我的问题是 - 当我使用这个库命令时,我也通过 Java 代码将视频转换为图像,我的意思是通过我的 Activity 我得到了错误 - JAVA.IO.EXCEPTION.Enable 来执行 .Exec() 命令但是如果我通过 CMD 执行此命令,然后我的视频文件创建成功。我想知道它背后的问题是什么,我从 2 天开始搜索,但找不到解决方案,我认为它的问题是在 android.Plzzz 中执行权限的问题,或者告诉我是否有可能android 使用 FFMPEG 制作视频文件。

代码

public class Mpeg extends Activity {

String cmd;

static {

    System.loadLibrary("ffmpeg");

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mpeg);
    File mf = Environment.getExternalStorageDirectory();




    String install="$adb push ./asl-native /sdcard/asl-native";

    String ins="$adb shell /system/bin/chmod 0777 /sdcard/asl-native";

    String start="$adb shell /system/bin/chmod 0777 /sdcard/asl-native";
    String str="$adb shell /system/bin/chmod 0777 /sdcard/asl-native";

    try{
        Process p = Runtime.getRuntime().exec(install);

        p = Runtime.getRuntime().exec(ins);

        p = Runtime.getRuntime().exec(start);

        p = Runtime.getRuntime().exec(str);


        Log.e("filee name", "goodddddd"+ install);
        Log.e("full command", "goodddddd"+ ins);

        }
        catch (Exception e) {
            Log.e("image", "exception");
        } 



    String livestream = mf.getAbsoluteFile()+"/smile.png";
    Log.e("image", "imageeeeeeeee " + livestream);

    String folderpth = mf.getAbsoluteFile()+"/RABBA.MP3";




    Log.e("Test", "songggggggggg " + folderpth);


    String output=mf.getAbsoluteFile()+"/plztest.mp4";;

    //String output = new File(Environment.getExternalStorageDirectory(), "plzz.mp4").getAbsolutePath();
    Log.e("Test", "outputttttt " + output);

    cmd= "ffmpeg -i "+ livestream +" -i "+ folderpth +" -acodec copy "+ output;

     Log.e("chck plzzzzz", "after "+ cmd);

    //String jaiho="ffmpeg -i image8.jpg -i file.m4a -acodec copy test.mp4";

    // Boolean heloo=isDeviceRooted_BySu();

     //Log.e("check file", "after "+ heloo);


    Button   run=(Button)findViewById(R.id.btn);


        run.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // Perform action on click

                 try {
                     Execute();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
             }
         });


    /*

     try{

    Process p = Runtime.getRuntime().exec(cmd);
    Log.e("check file", "main fileeee ");

    }
    catch (IOException e) {
        throw new RuntimeException(e);

    } 
    */

 }


 public void Execute() throws IOException, InterruptedException{


       Process process=Runtime.getRuntime().exec(cmd);
        // process = pb.command(com).redirectErrorStream(true).start();


    }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.mpeg, menu);
    return true;
}


public static boolean isDeviceRooted_BySu() {
    try {
        Log.d("BySu", "BySu");
        Process p = Runtime.getRuntime().exec("su");
        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}

}


日志输出

06-05 17:58:10.686: D/dalvikvm(1189): Trying to load lib /data/data/com.example.myfmpeg /lib/libffmpeg.so 0x412a5cf0
06-05 17:58:10.756: I/dalvikvm(1189): threadid=3: reacting to signal 3
06-05 17:58:10.955: D/dalvikvm(1189): Added shared lib /data/data/com.example.myfmpeg/lib/libffmpeg.so 0x412a5cf0
06-05 17:58:10.955: D/dalvikvm(1189): No JNI_OnLoad found in /data/data/com.example.myfmpeg/lib/libffmpeg.so 0x412a5cf0, skipping init
06-05 17:58:11.024: I/dalvikvm(1189): Wrote stack traces to '/data/anr/traces.txt'
06-05 17:58:11.215: I/dalvikvm(1189): threadid=3: reacting to signal 3
06-05 17:58:11.326: I/dalvikvm(1189): Wrote stack traces to '/data/anr/traces.txt'
06-05 17:58:11.466: E/image(1189): imageeeeeeeee /mnt/sdcard/smile.png
06-05 17:58:11.466: E/Test(1189): songggggggggg /mnt/sdcard/RABBA.MP3
06-05 17:58:11.476: E/Test(1189): outputttttt /mnt/sdcard/video.mp4
06-05 17:58:11.476: E/chck plzzzzz(1189): after ffmpeg -i /mnt/sdcard/smile.png -i /mnt/sdcard/RABBA.MP3 -acodec copy /mnt/sdcard/video.mp4
06-05 17:58:11.896: E/AndroidRuntime(1189): FATAL EXCEPTION: main
06-05 17:58:11.896: E/AndroidRuntime(1189): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfmpeg/com.example.myfmpeg.Mpeg}: java.lang.RuntimeException: java.io.IOException: Error running exec(). Command: [ffmpeg, -i, /mnt/sdcard/smile.png, -i, /mnt/sdcard/RABBA.MP3, -acodec, copy, /mnt/sdcard/video.mp4] Working Directory: null Environment: null
06-05 17:58:11.896: E/AndroidRuntime(1189):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at android.os.Looper.loop(Looper.java:137)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at android.app.ActivityThread.main(ActivityThread.java:4424)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at java.lang.reflect.Method.invokeNative(Native Method)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at java.lang.reflect.Method.invoke(Method.java:511)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-05 17:58:11.896: E/AndroidRuntime(1189):     at dalvik.system.NativeStart.main(Native Method)
06-05 17:58:11.896: E/AndroidRuntime(1189): Caused by: java.lang.RuntimeException: java.io.IOException: Error running exec(). Command: [ffmpeg, -i, /mnt/sdcard/smile.png, -i, /mnt/sdcard/RABBA.MP3, -acodec, copy, /mnt/sdcard/video.mp4] Working Directory: null Environment: null
4

0 回答 0