Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo ejecutar ffmpeg desde la línea de comandos en android

Quiero utilizar ffmpeg usando la línea de comando. He guardado ffmpeg.so en el directorio de archivos en el proyecto. Pero estoy recibiendo excepción mientras lo hace.Este es el código:

public class MainActivity extends Activity { Process p; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Process p = Runtime.getRuntime().exec("/data/data/com.example.ffmpegnew/files/ffmpeg",null, new File("/data/data/com.example.ffmpegnew/files")); } catch(Exception e) { System.out.println("exception"+e); } } } 

Esta es la excepción:

 09-16 16:21:24.992: I/System.out(2103): exceptionjava.io.IOException: Error running exec(). Commands: [/data/data/com.example.ffmpegnew/files/ffmpeg] Working Directory: /data/data/com.example.ffmpegnew/files Environment: null 

Por favor, dígame qué tipo de error estoy haciendo. Gracias.

  • Gestión de proyectos de android desde la línea de comandos
  • ¿Cómo empaquetar la aplicación de línea de comandos nativa en apk?
  • ¿Cómo instalar Android SDK en Linux usando CLI solamente?
  • ¿Cómo ejecutar una aplicación específica de Android con Terminal?
  • Terminal Android - comandos que faltan de telnet, recibiendo este error: KO: comando desconocido, intenta 'ayuda'
  • Cómo acceder a Android File system desde la línea de comandos de Windows 7 a través de USB
  • Por qué "cocos compilar -p android" da "El comando android ya no está disponible." Error
  • Android Runtime.getRuntime (). Exec () para navegar a través de directorios
  • 2 Solutions collect form web for “Cómo ejecutar ffmpeg desde la línea de comandos en android”

    En primer lugar, no puede ejecutar directamente un archivo de shared object . Necesitas construir un ejecutable ffmpeg que se pueda ejecutar usando /system/bin

    Por favor tome esto como referencia FFmpeg en Android

    Después de que puedas obtenerlo compilado, solo puedes ejecutarlo en tu carpeta de activos del APK y extraerlo a /data/data/<your package>/ (asegúrate de que chmod 755 también!)

    Una vez hecho esto, puede ejecutar el archivo ejecutable utilizando la construcción de una cadena de línea de comandos y pasarla a ProcessBuilder lugar de utilizar el ProcessBuilder Runtime.exec ()

    La excepción menciona que el 'ambiente' es nulo …

    Quizás en lugar de 'exec', trate de usar procesador como en la siguiente muestra de código de servidor que ejecuta ffmpeg envuelto en un shellscript (pars_submit) … note builder.environment

      public String getFfmpeg(@QueryParam("infil1") String infil1, @QueryParam("infil2") String infil2, @QueryParam("otfil") String otfil, @QueryParam("t") String time) { String outfil = "dummy.mp4"; List<String> command = new ArrayList<String>(); command.add("vendor/bin/pars_submit"); command.add(infil1); command.add(infil2); command.add(otfil); command.add(time); System.out.println("Starting process " +command.toString()); ProcessBuilder builder = new ProcessBuilder(command); Map<String, String> environ = builder.environment(); // for(Entry<String, String> entry : environ.entrySet()){ // System.out.println("ENV " +entry.getKey() + " " +entry.getValue()); // } // builder.redirectErrorStream(true); Process process = null; try { process = builder.start(); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { //System.out.println(line); outfil=line; } // int exitVal = process.waitFor(); // System.out.println("Process exitValue: " + exitVal); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (process != null) { process.destroy(); process = null; } } return outfil; } 

    IMO – android-ffmpeg va a ser más confiable con una interfaz JNI completa y un contenedor para la llamada a ffmpeg.main (). Mira todos los proyectos git … buscar en 'android-ffmpeg' y ver cómo invocan ffmpeg. CLI no se utiliza.

    Pars_submit

     #!/bin/bash shopt -s globstar uri=$1 filnam="${uri##*/}" uri2=$2 filnam2="${uri2##*/}" otfil=$3 time=$4 curl -#LO $uri curl -#LO $uri2 ffmpeg -y -loop 1 -i "$filnam" -i "$filnam2" -t "$time" -r 1/2 -pass 1 -vcodec libx264 -b:v 200k -bt 50k -an -f mp4 -strict -2 -passlogfile mydummy /dev/null # echo "ffmpegP1 Exit status" $? ffmpeg -y -loop 1 -i "$filnam" -i "$filnam2" -t "$time" -r 1/2 -pass 2 -vcodec libx264 -b:v 200k -bt 50k -f mp4 -strict -2 -passlogfile mydummy -ar 44100 "$otfil" # echo "ffmpegp2 Exit status" $? # last test json=$(curl -X POST -H "X-Parse-Application-Id: 3KxPB" -H "X-Parse-REST-API-Key: kVl5Z0CX" -H "Content-Type: video/mp4" --data-binary @"$otfil" https://api.parse.com/1/files/"$otfil") # echo "parse POST Exit status" $? echo $json 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.