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