Muy buens, estoy utilizando la libreria jave de java, la he probado en eclipse y funciona, en android studio la incluyo y cuando la pruebo me lanza elbsiguiente error.
Working Directory: null Environment: null
Y tambien
Caused by: java.io.IOException: Permission denied
El caso es que le doi permisos de escritura y lectura en la sd pero segun he estado leyendo podria ser que no tenga permisos root o que no tenga instalado ffmpeg pero no lo tengo nada claro ya que jave viene con ffmpeg ¿cual es el error? ¿Como puedo hacerlo funcionar?
@$francisco
Porque usar Android Studio si puedes programar para moviles desde eclipse?
Viene una version para Android developers
De igual forma, estoy seguro de que @Gus Garsaky (https://underc0de.org/foro/index.php?action=profile;u=44299) se pasará y sabrá la solución!
Saludos!
ANTRAX
La verdad estuve antes con eclipse, pero me fije que android studio es la "oficial" para crear aplicaciones android
Eclipse ya no es lo recomendado para desarrollo Android, Android Studio es todo lo que necesitas, además de ser el oficial, está basado en el mejor IDE que puedes encontrar para Java: IntelliJ IDEA.
Generalmente, ese tipo de error suele ser porque efectivamente no tienes permisos root o puede ser porque ffmpeg no tiene los permisos adecuados. Si es ésto último, lo solucionas dándole los permisos a través de exec de Runtime:
String[] command = new String[]{"/system/bin/chmod", "744",
"/ruta/a/ffmpeg" };
Process process = Runtime.getRuntime().exec(command);
Si es lo primero puedes darle permisos root a tu app por tu root manager, como por ejemplo SuperSU.
Por último y poco probable es que hayas olvidado darle permisos en el manifest de tu aplicación para escribir en la SD:
android.permission.WRITE_EXTERNAL_STORAGE
Saludos.
Al parecer son permisos que le falta a ffmpeg pero no me deja darselos.
view.addJavascriptInterface(new Object()
{
@JavascriptInterface
public void performClick() throws Exception
{
File source = new File("/sdcard/cancion.mp4");
File target = new File("target.mp3");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(new Integer(128000));
audio.setChannels(new Integer(2));
audio.setSamplingRate(new Integer(44100));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);
}
},"Android");
return true;
}
}
05-15 00:30:24.848 6348-6362/com.hackloper.probando W/System.err﹕ java.io.IOException: Error running exec(). Command: [/bin/chmod, 755, /data/data/com.hackloper.probando/cache/jave-1/ffmpeg] Working Directory: null Environment: null
05-15 00:30:24.860 6348-6362/com.hackloper.probando W/System.err﹕ at java.lang.ProcessManager.exec(ProcessManager.java:211)
05-15 00:30:24.861 6348-6362/com.hackloper.probando W/System.err﹕ at java.lang.Runtime.exec(Runtime.java:169)
05-15 00:30:24.862 6348-6362/com.hackloper.probando W/System.err﹕ at java.lang.Runtime.exec(Runtime.java:124)
05-15 00:30:24.863 6348-6362/com.hackloper.probando W/System.err﹕ at it.sauronsoftware.jave.DefaultFFMPEGLocator.<init>(DefaultFFMPEGLocator.java:85)
05-15 00:30:24.864 6348-6362/com.hackloper.probando W/System.err﹕ at it.sauronsoftware.jave.Encoder.<init>(Encoder.java:111)
05-15 00:30:24.865 6348-6362/com.hackloper.probando W/System.err﹕ at com.hackloper.probando.MainActivity$myWebClient$1.performClick(MainActivity.java:54)
05-15 00:30:24.865 6348-6362/com.hackloper.probando W/System.err﹕ at android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method)
05-15 00:30:24.865 6348-6362/com.hackloper.probando W/System.err﹕ at android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method)
05-15 00:30:24.865 6348-6362/com.hackloper.probando W/System.err﹕ at android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113)
05-15 00:30:24.866 6348-6362/com.hackloper.probando W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:107)
05-15 00:30:24.866 6348-6362/com.hackloper.probando W/System.err﹕ at android.os.Looper.loop(Looper.java:194)
05-15 00:30:24.866 6348-6362/com.hackloper.probando W/System.err﹕ at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:930)
05-15 00:30:24.866 6348-6362/com.hackloper.probando W/System.err﹕ at java.lang.Thread.run(Thread.java:838)
05-15 00:30:24.867 6348-6362/com.hackloper.probando W/System.err﹕ Caused by: java.io.IOException: No such file or directory
05-15 00:30:24.867 6348-6362/com.hackloper.probando W/System.err﹕ at java.lang.ProcessManager.exec(Native Method)
05-15 00:30:24.868 6348-6362/com.hackloper.probando W/System.err﹕ at java.lang.ProcessManager.exec(ProcessManager.java:209)
05-15 00:30:24.868 6348-6362/com.hackloper.probando W/System.err﹕ ... 12 more
shell@android:/ $ chmod 777 /data/data/com.hackloper.probando/cache/jave-1/ff
mpeg
me deja acceder hasta cache, a partir de cache no me deja en "jave-1" me dice acceso denegado.
¿como podría darle permisos de ejecución? a ser posible que no haga falta rootear el móvil, sería algo molesto que una aplicación para pasar a mp3 necesite un movil rooteado o ¿saben alguna otra alternativa para convertir videos y audios?.
¿Estás seguro que es la ruta correcta? Fíjate lo que dice el rastreo de pila:
CitarW/System.err﹕ java.io.IOException: Error running exec(). Command: [/bin/chmod, 755, /data/data/com.hackloper.probando/cache/jave-1/ffmpeg]
W/System.err﹕ Caused by: java.io.IOException: No such file or directory
He aquí la importancia de saber interpretar las excepciones y el rastreo de pila.
Si no tienes permisos root, creo que poco vas a poder hacer. He encontrado una forma de hacerlo funcionar sin permisos root que se describe en StackOverFlow: FFMPEG on Android (http://stackoverflow.com/questions/4725773/ffmpeg-on-android/4820282#4820282)
Saludos.
Muchas gracias por la respuesta, no entiendo mucho, pero creo que lo que dice es que tengo que guardarlo en la sd y ejecutarlo desde hay, intentaré buscar mas información sobre esto.