我正在研发面向无人机摄像机视图的实时增强可视化的Android移动应用程序(特别是我正在使用相对SDK的DJI Phantom 3 Professional)。我正在使用Wikitude框架作为AR部分。每个Wikitude示例都通过增加智能手机的摄像头视图来工作,因此我需要重定向输入视频流。在这个阶段,通过使用DJI SDK功能,我有一个TextureView对象,其中包含来自无人机的正确解码的流。 以下是当前视图的.xml文件顶部的相关说明:
<TextureView
android:id="@+id/video_previewer_surface"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_centerHorizontal="true"
android:layout_above="@+id/linearLayout" />
实际上,Wikitude Architect View由摄像机流的渲染和渲染的渲染组成,如下图所示: Architect View Composition
sample_cam.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<com.wikitude.architect.ArchitectView
android:id="@+id/architectView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
有没有办法用我的 TextureView 的内容替换Wikitude Architect View的当前相机流?
或者,是否有办法将ArchitectView的相机流作为透明背景,以便将此图层重叠为 TextureView 一个?
以下内容可能是.xml最终文件代码的一部分:
<TextureView
android:id="@+id/video_previewer_surface"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_centerHorizontal="true"
android:layout_above="@+id/linearLayout" />
<com.wikitude.architect.ArchitectView // with transparent background for camera
android:id="@+id/architectView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
答案 0 :(得分:1)
您可以结合Wikitude Input Plugin实施自己的dji's Video Stream Decoding。因此,您从dji sdk获取原始视频数据并将其传递给wikitude sdk。可以在wikitude示例应用程序中找到输入插件的示例代码,样本名称为“自定义相机”。
答案 1 :(得分:0)
亚历克斯回答是正确的,它的确有效。以下是一些更多细节: Wikitude输入插件可用于提供您自己的相机输入,您也可以应用自己的扩充和自己的渲染。请参阅Wikitude输入插件文档。
根据Wikitude示例,Custom Camera Plugin可用作起点。您开发自己的Camera Extension,并在构造函数中执行以下操作:
arVideoView = new SurfaceViewRenderer(activity);
arVideoView.setId(R.id.local_surface_rendeer);
LinearLayout.LayoutParams param1 = new LinearLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT,
1.0f
);
arVideoView.setLayoutParams(param1);
arVideoView.setKeepScreenOn(true);
architectView.addView(arVideoView);
在这种情况下,我将WebRTC摄像机视图添加到Architect视图中。
然后我实现了传入帧的回调。
// Implementation detail: bridge the VideoRenderer.Callbacks interface to the
// VideoStreamsView implementation.
public class VideoCallbacks implements VideoRenderer.Callbacks {
@Override
public void renderFrame(final VideoRenderer.I420Frame i420Frame) {
Log.v(TAG, "renderFrame ..."+i420Frame);
..将帧转换为nv21 Log.v(TAG,&#34; make byte array&#34;); byte [] b = getNV21(0,0,bmpRotate.getWidth(),bmpRotate.getHeight(),bmpRotate);
//并将框架传递给插件以进行进一步处理 notifyNewCameraFrameN21(B);
gotFrame = false;
}
});
}
}
希望这会有所帮助。快乐的编码! 菲尔