• <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
      <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
    • <dfn id="2awkm"></dfn>
      <menu id="2awkm"><acronym id="2awkm"></acronym></menu>
      
      
      <rt id="2awkm"></rt><dfn id="2awkm"><code id="2awkm"></code></dfn>
    • <dd id="2awkm"><s id="2awkm"></s></dd>
      <tbody id="2awkm"></tbody>
    • <dfn id="2awkm"></dfn>
      <menu id="2awkm"><noscript id="2awkm"></noscript></menu>

      錄制和回放

      本文內容

      ● 使用回放API

      ● 時間戳同步

      傳感器SDK提供了用于將設備數(shù)據(jù)錄制到 Matroska (.mkv) 文件的 API 接口。 Matroska 容器格式可以存儲視頻數(shù)據(jù)、IMU數(shù)據(jù)和設備校準信息。您可以使用 k4arecorder 命令行工具進行錄制,也可以直接使用錄制 API 來錄制內容。

      有關錄制 API 的詳細信息,請參閱 k4a_record_create()

      有關 Matroska 文件格式規(guī)范的詳細信息,請參閱錄制文件格式頁。


      使用回放 API

      錄制文件可以使用回放 API 進行錄像回放。 通過回放 API 可以訪問格式與 SDK 相同的傳感器數(shù)據(jù)。


      打開錄制文件

      在以下示例中,我們將使用 k4a_playback_open() 打開一個錄制文件,輸出錄制長度,然后使用 k4a_playback_close() 關閉該文件。

      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;
      }


      在錄制內容中查找

      到達文件末尾后,我們可能需要返回并再次讀取。 若要完成此過程,可以使用 k4a_playback_get_previous_capture() 進行回讀,但根據(jù)錄制內容的長度,這種做法可能非常緩慢。 我們可以改用 k4a_playback_seek_timestamp() 函數(shù)轉到文件中的時間點。

      在此示例中,我們以微秒為單位指定了時間戳,以定位到文件中的各個時間點。

      // 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;
      }


      讀取標記信息

      錄制內容還可能包含各種元數(shù)據(jù),例如設備序列號和固件版本。 此元數(shù)據(jù)存儲在錄制標記中,可以使用 k4a_playback_get_tag() 函數(shù)來訪問。

      // 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_record_configuration_t 結構的一部分,可以使用 k4a_playback_get_record_configuration() 函數(shù)來讀取。

      如果某個標記不存在,則假設采用默認值。

      標記名稱

      默認值

      k4a_record_configuration_t 字段

      備注

      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_device_get_raw_calibration()

      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 標記用于指定時間戳偏移量,以便在錄制后可以重新同步文件。 可將此時間戳偏移量添加到文件中的每個時間戳,以重新構造原始設備時間戳。

      起始偏移量也會在 k4a_record_configuration_t 結構中提供。

      • <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
        <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
      • <dfn id="2awkm"></dfn>
        <menu id="2awkm"><acronym id="2awkm"></acronym></menu>
        
        
        <rt id="2awkm"></rt><dfn id="2awkm"><code id="2awkm"></code></dfn>
      • <dd id="2awkm"><s id="2awkm"></s></dd>
        <tbody id="2awkm"></tbody>
      • <dfn id="2awkm"></dfn>
        <menu id="2awkm"><noscript id="2awkm"></noscript></menu>
        台湾成人无码 | 国语粗话呻吟对白对白 | 91国内精品视频 | 警察直男被gay猛男狂cao | 欧美日韩在线观看一区二区三区 |