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ő.