scuffle_flv/video/body/
legacy.rs1use std::io;
6
7use bytes::Bytes;
8use scuffle_bytes_util::BytesCursorExt;
9use scuffle_bytes_util::zero_copy::Deserialize;
10use scuffle_h264::AVCDecoderConfigurationRecord;
11
12use crate::video::header::legacy::{LegacyVideoTagHeader, LegacyVideoTagHeaderAvcPacket};
13
14#[derive(Debug, Clone, PartialEq)]
24pub enum LegacyVideoTagBody<'a> {
25 Command,
27 AvcVideoPacketSeqHdr(AVCDecoderConfigurationRecord<'a>),
29 Other {
31 data: Bytes,
33 },
34}
35
36impl LegacyVideoTagBody<'_> {
37 pub fn demux(header: &LegacyVideoTagHeader, reader: &mut io::Cursor<Bytes>) -> io::Result<Self> {
41 match header {
42 LegacyVideoTagHeader::VideoCommand(_) => Ok(Self::Command),
43 LegacyVideoTagHeader::AvcPacket(LegacyVideoTagHeaderAvcPacket::SequenceHeader) => {
44 let avc_decoder_configuration_record =
46 AVCDecoderConfigurationRecord::deserialize(scuffle_bytes_util::zero_copy::IoRead::from(reader))?;
47 Ok(Self::AvcVideoPacketSeqHdr(avc_decoder_configuration_record))
48 }
49 _ => Ok(Self::Other {
50 data: reader.extract_remaining(),
51 }),
52 }
53 }
54}