Az Azure Kinect lejátszási API
Az érzékelő SDK egy API-t biztosít az eszközadatok matroska (.mkv) fájlba történő rögzítéséhez. A Matroska tárolóformátum videosávokat, IMU-mintákat és eszközkalibráló eszközöket tárol. A felvételek a megadott k4arecorder parancssori segédprogrammal hozhatók létre. A felvételeket közvetlenül a rekord API-val is testre szabhatja és rögzítheti.
A rögzítési API-val kapcsolatos további információkért lásd: k4a_record_create()
.
A Matroska fájlformátum-specifikációiról további információt a Fájlformátum rögzítése oldalon talál.
A lejátszási API használata
A rögzítési fájlok a lejátszási API-val nyithatók meg. A lejátszási API az érzékelőadatokhoz az érzékelő SDK többi részével azonos formátumban biztosít hozzáférést.
Rekordfájl megnyitása
Az alábbi példában megnyitunk egy felvételt a használatával k4a_playback_open()
, kinyomtatjuk a felvétel hosszát, majd bezárjuk a fájlt a paranccsal 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);
Olvasási rögzítések
A fájl megnyitása után megkezdhetjük a rögzítések olvasását a felvételből. Ez a következő példa beolvassa a fájlban lévő összes rögzítést.
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;
}
Keresés egy felvételen belül
Miután elértük a fájl végét, érdemes lehet visszamenni, és újra elolvasni. Ez a folyamat lehet, ha visszafelé olvas a -vel k4a_playback_get_previous_capture()
, de a felvétel hosszától függően nagyon lassú lehet.
Ehelyett használhatjuk a függvényt a k4a_playback_seek_timestamp()
fájl egy adott pontjára való ugráshoz.
Ebben a példában időbélyegeket adunk meg mikroszekundumokban a fájl különböző pontjainak kereséséhez.
// 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;
}
Címkeinformációk olvasása
A felvételek különböző metaadatokat is tartalmazhatnak, például az eszköz sorozatszámát és a belső vezérlőprogram verzióit. Ez a metaadatok rögzítési címkékben találhatók, amelyek a k4a_playback_get_tag()
függvény használatával érhetők el.
// 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");
}
Rekordcímkelista
Az alábbi lista tartalmazza az összes alapértelmezett címkét, amely szerepelhet a felvételi fájlban. Ezek közül az értékek közül sok a szerkezet részeként k4a_record_configuration_t
érhető el, és a k4a_playback_get_record_configuration()
függvénnyel is olvasható.
Ha egy címke nem létezik, a rendszer azt feltételezi, hogy az alapértelmezett értékkel rendelkezik.
Címke neve | Alapértelmezett érték | k4a_record_configuration_t Mező |
Jegyzetek |
---|---|---|---|
K4A_COLOR_MODE |
"KI" | color_format / color_resolution |
Lehetséges értékek: "KI", "MJPG_1080P", "NV12_720P", "YUY2_720P", és így tovább |
K4A_DEPTH_MODE |
"KI" | depth_mode / depth_track_enabled |
Lehetséges értékek: "KI, "NFOV_UNBINNED", "PASSIVE_IR", és így tovább |
K4A_IR_MODE |
"KI" | depth_mode / ir_track_enabled |
Lehetséges értékek: "KI", "AKTÍV", "PASSZÍV" |
K4A_IMU_MODE |
"KI" | imu_track_enabled |
Lehetséges értékek: "BE", "KI" |
K4A_CALIBRATION_FILE |
"calibration.json" | N/A | Lásd: k4a_device_get_raw_calibration() |
K4A_DEPTH_DELAY_NS |
"0" | depth_delay_off_color_usec |
A nanoszekundumokban tárolt érték, az API mikroszekundumokat biztosít. |
K4A_WIRED_SYNC_MODE |
"ÖNÁLLÓ" | wired_sync_mode |
Lehetséges értékek: "ÖNÁLLÓ", "MASTER", "BEOSZTOTT" |
K4A_SUBORDINATE_DELAY_NS |
"0" | subordinate_delay_off_master_usec |
A nanoszekundumokban tárolt érték, az API mikroszekundumokat biztosít. |
K4A_COLOR_FIRMWARE_VERSION |
"" | N/A | Eszköz színe belső vezérlőprogram verziója, például "1.x.xx" |
K4A_DEPTH_FIRMWARE_VERSION |
"" | N/A | Eszközmélység belső vezérlőprogramjának verziója, például "1.x.xx" |
K4A_DEVICE_SERIAL_NUMBER |
"" | N/A | Eszköz sorozatszámának rögzítése |
K4A_START_OFFSET_NS |
"0" | start_timestamp_offset_usec |
Lásd alább az időbélyeg-szinkronizálást . |
K4A_COLOR_TRACK |
None | N/A | Lásd: Fájlformátum rögzítése – Zeneszámok azonosítása. |
K4A_DEPTH_TRACK |
None | N/A | Lásd: Fájlformátum rögzítése – Zeneszámok azonosítása. |
K4A_IR_TRACK |
None | N/A | Lásd: Fájlformátum rögzítése – Zeneszámok azonosítása. |
K4A_IMU_TRACK |
None | N/A | Lásd: Fájlformátum rögzítése – Zeneszámok azonosítása. |
Időbélyeg-szinkronizálás
A Matroska formátum megköveteli, hogy a felvételeknek nulla időbélyeggel kell kezdődniük. A kamerák külső szinkronizálása esetén az egyes eszközök első időbélyege nem nulla lehet.
Az eszközök eredeti időbélyegeinek a rögzítés és a lejátszás közötti megőrzése érdekében a fájl eltolást tárol az időbélyegekre való alkalmazáshoz.
A K4A_START_OFFSET_NS
címke időbélyeg-eltolás megadására szolgál, hogy a fájlok a felvétel után újraszinkronizálhatók legyenek. Ez az időbélyeg-eltolás hozzáadható a fájl minden egyes időbélyegéhez az eredeti eszköz időbélyegeinek rekonstruálása érdekében.
A start eltolás a szerkezetben k4a_record_configuration_t
is elérhető.