From d058c9659664281cb2d2319856af94ad43c2abd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 9 Aug 2022 15:19:29 +0300 Subject: [PATCH] fmp4: Update to m3u8-rs 5 --- generic/fmp4/Cargo.toml | 2 +- generic/fmp4/examples/hls_live.rs | 27 +++++++++++++-------------- generic/fmp4/examples/hls_vod.rs | 19 +++++++++++-------- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/generic/fmp4/Cargo.toml b/generic/fmp4/Cargo.toml index ce80b4bd..135f7f9d 100644 --- a/generic/fmp4/Cargo.toml +++ b/generic/fmp4/Cargo.toml @@ -25,7 +25,7 @@ path = "src/lib.rs" gst-app = { package = "gstreamer-app", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } gst-check = { package = "gstreamer-check", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } gst-pbutils = { package = "gstreamer-pbutils", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_20"] } -m3u8-rs = "4.0" +m3u8-rs = "5.0" chrono = "0.4" [build-dependencies] diff --git a/generic/fmp4/examples/hls_live.rs b/generic/fmp4/examples/hls_live.rs index 9918d907..4c8a1911 100644 --- a/generic/fmp4/examples/hls_live.rs +++ b/generic/fmp4/examples/hls_live.rs @@ -16,7 +16,7 @@ use std::path::{Path, PathBuf}; use std::sync::{Arc, Mutex}; use anyhow::{anyhow, Error}; -use chrono::{DateTime, Duration, SecondsFormat, Utc}; +use chrono::{DateTime, Duration, Utc}; use m3u8_rs::{ AlternativeMedia, AlternativeMediaType, MasterPlaylist, MediaPlaylist, MediaSegment, VariantStream, @@ -45,7 +45,7 @@ impl State { all_mimes.dedup(); let playlist = MasterPlaylist { - version: 7, + version: Some(7), variants: self .video_streams .iter() @@ -57,9 +57,12 @@ impl State { VariantStream { uri: path.as_path().display().to_string(), - bandwidth: stream.bitrate.to_string(), + bandwidth: stream.bitrate, codecs: Some(all_mimes.join(",")), - resolution: Some(format!("{}x{}", stream.width, stream.height)), + resolution: Some(m3u8_rs::Resolution { + width: stream.width, + height: stream.height, + }), audio: Some("audio".to_string()), ..Default::default() } @@ -124,9 +127,9 @@ struct StreamState { struct VideoStream { name: String, - bitrate: u32, - width: i32, - height: i32, + bitrate: u64, + width: u64, + height: u64, } struct AudioStream { @@ -185,7 +188,7 @@ fn update_manifest(state: &mut StreamState) { trim_segments(state); let playlist = MediaPlaylist { - version: 7, + version: Some(7), target_duration: 2.5, media_sequence: state.media_sequence, segments: state @@ -201,11 +204,7 @@ fn update_manifest(state: &mut StreamState) { ..Default::default() }), program_date_time: if idx == 0 { - Some( - segment - .date_time - .to_rfc3339_opts(SecondsFormat::Millis, false), - ) + Some(segment.date_time.into()) } else { None }, @@ -444,7 +443,7 @@ impl VideoStream { src.set_property("is-live", true); enc.set_property("bframes", 0u32); - enc.set_property("bitrate", self.bitrate / 1000u32); + enc.set_property("bitrate", self.bitrate as u32 / 1000u32); enc.set_property_from_str("tune", "zerolatency"); mux.set_property("fragment-duration", gst::ClockTime::from_mseconds(2500)); mux.set_property_from_str("header-update-mode", "update"); diff --git a/generic/fmp4/examples/hls_vod.rs b/generic/fmp4/examples/hls_vod.rs index 11c9ec81..d90bc5f5 100644 --- a/generic/fmp4/examples/hls_vod.rs +++ b/generic/fmp4/examples/hls_vod.rs @@ -33,9 +33,9 @@ struct StreamState { struct VideoStream { name: String, - bitrate: u32, - width: i32, - height: i32, + bitrate: u64, + width: u64, + height: u64, } struct AudioStream { @@ -68,7 +68,7 @@ impl State { all_mimes.dedup(); let playlist = MasterPlaylist { - version: 7, + version: Some(7), variants: self .video_streams .iter() @@ -80,9 +80,12 @@ impl State { VariantStream { uri: path.as_path().display().to_string(), - bandwidth: stream.bitrate.to_string(), + bandwidth: stream.bitrate, codecs: Some(all_mimes.join(",")), - resolution: Some(format!("{}x{}", stream.width, stream.height)), + resolution: Some(m3u8_rs::Resolution { + width: stream.width, + height: stream.height, + }), audio: Some("audio".to_string()), ..Default::default() } @@ -226,7 +229,7 @@ fn setup_appsink(appsink: &gst_app::AppSink, name: &str, path: &Path, is_video: println!("writing manifest to {}", path.display()); let playlist = MediaPlaylist { - version: 7, + version: Some(7), target_duration: 2.5, media_sequence: 0, segments: state @@ -335,7 +338,7 @@ impl VideoStream { src.set_property("num-buffers", 300); enc.set_property("bframes", 0u32); - enc.set_property("bitrate", self.bitrate / 1000u32); + enc.set_property("bitrate", self.bitrate as u32 / 1000u32); mux.set_property("fragment-duration", gst::ClockTime::from_mseconds(2500)); mux.set_property_from_str("header-update-mode", "update"); mux.set_property("write-mehd", true);