江南体育最新官方链接

江南体育最新官方链接

  • 录制和回放

    本文内容

    ● 使用回放API

    ● 时间戳同步

    传感器SDK提供了用于将设备数据录制到 Matroska (.mkv) 文件的 API 接口。 Matroska 容器格式可以存储视频数据、IMU数据和设备校准信息。您可以使用 k4arecorder 命令行工具进行录制,也可以直接使用录制 API 来录制内容。

    有关录制 API 的详细信息,请参阅 

    有关 Matroska 文件格式规范的详细信息,请参阅录制文件格式页。


    使用回放 API

    录制文件可以使用回放 API 进行录像回放。 通过回放 API 可以访问格式与 SDK 相同的传感器数据。


    打开录制文件

    在以下示例中,我们将使用  打开一个录制文件,输出录制长度,然后使用  关闭该文件。

    k4a_playback_t playback_handle = NULL;
    if (k4a_playback_open("recording.mkv", &playback_handle) != K4A_RESULT_SUCCEEDED)
    {
        printf("Failed to open recording\n");
        return 1;
    }
    uint64_t recording_length = k4a_playback_get_last_timestamp_usec(playback_handle);
    printf("Recording is %lld seconds long\n", recording_length / 1000000);
    k4a_playback_close(playback_handle);


    读取 Capture

    打开文件后,可以读取录制内容中的 Capture。 以下示例演示读取文件中的每个 Capture。

    k4a_capture_t capture = NULL;
    k4a_stream_result_t result = K4A_STREAM_RESULT_SUCCEEDED;
    while (result == K4A_STREAM_RESULT_SUCCEEDED)
    {
        result = k4a_playback_get_next_capture(playback_handle, &capture);
        if (result == K4A_STREAM_RESULT_SUCCEEDED)
        {
            // Process capture here
            k4a_capture_release(capture);
        }
        else if (result == K4A_STREAM_RESULT_EOF)
        {
            // End of file reached
            break;
        }
    }
    if (result == K4A_STREAM_RESULT_FAILED)
    {
        printf("Failed to read entire recording\n");
        return 1;
    }


    在录制内容中查找

    到达文件末尾后,我们可能需要返回并再次读取。 若要完成此过程,可以使用  进行回读,但根据录制内容的长度,这种做法可能非常缓慢。 我们可以改用  函数转到文件中的时间点。

    在此示例中,我们以微秒为单位指定了时间戳,以定位到文件中的各个时间点。

    // Seek to the beginning of the file
    if (k4a_playback_seek_timestamp(playback_handle, 0, K4A_PLAYBACK_SEEK_BEGIN) != K4A_RESULT_SUCCEEDED)
    {
        return 1;
    }
    // Seek to the end of the file
    if (k4a_playback_seek_timestamp(playback_handle, 0, K4A_PLAYBACK_SEEK_END) != K4A_RESULT_SUCCEEDED)
    {
        return 1;
    }
    // Seek to 10 seconds from the start
    if (k4a_playback_seek_timestamp(playback_handle, 10 * 1000000, K4A_PLAYBACK_SEEK_BEGIN) != K4A_RESULT_SUCCEEDED)
    {
        return 1;
    }
    // Seek to 10 seconds from the end
    if (k4a_playback_seek_timestamp(playback_handle, -10 * 1000000, K4A_PLAYBACK_SEEK_END) != K4A_RESULT_SUCCEEDED)
    {
        return 1;
    }


    读取标记信息

    录制内容还可能包含各种元数据,例如设备序列号和固件版本。 此元数据存储在录制标记中,可以使用  函数来访问。

    // Print the serial number of the device used to record
    char serial_number[256];
    size_t serial_number_size = 256;
    k4a_buffer_result_t buffer_result = k4a_playback_get_tag(playback_handle, "K4A_DEVICE_SERIAL_NUMBER", &serial_number, &serial_number_size);
    if (buffer_result == K4A_BUFFER_RESULT_SUCCEEDED)
    {
        printf("Device serial number: %s\n", serial_number);
    }
    else if (buffer_result == K4A_BUFFER_RESULT_TOO_SMALL)
    {
        printf("Device serial number too long.\n");
    }
    else
    {
        printf("Tag does not exist. Device serial number was not recorded.\n");
    }


    录制标记列表

    下面是可以包含在录制文件中的所有默认标记的列表。 其中的许多值可用作  结构的一部分,可以使用  函数来读取。

    如果某个标记不存在,则假设采用默认值。

    标记名称

    默认值

     字段

    备注

    K4A_COLOR_MODE

    "OFF"

    color_format / color_resolution

    可能的值:"OFF"、"MJPG_1080P"、"NV12_720P"、"YUY2_720P" 等

    K4A_DEPTH_MODE

    "OFF"

    depth_mode / depth_track_enabled

    可能的值:"OFF"、"NFOV_UNBINNED"、"PASSIVE_IR" 等

    K4A_IR_MODE

    "OFF"

    depth_mode / ir_track_enabled

    可能的值:"OFF"、"ACTIVE"、"PASSIVE"

    K4A_IMU_MODE

    "OFF"

    imu_track_enabled

    可能的值:"ON"、"OFF"

    K4A_CALIBRATION_FILE

    "calibration.json"

    不适用

    请参见

    K4A_DEPTH_DELAY_NS

    "0"

    depth_delay_off_color_usec

    值以纳秒为单位存储,API 以微秒为单位。

    K4A_WIRED_SYNC_MODE

    "STANDALONE"

    wired_sync_mode

    可能的值:"STANDALONE"、"MASTER"、"SUBORDINATE"

    K4A_SUBORDINATE_DELAY_NS

    "0"

    subordinate_delay_off_master_usec

    值以纳秒为单位存储,API 以微秒为单位。

    K4A_COLOR_FIRMWARE_VERSION

    ""

    不适用

    设备颜色固件版本,例如 "1.x.xx"

    K4A_DEPTH_FIRMWARE_VERSION

    ""

    不适用

    设备深度固件版本,例如 "1.x.xx"

    K4A_DEVICE_SERIAL_NUMBER

    ""

    不适用

    录制设备序列号

    K4A_START_OFFSET_NS

    "0"

    start_timestamp_offset_usec

    请参阅下面的时间戳同步。

    K4A_COLOR_TRACK

    None

    不适用

    请参阅录制文件格式 - 识别篇目

    K4A_DEPTH_TRACK

    None

    不适用

    请参阅录制文件格式 - 识别篇目

    K4A_IR_TRACK

    None

    不适用

    请参阅录制文件格式 - 识别篇目

    K4A_IMU_TRACK

    None

    不适用

    请参阅录制文件格式 - 识别篇目

     

    时间戳同步

    Matroska 格式要求录制内容必须以时间戳 0 开头。 使用多机同步时,每个设备中的第一个时间戳可以不为 0。

    为了在录制和播放之间切换时保留设备的原始时间戳,该文件会存储一个要应用到时间戳的偏移量。

    K4A_START_OFFSET_NS 标记用于指定时间戳偏移量,以便在录制后可以重新同步文件。 可将此时间戳偏移量添加到文件中的每个时间戳,以重新构造原始设备时间戳。

    起始偏移量也会在  结构中提供。