Использование FFMPEG через командную строку в android

2 user1662334 [2012-09-18 10:24:00]

Я хочу использовать FFMPEG через COMMAND LINE в приложении для Android. Для этой цели:

  • Я перекрестно скомпилировал ffmpeg lib и получил libffmpeg.so
  • Я сохранил libffmpeg.so и файл ffmpeg, отображаемый в каталоге файлов моего проекта.

Это код, который я использую:

открытый класс FFMPEGActivity расширяет действие {

Process p;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

        String[] cmd =new String[4];
    cmd[0]="/data/data/com.example.ffmpegnew/files/libffmpeg";
    cmd[1]="-i";
    cmd[2]="mnt/sdcard/music/baba.mp4";
    cmd[3]="mnt/sdcard/music/outfile.mp4";

    p = Runtime.getRuntime().exec(cmd,null, new File("/data/data/com.example.ffmpegnew/files"));

    }
    catch(Exception e)
    {
        System.out.println("exception"+e);
    }

}

}

Это исключение, которое я получаю:

09-17 13:47:01.679: I/System.out(3752): exceptionjava.io.IOException: Error running exec(). Command: [/data/data/com.example.ffmpegnew/files/libffmpeg.so, -i, mnt/sdcard/music/baba.mp4, mnt/sdcard/music/outfile.mp4] Working Directory: /data/data/com.example.ffmpegnew/files Environment: null

Скажите, пожалуйста, как решить эту проблему. Спасибо заранее.

android command-line ffmpeg


3 ответа


1 Решение Alexander Kulyakhtin [2012-09-18 11:16:00]

Я думаю, что это не сработает, если вам не удастся скомпилировать исполняемый файл ffmpeg, поместить его где-нибудь в файловую систему, а затем получить доступ к нему через свой собственный слой. Обычно они используют libffmpeg API в android, например, в Dolphin Player


1 Alex Cohn [2012-12-30 19:51:00]

Кажется, что ваш код пытается запустить библиотеку, а не исполняемый файл ffmpeg. Обратите внимание, что даже после фиксации вашего cmd вам потребуются дополнительные трюки для загрузки libffmpeg.so, поскольку загрузчик Android не загружает общие библиотеки из ./

Я бы предложил создать статически связанный исполняемый файл ffmpeg, чтобы сохранить hassle.


0 Guy [2012-12-30 15:57:00]

Поместите ffmpeg и все файлы, которые он обращается на внутренней карте (получите через context.getDir("", 0). После этого вы сможете запустить ffmpeg через exec().

Некоторые модели, однако, тоже откажутся от этого.