Rozhraní API pro přehrávání Azure Kinect
Sada SDK senzorů poskytuje rozhraní API pro záznam dat zařízení do souboru Matroska (.mkv). Ve formátu kontejneru Matroska jsou uloženy stopy videa, ukázky IMU a zařízení. Nahrávky je možné generovat pomocí poskytnutého nástroje příkazového řádku k4arecorder. Nahrávky je také možné přizpůsobit a zaznamenat přímo pomocí rozhraní API pro záznamy.
Další informace o rozhraní API pro záznam najdete v tématu k4a_record_create() .
Další informace o specifikacích formátu souboru Matroska najdete na stránce Formát souboru záznamu.
Použití rozhraní API pro přehrávání
Soubory pro záznam můžete otevřít pomocí rozhraní API pro přehrávání. Rozhraní API pro přehrávání poskytuje přístup k datům senzorů ve stejném formátu jako zbytek sady SDK senzorů.
Otevření souboru záznamu
V následujícím příkladu otevřete záznam pomocí příkazu , vytiskněte délku záznamu a k4a_playback_open() pak soubor zavřete pomocí 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);
Zachytávání čtení
Jakmile je soubor otevřený, můžeme z nahrávky začít číst zachytávání. Tento další příklad přečte všechny zachytávání v souboru .
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;
}
Hledání v rámci nahrávky
Po dosažení konce souboru se možná budeme chtít vrátit a znovu si ho přečíst. Tento proces je možné provést čtením zpět pomocí , ale v závislosti na délce záznamu může být velmi k4a_playback_get_previous_capture() pomalý.
Místo toho můžeme pomocí k4a_playback_seek_timestamp() funkce přejít na konkrétní bod v souboru.
V tomto příkladu určíme časová razítka v mikrosekundách pro hledání různých bodů v souboru.
// 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;
}
Čtení informací o značce
Nahrávky mohou také obsahovat různá metadata, jako je sériové číslo zařízení a verze firmwaru. Tato metadata jsou uložená v záznamech značek, ke kterým je možné přistupovat pomocí k4a_playback_get_tag() funkce .
// 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");
}
Seznam značek záznamů
Níže je seznam všech výchozích značek, které mohou být zahrnuty v souboru záznamu. Mnohé z těchto hodnot jsou k dispozici jako součást struktury a k4a_record_configuration_t lze je číst pomocí funkce k4a_playback_get_record_configuration() .
Pokud značka neexistuje, předpokládá se, že má výchozí hodnotu.
| Název značky | Výchozí hodnota | k4a_record_configuration_t Pole |
Poznámky |
|---|---|---|---|
K4A_COLOR_MODE |
"OFF" | color_format / color_resolution |
Možné hodnoty: OFF, MJPG_1080P, NV12_720P, YUY2_720P a tak dále. |
K4A_DEPTH_MODE |
"OFF" | depth_mode / depth_track_enabled |
Možné hodnoty: OFF, NFOV_UNBINNED, PASSIVE_IR a tak dále. |
K4A_IR_MODE |
"OFF" | depth_mode / ir_track_enabled |
Možné hodnoty: OFF, ACTIVE, PASSIVE |
K4A_IMU_MODE |
"OFF" | imu_track_enabled |
Možné hodnoty: "ON", "OFF" |
K4A_CALIBRATION_FILE |
"calibration.json" | – | Viz k4a_device_get_raw_calibration() |
K4A_DEPTH_DELAY_NS |
"0" | depth_delay_off_color_usec |
Hodnota uložená v nanosekundách poskytuje rozhraní API mikrosekundy. |
K4A_WIRED_SYNC_MODE |
"STANDALONE" | wired_sync_mode |
Možné hodnoty: STANDALONE, MASTER, SUBORDINATE |
K4A_SUBORDINATE_DELAY_NS |
"0" | subordinate_delay_off_master_usec |
Hodnota uložená v nanosekundách poskytuje rozhraní API mikrosekundy. |
K4A_COLOR_FIRMWARE_VERSION |
"" | – | Verze firmwaru barvy zařízení, například 1.x.xx |
K4A_DEPTH_FIRMWARE_VERSION |
"" | – | Verze firmwaru hloubky zařízení, například 1.x.xx |
K4A_DEVICE_SERIAL_NUMBER |
"" | – | Záznam sériového čísla zařízení |
K4A_START_OFFSET_NS |
"0" | start_timestamp_offset_usec |
Viz Synchronizace časového razítka níže. |
K4A_COLOR_TRACK |
Žádná | – | Viz Formát souboru záznamu – identifikace stop. |
K4A_DEPTH_TRACK |
Žádná | – | Viz Formát souboru záznamu – identifikace stop. |
K4A_IR_TRACK |
Žádná | – | Viz Formát souboru záznamu – identifikace stop. |
K4A_IMU_TRACK |
Žádná | – | Viz Formát souboru záznamu – identifikace stop. |
Synchronizace časového razítka
Formát Matroska vyžaduje, aby nahrávky začaly s razítkem nula. Při externí synchronizaci fotoaparátůmůže být první časové razítko každého zařízení nenulové.
Pro zachování původních časových razítek ze zařízení mezi záznamem a přehráváním soubor uloží posun, který se použije na časová razítka.
Značka se používá k určení posunu časového razítka, aby bylo možné soubory po záznamu K4A_START_OFFSET_NS znovu synchronizovat. Tento posun časového razítka lze přidat ke každému časovému razítku v souboru, aby bylo možné rekonstruovat časová razítka původního zařízení.
Počáteční posun je k dispozici také ve k4a_record_configuration_t struktury .