在Bravobit FFmpeg中杀死cmd进程

时间:2018-10-10 18:44:17

标签: java android ffmpeg android-ffmpeg

我正在使用Bravobit FFmpeg Bravobit FFmpeg githubconvert一些音频文件。转换次数多于这两个,但我认为不必在此处添加。

我的问题是,一旦启动这些命令,是否有可能杀死或停止这些命令。

当我启动第一个方法convertPCMToWav()然后在finish()中调用Main method时,这将停止除这些以外的所有其他进程。他们只是继续前进,好像什么都没发生。

public class AudioProcessor {

    private Context context;
    private FFmpeg ffmpeg;

    private File micPcmFile;

    private File pcmtowavTempFile;
    private File mp3towavTempFile;

    public AudioProcessor(Context context, Activity activity) {
        ffmpeg = null;
        ffmpeg = FFmpeg.getInstance(context);
        this.context = context;
        prepare();
    }

    /**
     * Program main method. Starts running program
     * @throws Exception
     */
    public void process() throws Exception {
        if (!ffmpeg.isSupported()) {
            Log.e("AudioProcessor", "FFMPEG not supported! Cannot convert audio!");
            throw new Exception("FFMPeg has to be supported");
        }
        if (!checkIfAllFilesPresent()) {
            Log.e("AudioProcessor", "All files are not set yet. Please set file first");
            throw new Exception("Files are not set!");
        }

        Log.e("AudioProcessor", "Start processing audio");




        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                convertPCMToWav();
            }
        }, 200);
    }

    /**
     * Prepares program
     */
    private void prepare() {
        prepareTempFiles();
    }

    /**
     * Converts PCM to wav file. Automatically create new file.
     */
    private void convertPCMToWav() {
        String[] cmd = { "-f" , "s16le", "-ar", "44.1k", "-i", micPcmFile.toString(), "-y", pcmtowavTempFile.toString()};
        ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {

            @Override
            public void onStart() {
                super.onStart();
            }

            @Override
            public void onSuccess(String message) {
                super.onSuccess(message);
                convertMP3ToWav();
            }
            @Override
            public void onFailure(String message) {
                super.onFailure(message);
            }
        });
    }

    /**
     * Converts mp3 file to wav file.
     * Creates Wav file
     */
    private void convertMP3ToWav() {
        String[] cmd = { "-i" , backgroundMp3File.toString(), "-y", mp3towavTempFile.toString() };
        ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
            @Override
            public void onStart() {
                super.onStart();
            }

            @Override
            public void onSuccess(String message) {
                super.onSuccess(message);
                changeMicAudio();
            }
            @Override
            public void onFailure(String message) {
                super.onFailure(message);

            }
        });
    }

   /**
     * Prepares temp required files by deleteing them if they exsist.
     * Files cannot exists before ffmpeg actions. FFMpeg automatically creates those files.
     */
    private void prepareTempFiles() {
        pcmtowavTempFile = new File(context.getFilesDir()+ Common.TEMP_LOCAL_DIR + "/" + "_pcm.wav");
        mp3towavTempFile = new File(context.getFilesDir()+ Common.TEMP_LOCAL_DIR + "/" + "_mp3.wav");   
        destroyTempFiles();
    }

   /**
     * Destroys temp required files
     */
     private void destroyTempFiles() {

         pcmtowavTempFile.delete();
         mp3towavTempFile.delete();
    }

}

0 个答案:

没有答案