최근에 안드로이드에서 카메라로 받은 데이터를 스트리밍 하는 것에 대해서 좀 찾아봤었습니다.


비디오나 오디오쪽을 해본적이 없어서 해메고 있는데요,


여기 안펍 게시판에도 관련 글이 꽤나 많이 올라왔었는데, 제대로 된 답이 없더군요,


stackoverflow 도 마찬가지고 구글링 해도 마찬가지더군요,


그나마 찾을 수 있는 것은 3개의 open source project입니다.


1. sipdroid : voip 관련 프로토콜 코드가 너무 많은서 복잡해서 아직 제대로 보질 못했습니다. 메인 코드를 찾아봤지만, 스트리밍 관련 코드는 도통 이해할 수가 없더군요. -> sip 관련 계정이 없어서 테스트를 못해봤습니다.


2. ipcamera-for-android : ffmpeg 라이브러리를 포함하고, 메인 코드는 JNI로 처리했더군요. -> 제 테스트폰들에서는 동작하지 않더군요.


3. spydroid : JNI를 쓰지 않은 유일하게 찾아낸 오픈소스 프로젝트 입니다. 1.6땐 동작했는데, 2.1 , 2.2 버전들은 제 테스트 폰들에서 동작하지 않더군요. 


4. PreviewCallback 을 이용하여 이 데이터를 인코딩 후 전송하여 디코딩하여 보여준다, 라는 이론적으로는 나쁘지 않은 접근법도 생각해 보았는데요, 이것의 문제는 비디오는 어찌어찌 전송한다 쳐도 오디오는 전송을 못하므로 다른 방법을 사용해야 할 필요가 있을 것 같습니다.


5. 또 다른 방법은, http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system 이 블로그에 명시된 방법은 제대로 된 접근법 같긴 하지만 예제 코드도 없고, RFC 문서를 제대로 이해하기 전까진 구현에 많은 어려움이 따를 것 같기 때문에, 힘들 것 같습니다.


6. 그 외에, ip webcam 이라는 정말 잘 만든 앱이 있는데요, 동작도 아주 잘 해서 개발자한테 메일을 보내서 물어보니 역시나 메인 파트는 JNI를 쓴다고 하더군요. 그러면서 덧붙이는 말이 자기 앱을 UI extention으로 사용할수 있다고 하더군요. 그래서 다시 물어보니, 이 앱에 파라미터를 넘겨서 intent로 호출하면 앱 내부에서 쓸 수 있는데(물론 설치된 상태에서만), 기능도 꽤 다양하고 정말 잘 만들어 놨더군요. 그래서 임시방편으로 이 방법으로 해서 만들어 봤는데 아주 잘 동작했습니다. 하지만 문제는, 제가 안드로이드 TV 관련해서 개발하고 있기 때문에 거기다 옮겨보니 프리뷰까지는 잘 나오는데 스트리밍이 안되더군요, JNI 레벨까지 내려가서 그런 문제가 있는 것 같아서, 결국 다시 3번에 있는 접근법으로 시도 중입니다.


이 문제로 꽤나 오랫동안 고민중인데요, 혹시다 다른 분들 중에서 스트리밍 성공하신 분들은 정보 좀 공유 부탁드립니다~ 그리고 고수님들의 고견도 부탁드립니다^^

Entrepreneur, Embedded/Software Engineer