Я пытаюсь заменить кадры с камеры устройства (которая обычно используется в сеансе 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>