Bu sayfada, MP4 dosyalarının, video çekimi sırasında kamera hareketiyle ilgili meta verileri yerleştirmesine olanak tanıyan bir spesifikasyon açıklanmaktadır. Video kaydeden cihazlarda, genellikle kayıtla ilgili ek bilgi sağlayabilecek sensörler bulunur. Örneğin:
- Cep telefonlarında genellikle jiroskop, ivme ölçer, manyetometre ve GPS sensörleri bulunur.
- Sensör füzyonu, cihazların 3 derece serbestlik (3DoF) konumunu izlemek için kullanılabilir.
- Eş zamanlı yerelleştirme ve eşleme (SLAM), cihazın 6 serbestlik derecesini (ör. Tango) izlemek için kullanılabilir.
- Pozlama bilgileri, tarama başına hareketi incelemek için kullanılabilir.
Bu meta veriler, çeşitli uygulamalarda gelişmiş işleme sonrası için videoya kaydedilebilir. Örneğin:
- Videoları sabitlemek için kare düzeyinde döndürme bilgileri; yuvarlak deklanşör efektlerini azaltmak için kare düzeyinde hareket verileri kullanılabilir.
- IMU okumaları ve türetilen 3DoF duruşları, IMU ile kamera arasındaki zaman hizalamasını ve geometrik hizalamayı değerlendirmek için kullanılabilir.
Aşağıdaki bölümlerde, parçanın varlığını ve parça örneklerinin veri biçimini gösteren yeni bir örnek giriş içeren CAmera Motion Metadata (CAMM) kanalı belirtilmektedir.
Örnek giriş
Video dosyası, özel meta veri parçasını belirtmek için aşağıdaki örnek giriş kutusunu içermelidir ve parçanın subComponentType
değeri meta
olarak ayarlanmalıdır.
Camera Motion Metadata Sample Entry (camm) Definition Box Type: camm Container: stsd A sample entry indicating the data track that saves the camera motion. Syntax aligned(8) class CameraMotionMetadataSampleEntry extends SampleEntry('camm') { }
Veri biçimi
Meta veri kanalı, aşağıdaki şekilde biçimlendirilmiş meta veri örnekleri akışı içerir.
Alan | Birim | Açıklama |
---|---|---|
uint16 reserved; |
Ayırtıldı. 0 olmalıdır. | |
uint16 type; |
Veri paketinin türü (aşağıya bakın). Her paketin bir veri türü vardır. | |
switch (type) { |
||
case 0: float angle_axis[3]; break; |
Yerel kamera koordinatlarından dünya koordinat sistemine döndürmeyi temsil eden radyan cinsinden açı ekseni yönü. Dünya koordinat sistemi uygulamalar tarafından tanımlanır. M, açı ekseninin vektörüne karşılık gelen 3x3 döndürme matrisi olsun. Yerel koordinat sistemindeki tüm ışın X için, dünya koordinatındaki ışın yönü M * X'tir. Bu bilgiler, cihazda 3DoF sensör füzyonu çalıştırılarak elde edilebilir. IMU okumaları entegre edildikten sonra yalnızca entegre dünya yönü kaydedilmelidir. Üç değer, açı ekseni vektörünü temsil eder. Böylece radyan cinsinden döndürme açısı, vektörün uzunluğu ve dönüş ekseni de normalleştirilmiş vektör tarafından verilir. Kodlanmış gösterim, Kodlanmış temsil de |
|
case 1: int32 pixel_exposure_time; int32 rolling_shutter_skew_time; break; |
nanosaniye |
Bu meta veri, video çerçevesi başınadır. Bu meta verilerin sunum zamanı (PTS), bir video çerçevesindeki ilk kullanılan kısa açıklamanın karşılaşma süresinin başlangıcı olmalıdır. pixel_exposure_time_ns, nanosaniyedeki tek bir pikselin pozlama süresidir. rolling_shutter_skew_time_ns ise ilk kullanılan kısa çizgi ile son kullanılan kısa çizginin karşılaşma arasındaki gecikmedir. Tarama başına meta verileri karıştırmak için kullanılabilirler. İlgili çerçevenin PTS değeri pts_of_this_metadata ile pts_of_this_metadata + pixel_exposure_time_ns + Roll_shutter_skew_time_ns aralığında olmalıdır. Bu bilgiler kaydedilmediğinde cihaz, video karesinin PTS'sini kare pozlamasının ortasında olacak şekilde ayarlamaya çalışır. |
case 2: float gyro[3]; break; |
radyan/saniye |
Kameranın XYZ eksenleri üzerindeki radyan/saniye cinsinden jiroskop sinyali. Döndürme, saat yönünün tersine pozitiftir. Uygulamalar, IMU koordinat sistemi ile kamera koordinat sistemi arasındaki ilişkiyi tanımlar. Mümkünse bu öğeleri uyumlu hale getirmenizi öneririz. İlk jiroskop okumalarının, sürücüsü tarafından tanımlanan IMU koordinat sisteminde olduğunu ve bunu kamera koordinat sistemine dönüştürmek için uygun dönüşümün gerektiğini unutmayın. Android Sensörü.TYPE_GYROSCOPE'a bakın. |
case 3: float acceleration[3]; break; |
metre/saniye^2 |
Kameranın XYZ eksenleri boyunca ivme ölçer/saniye^2 şeklinde okunur. Uygulamalar, IMU koordinat sistemi ile kamera koordinat sistemi arasındaki ilişkiyi tanımlar. Mümkünse bu öğeleri uyumlu hale getirmenizi öneririz. Android Sensörü.TYPE_ACCELEROMETER'a bakın. |
case 4: float position[3]; break; |
Kameranın 3D konumu. 3D konum ve açılı eksen döndürme, kameranın 6DoF konumunu tanımlar ve uygulama tanımlı ortak bir koordinat sisteminde yer alır. Bu bilgileri, cihazda 6DoF izlemeyi çalıştırarak alabilirsiniz. |
|
case 5: double latitude; double longitude; double altitude; break; |
derece |
Örnekle ilgili minimum GPS koordinatı. |
case 6: double time_gps_epoch; int gps_fix_type; double latitude; double longitude; float altitude; float horizontal_accuracy; float vertical_accuracy; float velocity_east; float velocity_north; float velocity_up; float speed_accuracy; break; |
seconds degrees degrees meters meters meters meters/seconds meters/seconds meters/seconds meters/seconds |
time_gps_epoch: Ölçümün alındığı GPS döneminden bu yana geçen süre gps_fix_type - 0 ( düzeltme yok), 2 (2D düzeltme), 3 (3D düzeltme) Enlem - Derece cinsinden enlem boylam - Derece rakım: WGS-84 elipsoid'in yüksekliği Yatay_doğruluk - Yatay (enlem/uzun) doğruluk vertical_accuracy - Dikey (rakım) doğruluk velocity_east - Doğu yönünde hız velocity_north - Kuzey yönündeki hız velocity_up - Yukarı doğru hız speed_accuracy - Hız doğruluğu |
case 7: float magnetic_field[3]; break; |
Microtesla |
Ortam manyetik alan. Android Sensörü.TYPE_MAGNETIC_FIELD alanına bakın. |
} |
Notlar
- Her bir MP4 dosyası için yalnızca bir CAMM kanalı olmalıdır. Yukarıdaki veri türlerinin tümünü karıştırarak içerir.
- 5. ve 6. durumdaki GPS örnekleri, sensörler tarafından oluşturulan ham değerler olmalıdır. Bu modeller, GPS değişikliği olmadığında interpolasyon yapamaz veya tekrarlanamaz.
- Koordinat sistemleri sağ taraftadır. Kamera koordinat sistemi; X'i sağa, Y'yi aşağı ve İleri Z olarak tanımlanır. Küresel koordinat sisteminin Y ekseni, yerçekimi vektörü boyunca işaret etmelidir.
- IMU okumaları genellikle ayrı bir IMU koordinat sistemindedir ve iki koordinat sistemi farklıysa bunları kamera koordinat sistemiyle eşlemek için döndürme gerekir.
- Tüm alanlar küçük boyutludur (en az önemli bayt) ve 32 bitlik kayan noktalar IEEE 754-1985 biçimindedir.
- Video çerçevesinin ve meta verilerin doğru şekilde senkronize edilebilmesi için video karesinin PTS'sinin, odak noktasının merkezinde olması gerekir (bu, pozlama meta verilerinden de elde edilebilir).
- Bu verileri karıştıran uygulama, doğru bir PTS değeri elde etmek için yeterli büyüklükte bir zaman ölçeği seçmelidir.
Olası sorunlar
-
Bu tasarım, veri örneği başına yalnızca bir pakete izin verir. Yerleştirilmiş cihazlar, G/Ç basıncının yanı sıra başlık boyutunu (örneğin,
stsc
vestsz
atomları) artırdığı için çok yüksek frekanslı paketler yazarken sorun yaşayabilir. - Farklı türlerdeki verilerin farklı gecikmelerde kullanılması, paketlere dosya yazıldığında PTS'nin ileri ve geri gitmesine neden olabilir. Ancak, bu işlem paketlerin arabelleğe alınması ve monoton bir sırayla yazılmasıyla önlenebilir.