@@ -12,12 +12,14 @@ static const int64_t NS_SECOND = 1000000000LL;
1212
1313static Mp4Demux trackAudio;
1414static Mp4Demux trackVideo;
15- static GstMediaPipeline * gstMediaPipeline;
15+ static std::shared_ptr< GstMediaPipeline> gstMediaPipeline;
1616static int gUserPathLen ;
1717static const char *gUserPathPtr ;
1818static int32_t sourceIdAudio;
1919static int32_t sourceIdVideo;
2020
21+ using namespace firebolt ::rialto;
22+
2123void LoadAndDemuxSegment (Mp4Demux &mp4Demux, const char *path)
2224{
2325 char fullpath[512 ];
@@ -41,7 +43,7 @@ void LoadAndDemuxSegment(Mp4Demux &mp4Demux, const char *path)
4143 assert (n == len);
4244 if (n == len)
4345 {
44- mp4Demux.Parse (ptr, len);
46+ mp4Demux.Parse (ptr, ( uint32_t ) len);
4547 }
4648 free (ptr);
4749 }
@@ -53,75 +55,43 @@ void LoadAndDemuxSegment(Mp4Demux &mp4Demux, const char *path)
5355void ConfigureAudio ()
5456{
5557 LoadAndDemuxSegment (trackAudio, " audio/init-stream0.m4s" );
58+ std::cout << " loading rialtotest /tmp/data/bipbop-gen/audio/init-stream0.m4s" << std::endl;
5659
57- bool hasDrm = false ;
58- std::string mimeType;
59- StreamFormat streamFormat;
60- AudioConfig audioConfig;
61- audioConfig.numberOfChannels = trackAudio.audio .channel_count ;
62- audioConfig.sampleRate = trackAudio.audio .samplerate ;
63-
64- switch (trackAudio.codec_type )
65- {
66- case MultiChar_Constant (" esds" ):
67- mimeType = " audio/mpeg" ;
68- streamFormat = StreamFormat::RAW;
69- break ;
70- case MultiChar_Constant (" dec3" ):
71- mimeType = " audio/x-eac3" ;
72- streamFormat = StreamFormat::UNDEFINED;
73- break ;
74- default :
75- assert (0 );
76- }
77-
78- std::unique_ptr<IMediaPipeline::MediaSource> sourceAudio =
79- std::make_unique<IMediaPipeline::MediaSourceAudio>(
80- mimeType, hasDrm, audioConfig, SegmentAlignment::UNDEFINED, streamFormat, nullptr );
60+ assert (trackAudio.tracks .size () == 1 );
61+ assert (trackAudio.tracks [0 ].type == MediaSourceType::Audio);
8162
82- bool okA = gstMediaPipeline->attachSource (sourceAudio);
83- // assert(okA);
63+ std::unique_ptr<MediaSource> source =
64+ std::make_unique<MediaSourceAudio>(
65+ trackAudio.tracks [0 ].type ,
66+ trackAudio.tracks [0 ].codec ,
67+ trackAudio.tracks [0 ].mimeType ,
68+ trackAudio.tracks [0 ].timeScale ,
69+ trackAudio.tracks [0 ].initializationData );
8470
85- sourceIdAudio = sourceAudio->getId ();
71+ assert (gstMediaPipeline->attachSource (source));
72+ sourceIdAudio = source->getId ();
8673}
8774
8875void ConfigureVideo ()
8976{
9077 LoadAndDemuxSegment (trackVideo, " video/init-stream0.m4s" );
91-
92- bool hasDrm = false ;
93- std::string mimeType;
94- StreamFormat streamFormat;
95- int32_t width = trackVideo.video .width ;
96- int32_t height = trackVideo.video .height ;
97- SegmentAlignment alignment = SegmentAlignment::AU;
98-
99- switch (trackVideo.codec_type )
100- {
101- case MultiChar_Constant (" hvcC" ):
102- mimeType = " video/x-h265" ;
103- streamFormat = StreamFormat::HVC1;
104- break ;
105- case MultiChar_Constant (" avcC" ):
106- mimeType = " video/x-h264" ;
107- streamFormat = StreamFormat::AVC;
108- break ;
109- default :
110- assert (0 );
111- }
112-
113- CodecData codecData;
114- const char *codec_ptr = trackVideo.codec_data .c_str ();
115- codecData.data = std::vector<uint8_t >(codec_ptr, &codec_ptr[trackVideo.codec_data .size ()]);
116-
117- std::unique_ptr<IMediaPipeline::MediaSource> sourceVideo =
118- std::make_unique<IMediaPipeline::MediaSourceVideo>(
119- mimeType, hasDrm, width, height, alignment, streamFormat, std::make_shared<CodecData>(codecData));
120-
121- bool okV = gstMediaPipeline->attachSource (sourceVideo);
122- // assert(okV);
123-
124- sourceIdVideo = sourceVideo->getId ();
78+ std::cout << " loading rialtotest /tmp/data/bipbop-gen/video/init-stream0.m4s" << std::endl;
79+
80+ assert (trackVideo.tracks .size () == 1 );
81+ assert (trackVideo.tracks [0 ].type == MediaSourceType::Video);
82+
83+ std::unique_ptr<MediaSource> source =
84+ std::make_unique<MediaSourceVideo>(
85+ trackVideo.tracks [0 ].type ,
86+ trackVideo.tracks [0 ].codec ,
87+ trackVideo.tracks [0 ].mimeType ,
88+ trackVideo.tracks [0 ].timeScale ,
89+ trackVideo.tracks [0 ].initializationData ,
90+ trackVideo.tracks [0 ].video .width ,
91+ trackVideo.tracks [0 ].video .height );
92+
93+ assert (gstMediaPipeline->attachSource (source));
94+ sourceIdVideo = source->getId ();
12595}
12696
12797void ConfigureComplete ()
@@ -132,10 +102,10 @@ void ConfigureComplete()
132102void InjectAudio ()
133103{
134104 LoadAndDemuxSegment (trackAudio, " audio/chunk-stream0-00001.m4s" );
135- int count = trackAudio. count () ;
136- printf (" adding %d audio frames\n " , count );
105+ std::cout << " loading rialtotest /tmp/data/bipbop-gen/audio/chunk-stream0-00001.m4s " << std::endl ;
106+ printf (" adding %zu audio frames\n " , trackAudio. getNbSegments () );
137107
138- for (int i = 0 ; i < count; i++ )
108+ for (size_t i = 0 ; i < trackAudio. getNbSegments (); ++i )
139109 {
140110 double pts = trackAudio.getPts (i);
141111 double dur = trackAudio.getDuration (i);
@@ -144,9 +114,7 @@ void InjectAudio()
144114 std::make_unique<IMediaPipeline::MediaSegmentAudio>(
145115 sourceIdAudio,
146116 (int64_t )(pts * NS_SECOND),
147- (int64_t )(dur * NS_SECOND),
148- trackAudio.audio .samplerate ,
149- trackAudio.audio .channel_count );
117+ (int64_t )(dur * NS_SECOND));
150118
151119 size_t len = trackAudio.getLen (i);
152120 uint8_t *data = new uint8_t [len];
@@ -161,10 +129,10 @@ void InjectAudio()
161129void InjectVideo ()
162130{
163131 LoadAndDemuxSegment (trackVideo, " video/chunk-stream0-00001.m4s" );
164- int count = trackVideo. count () ;
165- printf (" adding %d video frames\n " , count );
132+ std::cout << " loading rialtotest /tmp/data/bipbop-gen/video/chunk-stream0-00001.m4s " << std::endl ;
133+ printf (" adding %zu video frames\n " , trackVideo. getNbSegments () );
166134
167- for (int i = 0 ; i < count; i++ )
135+ for (size_t i = 0 ; i < trackVideo. getNbSegments (); ++i )
168136 {
169137 double pts = trackVideo.getPts (i);
170138 double dur = trackVideo.getDuration (i);
@@ -174,8 +142,8 @@ void InjectVideo()
174142 sourceIdVideo,
175143 (int64_t )(pts * NS_SECOND),
176144 (int64_t )(dur * NS_SECOND),
177- trackVideo.video .width ,
178- trackVideo.video .height );
145+ trackVideo.tracks [ 0 ]. video .width ,
146+ trackVideo.tracks [ 0 ]. video .height );
179147
180148 size_t len = trackVideo.getLen (i);
181149 uint8_t *data = new uint8_t [len];
@@ -196,7 +164,18 @@ int my_main(int argc, char **argv)
196164 const char *delim = strchr (&gUserPathPtr [prefixLen], ' /' );
197165 gUserPathLen = (int )(delim - gUserPathPtr );
198166
199- gstMediaPipeline = new GstMediaPipeline ();
167+ gstMediaPipeline = std::make_shared<GstMediaPipeline>();
168+ if (!gstMediaPipeline->init ())
169+ {
170+ fprintf (stderr, " FATAL: Failed to initialize Rialto pipeline. Check logs/server status.\n " );
171+ return -1 ;
172+ }
173+
174+ if (!gstMediaPipeline->setVideoWindow (0 , 0 , 1920 , 1080 ))
175+ {
176+ fprintf (stderr, " Warning: Failed to set video window. Video may not appear.\n " );
177+ }
178+
200179 gstMediaPipeline->play ();
201180
202181 ConfigureAudio ();
@@ -206,7 +185,8 @@ int my_main(int argc, char **argv)
206185 InjectAudio ();
207186 InjectVideo ();
208187
209- std::this_thread::sleep_for (std::chrono::seconds (2 ));
188+ gstMediaPipeline->stop ();
189+
210190 return 0 ;
211191}
212192
@@ -217,4 +197,4 @@ int main(int argc, char **argv)
217197#else
218198 return my_main (argc, argv);
219199#endif
220- }
200+ }
0 commit comments