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

멀티스레딩을 통한 공유 객체에 관한 질문 (Feat. FFmpeg)

0 추천

저는 지금 음원과 녹음 파일을 사용자 요청이 들어올 때 마다 자르고, 자른 파일들을 합치는 기능을 개발중입니다. 사용자 요청이 들어올 때마다 새로운 쓰레드에서 위 과정을 수행합니다.  하지만 FFmpeg이 한번에 하나의 명령어만 실행할 수 있어서 문제가 되고 있습니다.

제가 찾은 문제 이유는 다음과 같습니다. 명령어를 처리중인 쓰레드가 finish 콜백이 터질때 다음 명령을 위한 스트링 배열을 생성합니다.  그 동안, 다른 스레드에서 FFmpeg을 execute 시키는거 같습니다. 동기화 해주기 위해서 FFmpeg의 getInstance 메서드에 synchronized 처리를 하거나, execute 메서드에 synchronized 처리를 해보았지만 오류가 해결되지 않았습니다. FFmpeg의 execute 처리를 어떻게 해야할까요? 어떻게 접근해야 할까요?

관련 코드는 글자수 제한 때문에 댓글로 달겠습니다.

혹시 알고 계신 분이 계시다면 혜안을 부탁드립니다.

사용 오픈소스 라이브러리: https://github.com/WritingMinds/ffmpeg-android-java

 
익명사용자 님이 2018년 7월 24일 질문
글자수 제한 때문에 코드를 올릴 수가 없네요...
최초 mr 파일을 자르는 명령어를 수행하고 onFinish 콜백이 터집니다. 이때 또 가수의 목소리를 자르는 명령을 수행합니다. 그리고 다시 onFinish콜백이 터지면, 사용자 목소리 가수 목소리 mr을 합치는 작업을 수행합니다. 명령어를 정의하는 사이사이에 다른 쓰레드가 FFmpeg을 사용하는거 같습니다.

1개의 답변

0 추천
1. open소스이니 ffmpeg가 멀티 Thread에서 동작되게 수정하는게 제일 좋을듯 합니다.

2. 수정이 어렵다면, LockableMessageHandler 같은 것으로 이벤트를 쌓고, 처리가 끝날 경우 다음 이벤트를 처리하는 방식도 가능은 할 듯 합니다. (단 이건 이벤트가 여러번 쌓일 경우 답이 없으니, 일정 시간동안 들어오는 마지막 이벤트만 처리하던지, 최대 갯수 제한이 필요합니다.)

http://blog.naver.com/PostView.nhn?blogId=visualc98&logNo=101780728&categoryNo=34&viewDate=&currentPage=1&listtype=0.
익명사용자 님이 2018년 7월 25일 답변
...