2017-10-20 7 views
0

こんにちは、私はGoogle NearBy Connectionsによってカメラからビデオをストリーミングしようとしています。 接続が確立され、メッセージング作品が、私はサーバ装置の表面図をストリーミング送信するときにカメラのプレビューを表示しますが、クライアントがエラーなしでは何も受けていない、これはストリームがどのようにある: サーバー:Google-NearByビデオストリームクライアントのSurfaceViewの空白

SurfaceView surface; 
public void sendCam(){ 
    try { 
     surface = findViewById(R.id.surface); 
     ParcelFileDescriptor[] payloadPipe = ParcelFileDescriptor.createPipe(); 

     ParcelFileDescriptor readFD = payloadPipe[0]; 
     ParcelFileDescriptor writeFD = payloadPipe[1]; 

     mCamera = Camera.open(); 
     MediaRecorder rec = new MediaRecorder(); 

     mCamera.lock(); 
     mCamera.unlock(); 

     rec.setCamera(mCamera); 
     rec.setVideoSource(MediaRecorder.VideoSource.CAMERA);  
     rec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
     rec.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 

     rec.setPreviewDisplay(surface.getHolder().getSurface()); 

     rec.setOutputFile(writeFD.getFileDescriptor()); 
     send(Payload.fromStream(readFD)); 

     rec.prepare(); 
     rec.start(); 
    } catch (Exception e) { 
    } 
} 

クライアントが受け取る:

@Override 
    protected void onReceive(Endpoint endpoint, Payload payload) { 
    if (payload.getType() == Payload.Type.STREAM) { 
      try { 
       MediaPlayer mMediaPlayer = new MediaPlayer(); 
//    mMediaPlayer.setDataSource(payload.asStream().asParcelFileDescriptor().getFileDescriptor()); // did not work also 
       FileInputStream inputStream = new FileInputStream(payload.asStream().asParcelFileDescriptor().getFileDescriptor()); 
       mMediaPlayer.setDataSource(inputStream.getFD()); 
       mMediaPlayer.setDisplay(surface.getHolder()); 
       mMediaPlayer.prepare(); 
       mMediaPlayer.start(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

近くでビデオをストリーミングできるかどうかは分かりませんが、サンプルプロジェクトではオーディオをストリーミングする方法が示されています。このAPIは動画をストリーミングできないか、コードに問題がある可能性があります。

UPDATE:

}キャッチ(のIOException e)の{= setDataSourceは:失敗した状態MEを与えるビデオストリームを送信することからあなたを排除近所の接続では何もありません0x80000000の

答えて

0

- あなたが1の場合は: 1シナリオ(1つのクライアントデバイスが1台のサーバーデバイスに接続されている)では、より高い帯域幅の接続(ビデオに役立つはずです)を提供するので、P2P_STAR Strategyを使用する方がよいでしょう。

少なくともストリームの生のバイトをクライアントで受信することを確認するには、onPayloadTransferUpdate() callbackが起動しているかどうかを確認できます。

ない場合は、バイトが送信されているかどうかを確認するために、サーバー上で同じコールバックを確認する必要があります。

何のバイトは、サーバから送信されていないされている場合、それはあなたのアプリケーションレベルのビデオキャプチャコードに問題がある可能性があります。

幸運を祈る!

+0

はい私はP2P_STARを使用しています。(トーストによって、バッファリングやテンポラリファイルへの書き込みのようなコードは必要ありませんか?) –

+0

はい、ペイロードは毎秒以下のように転送され、カメラのプレビューが、クライアントの表面が黒いまま表示して –

+0

キャッチ(例外:IOException e)はsetDataSourceが失敗したMEに与えるものです。:ステータス= 0x80000000から –