Android 是否在没有对等连接的情况下使用webrtc视频捕获器?
是否可以不使用peerconnection而使用webrtc VideoCapturer 我们有一个正在运行的androidapp应用程序(来自示例/androidapp)。我们已将以下代码从工作应用程序中提取到一个单独的活动中,在该活动中,我们直接使用camera capturer,而无需创建peerconnection。我们使用CapturerObserver实例创建视频捕获器(camera2),然后尝试将其呈现到org.webrtc.SurfaceViewRenderer。下面是代码 正如所料,CapturerObserver的OnFrameCapture正在使用有效的videoFrame对象调用多次。从那里,我们把它传给SurfaceviewRender。但是,视频不会渲染,SurfaceView渲染器仍为黑色 这是使用VideoCapturer和SurfaceViewer的正确方法吗?在发送到SurfaceViewer之前是否需要任何格式转换Android 是否在没有对等连接的情况下使用webrtc视频捕获器?,android,webrtc,Android,Webrtc,是否可以不使用peerconnection而使用webrtc VideoCapturer 我们有一个正在运行的androidapp应用程序(来自示例/androidapp)。我们已将以下代码从工作应用程序中提取到一个单独的活动中,在该活动中,我们直接使用camera capturer,而无需创建peerconnection。我们使用CapturerObserver实例创建视频捕获器(camera2),然后尝试将其呈现到org.webrtc.SurfaceViewRenderer。下面是代码 正如
private class MyCapturerObserver implements CapturerObserver {
@Override
public void onCapturerStarted(boolean b) {
Log.e(TAG, "capture started: " + b);
}
@Override
public void onCapturerStopped() {
Log.e(TAG, "capture stopped");
}
@Override
public void onFrameCaptured(final VideoFrame videoFrame) {
//fullscreenRenderer.onFrame(videoFrame);
runOnUiThread(new Runnable() {
@Override
public void run() {
fullscreenRenderer.onFrame(videoFrame);
}
});
}
}
capturer = createVideoCapturer();
captureObserver = new MyCapturerObserver();
surfaceTextureHelper =
SurfaceTextureHelper.create("CaptureThread", eglBase.getEglBaseContext());
capturer.initialize(surfaceTextureHelper, getApplicationContext(), captureObserver);
capturer.startCapture(1280, 720, 30);
使用
factory.createVideoSource
。您可以在创建peerconnection之前使用它。您可以在PeerConnectionClient.java中引用源代码
public VideoTrack createVideoTrack(VideoCapturer capturer) {
surfaceTextureHelper = SurfaceTextureHelper.create("CaptureThread", rootEglBase.getEglBaseContext());
videoSource = factory.createVideoSource(capturer.isScreencast());
capturer.initialize(surfaceTextureHelper, appContext, videoSource.getCapturerObserver());
capturer.startCapture(videoWidth, videoHeight, videoFps);
localVideoTrack = factory.createVideoTrack(VIDEO_TRACK_ID, videoSource);
localVideoTrack.setEnabled(renderVideo);
localVideoTrack.addSink(localRender);
return localVideoTrack;
}
我发现你和我有同样的问题,因为你确实运行NUITHREAD(),有可能知道你是如何处理的吗?@loki下面的答案帮助我解决了一些问题,我从视频渲染器改为添加接收器,但整个过程变成了两个流。我仍然不明白SurhfacetureHelper做什么以及如何表现。有人能帮我吗?