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

ffmpeg를 이용하여 카메라 동영상을 실시간으로 서버에 전송하는 방법이 궁금합니다.

0 추천
질문/답변 게시판을 전부 살펴봤는데 제가 필요로하는 내용은 찾아볼수기없어서 질문 올립니다.

ffmpeg를 이용하여 카메라에서 넘어온 동영상을 빠르게 실시간으로 서버에 전송하고싶은데요

제가 알고싶은 부분은 jni 코딩으로 카메라 동영상을 얻어와서 ffmpeg를 이용하여 H.264 로 인코딩하는것입니다.

어느 글에 보니까 ffmpeg 함수중에 init_put_byte 라는 함수를 이용해서 write 함수를 재정의하고 거기에서 서버로 전송하면 된다고 읽은거같은데요 문제는 카메라에서 동영상을 얻어와서 어떻게 write 함수까지 전달하느냐 입니다.

이부분에 대해서 경험있으신분의 도움이 절살합니다.
허슬러 (140 포인트) 님이 2015년 1월 15일 질문

1개의 답변

0 추천
제공되는 API의 경우 사진용으로 제공되는 takePicture 를 제외하곤 무조건 파일로 떨구게 되어 있어서,
PDK를 수정하지 않는 이상 구할 수 없습니다. takePicture의 경우 사진용으로 제공되는 것이라 5fps 도 나오기 어렵구요...
 
왜 FFMPEG를 쓰려 하시는지 모르겠네요. 화면 정보 어찌 가져온다고 해도
SW 방식이라 인코딩 속도도 늦을 듯 한데요.
MediaRecoder 를 사용하여 파일로 떨군 것을 바로 읽어 서버로 전송하시는게 좋을 듯 합니다. 
사악미소 (65,330 포인트) 님이 2015년 1월 15일 답변
사악미소님이 2015년 1월 15일 수정
MediaRecoder를 이용해서 파일로 떨군것을 바로 읽어서 전송하면서 지나간영상을 지워줄수도 있을까요? 안그러면 파일용량이 기하급수적으로 커질터인데요
일정 시간간격으로 각기 다른 파일을 생성해서 한파일이 끝나면 그 다음파일 전송하면서 그 이전 파일 지우시면 해결 되잖아요..
 물론 전환시 깜빡할테니 버퍼링을 비롯한 처리를 추가로 해 주셔야겠지만요
MediaRecoder.setOutputFile(FileDescriptor fd) 함수를 이용하면 OutPutStream 을 이용해서 서버로 전송이 가능할것도 같은데 혹시 이런방법은 어떤가요?
제가 왜 실시간으로 서버에 스트리밍을 해야되냐면 영상을 받은 서버에서 영상분석을 해서 그즉시 Client에게 명령을 보내야되서 그렇거든요(영상입력부터 분석, 그리고 명령을 받기까지 300ms 이하가 나와야됩니다.)
전에 검색했을때는 없어서 못했는데, 다시 검색해보니 아래 글이 있는게 http://stackoverflow.com/questions/14598299/how-to-record-video-on-android-into-stream  가능은 할 듯 한데,
이 경우 단말이 데이터를 보내는 서버 역활을 할테니,
받는쪽을 다시 구현해 주셔야 할 듯 하고,
 PDK를 건드려도 레이턴시 줄이기가 쉽지 않던데 300ms가 가능할지 모르겠습니다.
...