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

카메라 영상 전송 질문 드립니다.

0 추천

현제 일반 카메라 공유를위해

 

안드로이드(A)<-> 안드로이드 (B)

 

해서 통신을 연결하였습니다 A가 서버이고 B가 클라이언트입니다. B가 접속하면 A->B 로 카메라 영상 데이터를 프리뷰 콜백을 통해 전송하게하였는데 데이터가 정상적으로 날라가지않아 질문드립니다..

 

 Camera.Parameters params = camera.getParameters();
         int w = params.getPreviewSize().width;
                                  int h = params.getPreviewSize().height;
                                  int format = params.getPreviewFormat();
                                  YuvImage image = new YuvImage(data, format, w, h, null);
 
                                  ByteArrayOutputStream out = new ByteArrayOutputStream();
                                  Rect area = new Rect(0, 0, w, h);
                                  image.compressToJpeg(area, 50, out);
                                  Bitmap bm = BitmapFactory.decodeByteArray(out.toByteArray(), 0, out.size());
 
                                  byte[] tmp = out.toByteArray();
         
         if(writeSocket !=null){
       
        // writeSocket.writeInt(tmp.length);
         writeSocket.write(tmp);
         writeSocket.flush();
         }
 
이부분이 서버데이터입니다. 
 
               readSocket = new DataInputStream(socket.getInputStream());
 
               while (true) {
                int length = readSocket.available();
               
                byte buffer[] = new byte[length];
                   int ac = readSocket.read(buffer, 0, buffer.length);
                   String input = new String(buffer, 0, buffer.length);
                   final String recvInput = input.trim();
                   
                   if(ac==-1)
                       break;
 
                   mHandler.post(new Runnable() {
 
                       @Override
                       public void run() {
                           // TODO Auto-generated method stub
                           setText(recvInput);
                       }
 
                   });
               }
 
받는쪽은 이렇게되어있습니다.
 
    void setText(String msg){
   
    byte[] msgbyte = msg.getBytes();
   
    Bitmap bm = BitmapFactory.decodeByteArray(msgbyte, 0, msgbyte.length);
 
            ImageView ivCam = (ImageView) findViewById(R.id.imageView1);
            ivCam.setImageBitmap(bm);  /// NULL POINT EX HERE!
   
   }
 
이렇게해서 화면에 뿌려주고 있구요.. 화면에 출력이돼지않아서요 . 어느부분이 잘못되었는지 궁금합니다.ㅠ

 

익명사용자 님이 2015년 8월 17일 질문

1개의 답변

0 추천

 int ac = readSocket.read(buffer, 0, buffer.length);

에서 ac가 보낸데이터 전체인지 확인해보셨는지요? 

보내신 데이터는 바이너리데이터라

final String recvInput = input.trim();

이 맞는지 의문스럽습니다. trim은 문자에서만 적용 가능한 것이 아닐런지요?

 byte[] msgbyte = msg.getBytes();

에서 msg의 크기가 얼마인지 확인하시고 실제로 msgbyte 의 크기도 확인 해보셨는지요?

전반적으로 보낸데이터랑 받은 데이터가 동일한지 우선 확인이 하심이 맞을듯 하고

굳이 byte []  로 받은 것을 string으로 변환했다 다시 byte[] 변환하실 필요가 있으신지도 조금은 의문스럽습니다..

컴러기 (22,230 포인트) 님이 2015년 8월 17일 답변
...