FFmpeg on Android

前端 未结 10 1780
谎友^
谎友^ 2020-11-22 03:09

I have got FFmpeg compiled (libffmpeg.so) on Android. Now I have to build either an application like RockPlayer or use existing Android multimedia framework to invoke FFmpeg

10条回答
  •  孤街浪徒
    2020-11-22 03:19

    Inspired by many other FFmpeg on Android implementations out there (mainly the guadianproject), I found a solution (with Lame support also).

    (lame and FFmpeg: https://github.com/intervigilium/liblame and http://bambuser.com/opensource)

    to call FFmpeg:

    new Thread(new Runnable() {
    
        @Override
        public void run() {
    
            Looper.prepare();
    
            FfmpegController ffmpeg = null;
    
            try {
                ffmpeg = new FfmpegController(context);
            } catch (IOException ioe) {
                Log.e(DEBUG_TAG, "Error loading ffmpeg. " + ioe.getMessage());
            }
    
            ShellDummy shell = new ShellDummy();
            String mp3BitRate = "192";
    
            try {
                ffmpeg.extractAudio(in, out, audio, mp3BitRate, shell);
            } catch (IOException e) {
                Log.e(DEBUG_TAG, "IOException running ffmpeg" + e.getMessage());
            } catch (InterruptedException e) {
                Log.e(DEBUG_TAG, "InterruptedException running ffmpeg" + e.getMessage());
            }
    
            Looper.loop();
    
        }
    
    }).start();
    

    and to handle the console output:

    private class ShellDummy implements ShellCallback {
    
        @Override
        public void shellOut(String shellLine) {
            if (someCondition) {
                doSomething(shellLine);
            }
            Utils.logger("d", shellLine, DEBUG_TAG);
        }
    
        @Override
        public void processComplete(int exitValue) {
            if (exitValue == 0) {
                // Audio job OK, do your stuff: 
    
                                // i.e.             
                                // write id3 tags,
                                // calls the media scanner,
                                // etc.
            }
        }
    
        @Override
        public void processNotStartedCheck(boolean started) {
            if (!started) {
                                // Audio job error, as above.
            }
        }
    }
    

提交回复
热议问题