마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ffmpeg 을 쉽게 사용하도록 만든 android java 라이브러리 사용해보신분 계신가요..

0 추천

현재 ffmpeg을 이용해서 배경음악, 가수의 목소리, 사용자의 녹음 목소리를 자르고 병합하는 작업을 하고 있는데요. 에러가 계속해서 나네요. 

06-28 18:22:18.677 20107-20107/com.softcode.kihnoplay W/System.err: com.github.hiteshsondhi88.libffmpeg.exceptions.FFmpegCommandAlreadyRunningException: FFmpeg command is already running, you are only allowed to run single command at a time

에러가 나는 곳은 ffmpeg.execute() 하는 곳입니다. execute하기 전에 killRunningProssess 해보았지만 더 이상한 오류가 뜨네요. ffmpeg 인스턴스가 싱글턴이라 그 전 작업이 끝나지 않았는데 작업을 해서 일까요...?  OnFinish 콜백에서 ffmpeg 으로 다시 mr 짜르고 또 콜백을 호출해서 짜르고 병합하고 합니다..작업 하나에서 주르륵 쪼개지는 거구요. 작업 단위는 사용자가 녹음을 할 때마다 입니다... 혹시 아시는 분은 혜안을 보여주시면 감사하겠습니다!

준버기 (1,160 포인트) 님이 2018년 6월 28일 질문

1개의 답변

+1 추천
 
채택된 답변
ffmpeg 인스턴스가 싱글턴이라 그 전 작업이 끝나지 않았는데 작업을 해서 일까요...?
=> "FFmpeg command is already running, you are only allowed to run single command at a time" 에 설명 되어 있듯.. 동시에 수행이 안되게 구현 되어 있습니다.

FFmpeg.java 파일을 보면,
   @Override
    public void execute(Map<String, String> environvenmentVars, String[] cmd, FFmpegExecuteResponseHandler ffmpegExecuteResponseHandler) throws FFmpegCommandAlreadyRunningException {
        if (ffmpegExecuteAsyncTask != null && !ffmpegExecuteAsyncTask.isProcessCompleted()) {
            throw new FFmpegCommandAlreadyRunningException("FFmpeg command is already running, you are only allowed to run single command at a time");
        }
와 같이 되어 있는게, ffmpegExecuteAsyncTask 의 isProcessCompleted 가 false이면, 강제로 Exception을 발생하게 만들어둔 듯 합니다.
여기를 수정해도   Singleton 방식이라.  다른 곳에서 오류가 발생할 수도 있구요..

소스가 공개 된 코드니 문제가 되는 부분과 Singleton 방식이 아닐때도 동작되게  수정하는 것도 가능하겠지만,
shell 명령어 방식으로 처리하는 경우 shell 동작이 끝나야 다음 shell명령어를 처리 할 수 있을테니. 사용하시는 시나리오를 100% 대응 하실 수 있을진 의문이네요.

ffmpeg shell 명령어가 아닌, ffmpeg api를 사용하여 동작하는 방식으로 구조 전환도 고려 해 보셔야 할 듯 합니다.

PS. ffmpeg-android-java 는 GPLv3라 사용하시는 모든 소스 전부 공개 해야 라이센스 위반이 되지 않는데. 상용코드로 사용하실 수 있을지 의문입니다.
익명사용자 님이 2018년 6월 29일 답변
준버기님이 2018년 6월 29일 채택됨
답변 정말 감사합니다. 라이브러리 단으로 들어가서 수정을 해보려고 라이브러리를 프로젝트에 넣고 있는데 오류 때문에 진행을 못하고 있습니다.. ㅠㅠ 혹시 질문 한번 봐주실수 있을까요.
http://www.masterqna.com/android/84433/외부-ffmpeg-안드로이드-라이브러리-소스를-프로젝트에-넣는데-문제가-있습니다
...