Azure Kinect oynatma API 'SI

Algılayıcı SDK 'sı, cihaz verilerini bir Matroska (. MKV) dosyasına kaydetmek için bir API sağlar. Matroska kapsayıcı biçimi video izlemelerini, ıMU örneklerini ve cihaz ayarlama 'yı depolar. Kayıtlar, belirtilen k4arecorder komut satırı yardımcı programı kullanılarak oluşturulabilir. Kayıtlar Ayrıca kayıt API 'SI kullanılarak özelleştirilebilir ve doğrudan kaydedilebilir.

Kayıt API 'SI hakkında daha fazla bilgi için bkz k4a_record_create() ..

Matroska dosya biçimi belirtimleri hakkında daha fazla bilgi için bkz. kayıt dosyası biçimi sayfası.

Kayıttan yürütme API 'sini kullanma

Kayıt dosyaları, kayıttan yürütme API 'SI kullanılarak açılabilir. Kayıttan yürütme API 'SI, algılayıcı SDK 'sının geri kalanı ile aynı biçimdeki algılayıcı verilerine erişim sağlar.

Bir kayıt dosyası açın

Aşağıdaki örnekte, kullanarak bir kayıt açıyoruz k4a_playback_open() , kayıt uzunluğunu yazdırdık ve sonra dosyayı ile kapattık 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);

Yakalamaları okuyun

Dosya açıldıktan sonra kayıttan yakalamaları okumaya başlayabiliriz. Bu sonraki örnek dosyadaki yakalamalarından her birini okur.

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

Kayıt içinde ara

Dosyanın sonuna ulaştıktan sonra geri dönüp yeniden okumak isteyebilirsiniz. Bu işlem, ile geriye doğru okunarak yapılabilir k4a_playback_get_previous_capture() , ancak kaydın uzunluğuna bağlı olarak çok yavaş olabilir. Bunun yerine, bu k4a_playback_seek_timestamp() işlevi, dosyadaki belirli bir noktaya gitmek için kullanabiliriz.

Bu örnekte, dosyadaki çeşitli noktaları aramak için mikrosaniye cinsinden zaman damgaları belirttik.

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

Etiket bilgisini oku

Kayıtlar, cihaz seri numarası ve bellenim sürümleri gibi çeşitli meta verileri de içerebilir. Bu meta veriler, işlevi kullanılarak erişilebilen kayıt etiketlerinde depolanır k4a_playback_get_tag() .

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

Etiket listesini Kaydet

Aşağıda bir kayıt dosyasına dahil olabilecek tüm varsayılan etiketlerin listesi verilmiştir. Bu değerlerin birçoğu yapının bir parçası olarak kullanılabilir k4a_record_configuration_t ve k4a_playback_get_record_configuration() işleviyle okunabilir.

Bir etiket yoksa, varsayılan değere sahip olduğu varsayılır.

Etiket Adı Varsayılan değer k4a_record_configuration_t Alanla Notlar
K4A_COLOR_MODE DıŞıNA color_format / color_resolution Olası değerler: "OFF", "MJPG_1080P", "NV12_720P", "YUY2_720P" vb.
K4A_DEPTH_MODE DıŞıNA depth_mode / depth_track_enabled Olası değerler: "OFF," NFOV_UNBINNED "," PASSIVE_IR ", vb.
K4A_IR_MODE DıŞıNA depth_mode / ir_track_enabled Olası değerler: "OFF", "ETKIN", "pasıf"
K4A_IMU_MODE DıŞıNA imu_track_enabled Olası değerler: "açık", "kapalı"
K4A_CALIBRATION_FILE "Üzerinde calibration.js" Yok Bakýn k4a_device_get_raw_calibration()
K4A_DEPTH_DELAY_NS "0" depth_delay_off_color_usec Değer nanosaniye olarak depolandı, API mikrosaniye sağlar.
K4A_WIRED_SYNC_MODE ETIKETE wired_sync_mode Olası değerler: "STANDALONE", "MASTER", "AST"
K4A_SUBORDINATE_DELAY_NS "0" subordinate_delay_off_master_usec Değer nanosaniye olarak depolandı, API mikrosaniye sağlar.
K4A_COLOR_FIRMWARE_VERSION "" Yok Cihaz rengi üretici yazılımı sürümü, örneğin "1. x. xx"
K4A_DEPTH_FIRMWARE_VERSION "" Yok Cihaz derinliği üretici yazılımı sürümü, örneğin "1. x. xx"
K4A_DEVICE_SERIAL_NUMBER "" Yok Cihaz seri numarasını kaydetme
K4A_START_OFFSET_NS "0" start_timestamp_offset_usec Aşağıdaki zaman damgası eşitleme bölümüne bakın.
K4A_COLOR_TRACK Hiçbiri Yok Bkz. kayıt dosyası biçim-parçaları belirleme.
K4A_DEPTH_TRACK Hiçbiri Yok Bkz. kayıt dosyası biçim-parçaları belirleme.
K4A_IR_TRACK Hiçbiri Yok Bkz. kayıt dosyası biçim-parçaları belirleme.
K4A_IMU_TRACK Hiçbiri Yok Bkz. kayıt dosyası biçim-parçaları belirleme.

Zaman damgası eşitleme

Matroska biçimi kayıtların sıfır zaman damgasıyla başlaması gerekir. Kameraları dışarıdan eşitlerken, her cihazdan alınan ilk zaman damgası sıfır dışında olabilir.

Kayıt ve kayıttan yürütme arasındaki cihazlardan gelen özgün zaman damgalarını korumak için dosya, zaman damgalarına uygulanacak bir konum depolar.

K4A_START_OFFSET_NSEtiketi, dosyanın kaydedildikten sonra yeniden eşitlenmesi için zaman damgası uzaklığı belirtmek için kullanılır. Bu zaman damgası, özgün cihaz zaman damgalarını yeniden oluşturmak için dosyadaki her bir zaman damgasına eklenebilir.

Başlangıç boşluğu yapı içinde de kullanılabilir k4a_record_configuration_t .