本頁說明允許嵌入 MP4 檔案的規格 。能夠擷取影片的裝置通常都有 可提供拍攝額外資訊。例如:
- 手機通常附有陀螺儀、加速計、磁力儀和 GPS 的感應器。
- 感應器融合功能可用來追蹤 3 度自由度 (3DoF) 的裝置姿勢。
- 同時本地化和繪製地圖 (SLAM) 可用於追蹤 6 度自由度 (6DoF) 裝置的姿勢 (例如 Tango)。
- 暴露資訊可用於插入每個掃描的運動。
這些中繼資料可儲存在影片中,以便用於各種應用程式的進階後續處理。 例如:
- 畫面層級旋轉資訊可用於使影片穩定,以及使用掃描層級的動態資料來減少滾動式快門效果。
- IMU 讀取和衍生的 3DoF 姿勢可用於評估 IMU 和相機之間的時間對齊和幾何對齊。
以下各節指定了 CAmera Motion Metadata (CAMM) 音軌,其中包含新樣本 項目,指出音軌是否存在,以及音軌樣本的資料格式。
範例項目
影片檔案應包含下列範例輸入方塊,以指出自訂中繼資料
音軌,音軌的 subComponentType
應設為 meta
。
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') { }
資料格式
中繼資料曲目包含中繼資料樣本的串流,格式如下。
欄位 | 單位 | 說明 |
---|---|---|
uint16 reserved; |
預留。應為 0。 | |
uint16 type; |
資料封包的類型 (請見下文)。每個封包都有一種類型的資料。 | |
switch (type) { |
||
case 0: float angle_axis[3]; break; |
角度軸方向 (以弧度為單位),代表從本機相機座標到世界座標系統的旋轉角度。世界座標系統是由應用程式定義。 容 M 是對應角軸向量的 3x3 旋轉矩陣。針對本機座標系統的任何灰色 X,世界座標的射線方向為 M * X。 您可以在裝置上執行 3DoF 感應器融合,取得這項資訊。整合 IMU 讀數後,您只需要記錄整合式全域螢幕方向即可。 三個值代表角度軸的向量,因此以弧度為單位的旋轉角度是以向量長度為準,旋轉軸則是由正規化向量指定。 您可以使用 此外,編碼表示法可以使用 |
|
case 1: int32 pixel_exposure_time; int32 rolling_shutter_skew_time; break; |
奈秒 |
這項中繼資料是每個影片影格。這份中繼資料的顯示時間 (PTS) 拍片中第一次使用的掃描線開始。 pixel_exposure_time_ns 是指單一像素在 奈秒和 rolling_shutter_skew_time_ns 則是指 首次使用的掃描線和上次使用的掃描線暴露。這類模型可用於 來插入每個掃描項目的中繼資料。 相應畫面的 PTS 應在 pts_of_this_metadata 和 pts_of_this_metadata + pixel_exposure_time_ns +roll_shutter_skew_time_ns. 若未儲存這些資訊,裝置會盡可能嘗試 將影片影格的 PTS 調整為影格曝光中心的位置。 |
case 2: float gyro[3]; break; |
弧度/秒 |
相機 XYZ 軸周圍的陀螺儀訊號 (以弧度/秒為單位)。旋轉為 以逆時針方向指向正值 應用程式會定義 IMU 座標系統和相機之間的關係 座標系統建議您盡量採用一致的規則。 請注意,初始陀螺儀讀數位於其驅動程式定義的 IMU 座標系統。 需要進行適當的轉換,才能將其轉換成相機座標系統。 請參閱 Android Sensor.TYPE_GYROSCOPE。 |
case 3: float acceleration[3]; break; |
公尺/秒^2 |
沿著相機 XYZ 軸移動的加速計讀數 (單位為公尺/秒^2)。 應用程式會定義 IMU 座標系統和相機之間的關係 座標系統建議您盡量採用一致的規則。 請參閱「Android Sensor.TYPE_ACCELEROMETER」。 |
case 4: float position[3]; break; |
相機的 3D 位置。3D 位置和角度軸的旋轉角度會共同定義 6DoF 的姿勢,以及常見的應用程式定義座標 有些人會將 Cloud Storage 視為檔案系統 但實際上不是 只要在裝置上執行 6DoF 追蹤功能,就能取得這項資訊。 |
|
case 5: double latitude; double longitude; double altitude; break; |
度數 |
樣本的最小 GPS 座標。 |
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 - 自 GPS 紀元開始測量的時間 gps_fix_type:0 ( 沒有修正)、2 (2D 修正)、3 (3D 修正) latitude - 緯度度數 經度 - 經度,以度為單位 海拔高度 - 高於 WGS-84 橢球體的高度 horizontal_accuracy - 水平 (經緯度) 準確性 vertical_accuracy:產業 (海拔高度) 準確性 velocity_east - 往東方向的速率 velocity_north - 北方的速率 velocity_up - 往上速度的速率 speed_accuracy - 速度準確度 |
case 7: float magnetic_field[3]; break; |
微特拉 |
環境磁場。 請參閱 Android Sensor.TYPE_MAGNETIC_FIELD。 |
} |
附註
- 每個 MP4 檔案只能有一個 CAMM 音軌,其中包含上述所有資料類型 多工處理即可
- 在案件 5 和 6 的情況下,GPS 樣本必須是感應器產生的原始值。換句話說 在沒有 GPS 變更時插入或重複。
- 座標系統位於右側。相機座標系統定義為 X 也就是 Y 指向向下、Z 方向指向前方全球衛星定位系統的 Y 軸 座標系統應沿著重心向量向下指向。
- IMU 讀數通常位於獨立的 IMU 座標系統,必須旋轉 如果兩個座標系統不同,則將其對應至相機座標系統。
- 所有欄位均為小由小到大排列 (優先度最低的位元組),以及 32 位元的浮動值 點的格式為 IEEE 754-1985。
- 為了準確同步處理影片影格和中繼資料,影片影格的 PTS 資料 需位於曝光中心 (也可透過曝光中繼資料推斷)。
- 混合這項資料的應用程式應選擇夠長的時間量, 取得精確的 PTS
潛在問題
-
採用這項設計時,每個資料樣本只能有一個封包。內嵌裝置可能會有寫入問題
頻率偏高的封包,因為這樣會增加 I/O 壓力和標頭大小
(例如
stsc
和stsz
Atom)。 - 混合不同類型的資料並具有不同的延遲時間,可能會導致 PTS 持續 並在封包寫入檔案時反向。不過,只要達成這個目標 緩衝封包,並按單調順序寫入。