Skip to content
This repository was archived by the owner on Nov 11, 2025. It is now read-only.

Commit b0e45ed

Browse files
committed
remove HLS backend
1 parent 7240d01 commit b0e45ed

File tree

12 files changed

+123
-1793
lines changed

12 files changed

+123
-1793
lines changed

Cargo.lock

Lines changed: 3 additions & 105 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[workspace]
22
resolver = "2"
3-
members = [ "fcast-lib", "common", "receiver", "sender", "scap", "http", "android-sender", "testkit"]
3+
members = [ "fcast-lib", "common", "receiver", "sender", "scap", "android-sender", "testkit"]
44

55
[workspace.dependencies]
66
gst-video = { package = "gstreamer-video", version = "0.23.5" }

common/Cargo.toml

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,10 @@ gst-rtsp = { package = "gstreamer-rtsp", version = "0.23.5", optional = true}
1818
gst-rtsp-server = { package = "gstreamer-rtsp-server", version = "0.23.5", optional = true}
1919

2020
gio = { version = "0.20.9", optional = true }
21-
m3u8-rs = { version = "6.0.0", optional = true }
2221
futures = { workspace = true, optional = true }
2322
tokio-stream = { workspace = true, optional = true }
2423
mdns-sd = { workspace = true, optional = true }
2524

26-
http = { path = "../http", optional = true }
2725
fcast-lib = { path = "../fcast-lib", optional = true }
2826
crossbeam-channel = { version = "0.5.15", optional = true }
2927

@@ -42,9 +40,5 @@ glutin_glx_sys = { version = "0.6.1", optional = true }
4240

4341
[features]
4442
video = ["gst", "gst-app", "gst-video", "gst-gl", "gst-gl-egl", "gst-gl-x11", "glutin_egl_sys", "glutin_glx_sys",]
45-
sender = ["gst", "gst-video", "gio", "m3u8-rs", "gst-pbutils", "http", "crossbeam-channel", "gst-app", "futures",
46-
"fcast-lib", "tokio-stream", "mdns-sd", "gst-rtsp", "gst-rtsp-server",]
47-
48-
[dev-dependencies]
49-
quickcheck = "1"
50-
quickcheck_macros = "1"
43+
sender = ["gst", "gst-video", "gio", "gst-pbutils", "crossbeam-channel", "gst-app", "futures",
44+
"fcast-lib", "tokio-stream", "mdns-sd", "gst-rtsp", "gst-rtsp-server",]

common/src/sender/pipeline.rs

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
#[cfg(target_os = "android")]
1919
use super::transmission::rtp::RtpSink;
20-
use super::transmission::{self, TransmissionSink, hls::HlsSink};
20+
use super::transmission::{self, TransmissionSink};
2121
use anyhow::Result;
2222
use fcast_lib::models::PlayMessage;
2323
#[cfg(target_os = "android")]
@@ -28,6 +28,7 @@ use log::error;
2828
#[cfg(target_os = "android")]
2929
use std::future::Future;
3030
use std::net::IpAddr;
31+
use std::str::FromStr;
3132

3233
pub use transmission::init;
3334

@@ -177,57 +178,60 @@ impl Pipeline {
177178
})
178179
}
179180

181+
fn setup_video_source(pipeline: &gst::Pipeline, src: gst::Element) -> Result<gst::Element> {
182+
// TODO: needed?
183+
let videoflip = gst::ElementFactory::make("videoflip")
184+
.property_from_str("video-direction", "auto")
185+
.build()?;
186+
let videorate = gst::ElementFactory::make("videorate")
187+
.property("skip-to-first", true)
188+
.build()?;
189+
let capsfilter = gst::ElementFactory::make("capsfilter")
190+
.property("caps", gst::Caps::from_str("video/x-raw,framerate=30/1")?)
191+
.build()?;
192+
193+
// pipeline.add_many([&src, &videorate, &capsfilter])?;
194+
// gst::Element::link_many([&src, &videorate, &capsfilter])?;
195+
196+
pipeline.add_many([&src, &videoflip, &videorate, &capsfilter])?;
197+
gst::Element::link_many([&src, &videoflip, &videorate, &capsfilter])?;
198+
199+
Ok(capsfilter)
200+
}
201+
202+
fn setup_audio_source(pipeline: &gst::Pipeline, src: gst::Element) -> Result<gst::Element> {
203+
let capsfilter = gst::ElementFactory::make("capsfilter")
204+
.property(
205+
"caps",
206+
gst::Caps::from_str("audio/x-raw,channels=2,rate=48000")?,
207+
)
208+
.build()?;
209+
210+
pipeline.add_many([&src, &capsfilter])?;
211+
gst::Element::link_many([&src, &capsfilter])?;
212+
213+
Ok(capsfilter)
214+
}
215+
180216
#[cfg(not(target_os = "android"))]
181217
pub fn new_rtsp<E>(mut on_event: E, source: SourceConfig) -> Result<Self>
182218
where
183219
E: FnMut(Event) + Send + Clone + 'static,
184220
{
185-
use std::str::FromStr;
186-
187221
use crate::sender::transmission::rtsp::RtspSink;
188222

189-
fn setup_video_source(pipeline: &gst::Pipeline, src: gst::Element) -> Result<gst::Element> {
190-
let videorate = gst::ElementFactory::make("videorate")
191-
.property("skip-to-first", true)
192-
.build()?;
193-
let capsfilter = gst::ElementFactory::make("capsfilter")
194-
.name("video_capsfilter")
195-
.property("caps", gst::Caps::from_str("video/x-raw,framerate=25/1")?)
196-
.build()?;
197-
198-
pipeline.add_many([&src, &videorate, &capsfilter])?;
199-
gst::Element::link_many([&src, &videorate, &capsfilter])?;
200-
201-
Ok(capsfilter)
202-
}
203-
204-
fn setup_audio_source(pipeline: &gst::Pipeline, src: gst::Element) -> Result<gst::Element> {
205-
let capsfilter = gst::ElementFactory::make("capsfilter")
206-
.name("audio_capsfilter")
207-
.property(
208-
"caps",
209-
gst::Caps::from_str("audio/x-raw,channels=2,rate=48000")?,
210-
)
211-
.build()?;
212-
213-
pipeline.add_many([&src, &capsfilter])?;
214-
gst::Element::link_many([&src, &capsfilter])?;
215-
216-
Ok(capsfilter)
217-
}
218-
219223
let pipeline = gst::Pipeline::new();
220224

221225
let source = match source {
222226
SourceConfig::AudioVideo { video, audio } => SourceConfig::AudioVideo {
223-
video: setup_video_source(&pipeline, video)?,
224-
audio: setup_audio_source(&pipeline, audio)?,
227+
video: Self::setup_video_source(&pipeline, video)?,
228+
audio: Self::setup_audio_source(&pipeline, audio)?,
225229
},
226230
SourceConfig::Video(video) => {
227-
SourceConfig::Video(setup_video_source(&pipeline, video)?)
231+
SourceConfig::Video(Self::setup_video_source(&pipeline, video)?)
228232
}
229233
SourceConfig::Audio(audio) => {
230-
SourceConfig::Audio(setup_audio_source(&pipeline, audio)?)
234+
SourceConfig::Audio(Self::setup_audio_source(&pipeline, audio)?)
231235
}
232236
};
233237

@@ -237,8 +241,6 @@ impl Pipeline {
237241
tx_sink: Box::new(rtsp),
238242
};
239243

240-
// Start the pipeline in background thread because `scapsrc` initialization will block until
241-
// the user selects the input source.
242244
let _ = std::thread::spawn({
243245
let bus = pipeline
244246
.bus()

0 commit comments

Comments
 (0)