Sceneform SceneView 的视频录制

本开发者指南将引导您完成相关步骤,以便让您的应用将 Sceneform SceneView 录制到本地视频文件中。它使用 VideoRecorder 类中提供的功能,该类是从 1.6.0 版 Sceneform SDK for Android 开始的 VideoRecording 示例示例中提供的。

构建和运行示例应用

如需构建并运行 VideoRecording 示例应用,请执行以下操作:

  1. 确保您在 Android Studio 中有一个 Sceneform 项目,并且您的 Android 设备已通过 USB 连接到开发机器。如需了解详细步骤,请参阅快速入门
  2. VideoRecording 示例导入您的项目。
  3. 在 Android Studio 中,点击 Run 图标 。然后,选择您的设备作为部署目标,并点击确定以在设备上启动示例应用。
  4. 当您移动设备并将 3D 对象放入周围空间时,请点击“录制”按钮以开始录制,点击“停止”按钮停止录制。

您可以通过设备上的相机胶卷、名为 Sceneform 的影集或路径中访问录制的视频:

/sdcard/Pictures/Sceneform/Sample<hex characters>.mp4

简要介绍如何让应用支持 Sceneform 视频录制

如需让应用录制 Sceneform 场景,需要:

  1. 请求应用权限
  2. 初始化录像机
  3. 开始和停止录制视频

1. 请求应用权限

为了能够将视频文件写入本地存储空间,您的应用必须向 AndroidManifest.xml 添加以下行来请求 WRITE_EXTERNAL_STORAGE 权限:

<application>
  …
</application>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2. 初始化录像机

VideoRecording 示例包含一个名为 VideoRecorder 的类,该类封装了使用 MediaRecorderSceneView 对象捕获视频以创建视频所需的所有设置逻辑。

如需使用视频录制器,请在 Activity(例如 onCreate())中初始化 VideoRecorder 类。

// Create a new video recorder instance.
videoRecorder = new VideoRecorder();

// Specify the AR scene view to be recorded.
videoRecorder.setSceneView(arFragment.getArSceneView());

// Set video quality and recording orientation to match that of the device.
int orientation = getResources().getConfiguration().orientation;
videoRecorder.setVideoQuality(CamcorderProfile.QUALITY_2160P, orientation);

3. 创建视频录制

  1. 如需开始录制,请调用 onToggleRecord()

       // Returns true if recording has started.
       boolean recording = videoRecorder.onToggleRecord();
    
  2. 如需停止录制,请再次调用 onToggleRecord()

       // Returns false if recording has stopped.
       boolean recording = videoRecorder.onToggleRecord();
    
  3. 如需检索视频录制内容的文件路径,请使用 getVideoPath()

       // Determine absolute file path of video recording.
       String videoPath = videoRecorder.getVideoPath().getAbsolutePath();
    
  4. (可选)使用 adb 将录制的文件复制到开发机器:

adb pull /sdcard/…/path/to/recorded/video.mp4 .

为了确定图片和视频的正确位置,以使其正确显示在相机胶卷上,VideoRecord 类利用 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)