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 .