Android 是否在没有对等连接的情况下使用webrtc视频捕获器?

Android 是否在没有对等连接的情况下使用webrtc视频捕获器?,android,webrtc,Android,Webrtc,是否可以不使用peerconnection而使用webrtc VideoCapturer 我们有一个正在运行的androidapp应用程序(来自示例/androidapp)。我们已将以下代码从工作应用程序中提取到一个单独的活动中,在该活动中,我们直接使用camera capturer,而无需创建peerconnection。我们使用CapturerObserver实例创建视频捕获器(camera2),然后尝试将其呈现到org.webrtc.SurfaceViewRenderer。下面是代码 正如

是否可以不使用peerconnection而使用webrtc VideoCapturer

我们有一个正在运行的androidapp应用程序(来自示例/androidapp)。我们已将以下代码从工作应用程序中提取到一个单独的活动中,在该活动中,我们直接使用camera capturer,而无需创建peerconnection。我们使用CapturerObserver实例创建视频捕获器(camera2),然后尝试将其呈现到org.webrtc.SurfaceViewRenderer。下面是代码

正如所料,CapturerObserver的OnFrameCapture正在使用有效的videoFrame对象调用多次。从那里,我们把它传给SurfaceviewRender。但是,视频不会渲染,SurfaceView渲染器仍为黑色

这是使用VideoCapturer和SurfaceViewer的正确方法吗?在发送到SurfaceViewer之前是否需要任何格式转换

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做什么以及如何表现。有人能帮我吗?