2017-10-20 98 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 –