Используйте камеру WebRTC в AR-сессии Android - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь заменить кадры с камеры устройства (которая обычно используется в сеансе AR) на кадры с потоковой камеры через webrtc. Для рендеринга потока webrtc я использую webrtc.SurfaceViewRenderer и для рендеринга сеанса AR я использую opengl.GLSurfaceView в activity_main.xml, и эти два средства просмотра работают так, как они должны работать по отдельности, но теперь я хочу объединить их. Проблема в том, что я не знаю, как извлечь кадры из потока webrtc. Я нашел функцию шкафов Bitmap bmp = surfaceViewRenderer.getDrawingCache(); для захвата пикселей, но она всегда возвращает ноль.

Если я могу получить пиксели из surfaceViewRenderer, моя идея - привязать их к текстуре, а затем визуализировать эту текстуру в качестве фона в AR-сцене

Код, которому я следовалможно найти по адресу https://github.com/google-ar/arcore-android-sdk/blob/master/samples/hello_ar_java/app/src/main/java/com/google/ar/core/examples/java/helloar/HelloArActivity.java

Это код, в котором сцена AR визуализируется с помощью камеры устройства:

public void onDrawFrame(GL10 gl10) {

    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

    try {
            session.setCameraTextureName(backgroundRenderer.getTextureId());

            //replace this frame with the frames that is rendered in webrtc's SurfaceViewRenderer
            Frame frame = session.update();
            Camera camera = frame.getCamera();

            backgroundRenderer.draw(frame);
    .
    .
    .

И вот так выглядит мой activity_main.xml. В конце я удалю раздел SurfaceViewRenderer

<LinearLayout
    <org.webrtc.SurfaceViewRenderer
     android:id="@+id/local_gl_surface_view"
     android:layout_width="match_parent"
     android:layout_height="248dp"
     android:layout_gravity="bottom|end" />

    <android.opengl.GLSurfaceView
     android:id="@+id/surfaceview"
     android:layout_width="match_parent"
     android:layout_height="195dp"
     android:layout_gravity="top" />

</LinearLayout>
...