.iter() .flat_map(|(_, _, _, extensions)| extensions.first().cloned()) .collect::>(); extensions.sort(); Err(anyhow!( "unsupported file extension `.{extension}`, supported extensions: {}", extensions.join(" "), )) } pub(crate) fn check_mp4_codec(path: &Path) -> Result<(), Error> { let f = File::open(path)?; let size = f.metadata()?.len(); let reader = BufReader::new(f); let mp4 = Mp4Reader::read_header(reader, size)?; for track in mp4.tracks().values() { if let TrackType::Video = track.track_type()? { let media_type = track.media_type()?; if media_type != MediaType::H264 { return Err(anyhow!( "Unsupported video codec, only H.264 is supported in MP4: {media_type}" )); } } } Ok(()) } } impl FromStr for Media { type Err = Error; fn from_str(s: &str) -> Result { for entry in Self::TABLE { if entry.0 == s { return Ok(entry.2);