您好我试图通过Google NearBy Connections从相机中流式传输视频。 建立连接和消息传递工作,但当我发送流服务器设备表面视图显示相机预览但客户端没有收到任何错误这是如何流: 服务器:
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无法流式传输视频,或者我的代码存在问题,可能是什么问题。
更新:
} catch(IOException e){GIVES ME setDataSource failed:status = 0x80000000
答案 0 :(得分:0)
附近连接中没有任何内容阻止您发送视频流 - 如果您的是1:1方案(一个客户端设备连接到一个服务器设备),最好使用P2P_STAR Strategy(如果你还没有)因为它为你提供了更高的带宽连接(这应该有助于视频)。
为了确保您至少在客户端上接收流的原始字节,您可以检查onPayloadTransferUpdate() callback是否正在触发。
如果没有,那么你应该在服务器上检查相同的回调,看看是否发送了这些字节。
如果没有从服务器发送字节,那么它可能是您的应用程序级视频捕获代码的问题。
祝你好运!