Использовать webrtc VideoCapturer без peerconnection? - PullRequest
0 голосов
/ 05 ноября 2018

Можно ли использовать webrtc VideoCapturer без peerconnection?

У нас есть работающее приложение для Android (из примеров / androidapp). Мы взяли следующий код из рабочего приложения в отдельное действие, где мы используем захват камеры напрямую, не создавая одноранговое соединение. Мы создаем видеозахват (camera2), используя экземпляр CapturerObserver, а затем пытаемся отобразить его в org.webrtc.SurfaceViewRenderer. Ниже приведен код.

Как и ожидалось, onFrameCaptured из CapturerObserver вызывается несколько раз с допустимым объектом videoFrame. Оттуда мы передаем его в SurfaceViewRenderer. Тем не менее, видео не отображается и SurfaceViewRenderer остается черным.

Это правильный способ использования VideoCapturer и SurfaceViewRenderer? Требуется ли какое-либо преобразование формата перед отправкой в ​​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);

1 Ответ

0 голосов
/ 05 ноября 2018

Используйте 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...