在logcat中运行来自android ffmpeg语法错误的ffmpeg命令

时间:2012-09-05 10:20:25

标签: android ffmpeg ubuntu-11.10

我已经成功编译了ffmpeg for android并移植了它。

我放了

  1. libffmpeg.so在 / system / lib 目录
  2. ffmpeg / system / bin / system / xbin 目录中的可执行文件(我不确定将其放置在何处)。我直接从源目录复制了ffmpeg可执行文件(不确定它是否是正确的方法)
  3. 现在我正在使用以下代码执行来自android的命令!!

    imports *
    public class LatestActivity extends Activity {
    
        private Process process;
        String command,text;
    
        static { 
            System.loadLibrary("ffmpeg");
        }
    
      @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_latest);
    
              //Execute Command !!  
              try {
                   Execute();
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              } catch (InterruptedException e) {
                   // TODO Auto-generated catch block
                    e.printStackTrace();
              }
         }
    
    
    
    
    public void Execute() throws IOException, InterruptedException{
            try {
                File dir=new File("/system/bin");
                String[] cmd= {"ffmpeg","-codecs"};
    
                process=Runtime.getRuntime().exec(cmd,null,dir);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                Log.d("Process IOException starts:",e.getMessage());
                e.printStackTrace();
                Log.d("System Manual exit !!",e.getMessage());
                System.exit(MODE_PRIVATE);
            }
    
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()),16384);
    
             BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
    
               // read the output from the command
               Log.d("Application output: ","Output if any !"); 
                while ((text = stdInput.readLine()) != null) {
                    Log.d("Output: ",text); //$NON-NLS-1$
                   }
    
    
            text="";
               // read any errors from the attempted command
            Log.d("Application output: ","Errors if any !");  //$NON-NLS-1$
               while ((text = stdError.readLine()) != null) {
    
                   Log.d("Error: ",text);  //$NON-NLS-1$
               }
    
    
    
               stdInput.close();
               stdError.close();
    
               process.waitFor();
               process.getOutputStream().close();
               process.getInputStream().close();
               process.getErrorStream().close(); 
               destroyProcess(process);
               //process.destroy();
    
        }
    
        private static void destroyProcess(Process process) {
            try {
                if (process != null) {
                    // use exitValue() to determine if process is still running.
                    process.exitValue();
                }
            } catch (IllegalThreadStateException e) {
                // process is still running, kill it.
                process.destroy();
            }
        }
    
      }
    

    这是logcat输出:

    09-05 15:29:13.287: D/dalvikvm(2670): No JNI_OnLoad found in /system/lib/libffmpeg.so 0x44e7e910, skipping init
    09-05 15:29:29.117: I/global(2670): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
    09-05 15:29:29.117: D/Application output:(2670): Output if any !
    09-05 15:29:29.117: D/Application output:(2670): Errors if any !
    09-05 15:29:29.127: D/Error:(2670): /system/bin/ffmpeg: 1: Syntax error: "(" unexpected
    

    m既没有得到任何错误也没有输出命令。
    最后它显示语法错误。
    我想知道它是什么类型的语法错误。如何解决它?

    我做错了什么?

2 个答案:

答案 0 :(得分:4)

如果没有为您的cpu体系结构编译ffmpeg文件,则会出现此错误。 您的命令可能正确,但您需要找到正确的ffmpeg文件。

答案 1 :(得分:0)

<强>固定 @Gaganpreet Singh 你对此进行了如此多的研究后,我必须知道CPU芯片组也很重要,FFMPEG命令不支持INTEL ATOM处理器。 华硕Memo Pad 7使用INTEL ATOM cpu芯片组,当尝试运行ffmpeg命令时,它崩溃并抛出错误“ SYNTAX ERROR

我的命令在除使用INTEL ATOM芯片组的设备之外的所有设备上都能正常工作。

请查看thisthis链接是否对您有所帮助。 如果有人找到解决方案。请与我们分享。

最后通过为x64&amp;创建ffmpeg lib来解决此问题 armv7使用NDK。并在我的Andriod项目中使用了这个库。现在我有2个lib并将此lib用于不同的Android CPU ARCH。 请检查this链接。非常有帮助。