diff --git a/library/container/flv/src/amf0/amf0_markers.rs b/library/container/flv/src/amf0/amf0_markers.rs index 2fe1e99e..66eb9843 100644 --- a/library/container/flv/src/amf0/amf0_markers.rs +++ b/library/container/flv/src/amf0/amf0_markers.rs @@ -5,4 +5,5 @@ pub const OBJECT: u8 = 0x03; pub const NULL: u8 = 0x05; pub const ECMA_ARRAY: u8 = 0x08; pub const OBJECT_END: u8 = 0x09; +pub const STRICT_ARRAY: u8 = 0x0a; pub const LONG_STRING: u8 = 0x0c; diff --git a/library/container/flv/src/amf0/amf0_reader.rs b/library/container/flv/src/amf0/amf0_reader.rs index 5b5ca65a..d9287dfc 100644 --- a/library/container/flv/src/amf0/amf0_reader.rs +++ b/library/container/flv/src/amf0/amf0_reader.rs @@ -48,6 +48,7 @@ impl Amf0Reader { amf0_markers::NULL => self.read_null(), amf0_markers::ECMA_ARRAY => self.read_ecma_array(), amf0_markers::LONG_STRING => self.read_long_string(), + amf0_markers::STRICT_ARRAY => self.read_strict_array(), _ => Err(Amf0ReadError { value: Amf0ReadErrorValue::UnknownMarker { marker: markers }, }), @@ -155,6 +156,19 @@ impl Amf0Reader { Ok(Amf0ValueType::LongUTF8String(val)) } + pub fn read_strict_array(&mut self) -> Result { + let l = self.reader.read_u32::()?; + + let mut properties = IndexMap::new(); + + for i in 0..l { + let val = self.read_any()?; + properties.insert(i.to_string(), val); + } + + Ok(Amf0ValueType::Object(properties)) + } + // pub fn get_remaining_bytes(&mut self) -> BytesMut { // return self.reader.get_remaining_bytes(); // }