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

android 카메라 화면 pc 서버로 전송

0 추천
안녕하세요.

android에서 카메라에 보이는 화면 데이터를

실시간으로 pc로 전송하여 pc에서 보는 프로그램을 구현하려고 합니다.

 

이전에 android의 센서값이, mfc로 구현한 pc서버에 실시간 그래프로 출력되는 프로그램을 구현했었습니다.

이 틀에서 센서값 대신 영상 데이터를 넣고 송수신부만 조금 바꾸면 될것 같아서

한번 시도해보려고 합니다.

그런데 검색해보니 카메라 영상을 전달하는건 카메라 스트리밍을 사용한다고 되어있는데

검색실력이 부족해서 관련 자료나 개념을 잡을 수 있는 사이트를 찾기가 힘듭니다.

도와주세요 횽님!!!
Androidevice (330 포인트) 님이 2013년 4월 12일 질문

1개의 답변

+1 추천
 
채택된 답변
자세하게 말씀드리려면 글이 길어질것같아서 핵심과 결론만 말씀드릴게요(주관적인,,)

카메라를 호출하신뒤에 Camera.PreviewCallback 의 onPreviewFrame() 메서드를 재정의 하시면됩니다.

여기서 내려주는 byte[] 데이터를 rgb로 변환하신뒤에 bitmap으로 생성해서 서버로 전달하시면되는데

실시간으로 보신다는게 초당프레임을 얼마나 생각하고계신지 모르겠지만.. 실시간으로 동영상처럼 보는것은

힘들지 않을까 생각이드네요,.,

yuv data를 bitmap까지 변환하는 과정을 생각해보시면,, 처음에는 잘보여도 몇초만지나면 anr 혹은 메모리에서

이슈가 생길것같네요,,

현실적인 기능은 아니라고 생각됩니다, 다른방법을 아시는분이 있기를 바랍니다,
익명사용자 님이 2013년 4월 12일 답변
Androidevice님이 2013년 4월 12일 채택됨
말씀 감사합니다. ^^
검색해보니 말씀해 주신 바와 같이
프리뷰콜백 메소드를 사용하는것과 더불어
몇몇 방법들이 있는데 어떻게 구현해야 가장 좋을지 아직
감을 잡지 못하고 있습니다. ㅜ-ㅜ
공부를 위한 프로그래밍이기 때문에 딱히 정해놓은 프레임은
없지만 추후 이와 관련된 업무를 할 경우를 대비하여
상용화 가능한 정도의 퀄리티를 바라보고 있습니다.
어디까지나 제생각일뿐이니..
일단 어느정도 생각해보시고 프로세스 구상하신다음에 구현을 하시는편이 생각만 오랫동안 하는것보다 더좋은결과가 나올때도있더라구요,,
좋은결과있으시길 바래요,
모든 프레임을 인코딩해서 네트워크로 전달해야 하는 것이 아니라면
onPreviewFrame()으로부터 전달되는 byte[] 데이터를 담아둘 수 있는 버퍼를 하나만 만들어 두시고
이 버퍼가 비어있는 경우에만 onPreviewFrame으로 부터 받은 데이터를 보관하시고 비어있지 않은 경우 전달된 데이터를 무시하면 어떨까 합니다.
별도의 쓰레드에서 루프를 돌면서 해당 버퍼가 비어있지 않으면 데이터를 비우면서 가져와 인코딩 작업과 전송 작업을 처리하고 전송까지 완료되면 다시 버퍼가 차있는지 확인해서 반복 작업을 하는거죠.
성능을 좀 더 높이자면 인코딩 작업과 전송 작업을 별도의 쓰레드에서 처리해서 네트워킹을 하는 동안에도 기다리지 않고 추가 버퍼를 인코딩할 수 있도록 구성하면 더욱 좋을 듯 싶습니다.
아 그런 방법도 있군요!!!
버퍼를 사용하는 방법도 한 번 시도해 보도록 하겠습니다.
스레드를 추가해서 동시에 작업을 하면 확실히 좋은 속도를
기대해 볼 수 있을 것 같습니다.
좋은 말씀 감사합니다 ^^
...