stco (Chunk Offset Box)

Created
Jan 23, 2022 10:00 AM
Tags
Box Type: ‘stco’, ‘co64’ Container: Sample Table Box (‘stbl’) Mandatory: Yes Quantity: Exactly one variant must be present
 
chunk在文件中的偏移量。针对小文件、大文件,有两种不同的box类型,分别是stco、co64,它们的结构是一样的,只是字段长度不同。
chunk_offset 指的是在文件本身中的 offset,而不是某个box内部的偏移。
在构建mp4文件的时候,需要特别注意 moov 所处的位置,它对于chunk_offset 的值是有影响的。有一些MP4文件的 moov 在文件末尾,为了优化首帧速度,需要将 moov 移到文件前面,此时,需要对 chunk_offset 进行改写。
 
use crate::atoms::*; #[derive(Debug, Clone, PartialEq, Default)] pub struct StcoBox { pub version: u8, pub flags: u32, #[serde(skip_serializing)] pub entries: Vec<u32>, } impl StcoBox { pub fn get_type(&self) -> BoxType { BoxType::StcoBox } pub fn get_size(&self) -> u64 { HEADER_SIZE + HEADER_EXT_SIZE + 4 + (4 * self.entries.len() as u64) } } impl Mp4Box for StcoBox { fn box_type(&self) -> BoxType { return self.get_type(); } fn box_size(&self) -> u64 { return self.get_size(); } fn to_json(&self) -> Result<String> { Ok(serde_json::to_string(&self).unwrap()) } fn summary(&self) -> Result<String> { let s = format!("entries={}", self.entries.len()); Ok(s) } }