2017-10-20 97 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失敗:狀態= 0x80000000的

回答

0

沒有什麼附近的連接是阻止您發送視頻流 - 如果你是一個1: 1場景(一臺客戶端設備連接到一臺服務器設備),最好使用P2P_STAR Strategy(如果您還沒有的話),因爲它爲您提供了更高的帶寬連接(這應該有助於視頻)。

要確保您至少在客戶端接收到流的原始字節,可以檢查onPayloadTransferUpdate() callback是否正在觸發。

如果不是,那麼你應該檢查服務器上的同一回調,看看是否發送字節。

如果沒有字節從服務器發出,那麼它可能是您的應用程序級視頻捕獲代碼的問題。

祝你好運!

+0

是的我正在使用P2P_STAR,並將檢查onPayloadTransferUpdate(通過吐司?所以不需要更多的代碼,如緩衝或寫入臨時文件? –

+0

是的有效載荷傳輸和裁減每秒或更少,服務器表面顯示相機預覽,但客戶端表面仍爲黑色 –

+0

catch(IOException e)爲我提供setDataSource失敗:狀態= 0x80000000 –