@@ -77,6 +77,18 @@ void AudioPlayer::SetSourceUrl(std::string url) {
7777 }
7878}
7979
80+ void AudioPlayer::ReleaseMediaSource () {
81+ if (_isPlaying) _isPlaying = false ;
82+ if (_isInitialized) _isInitialized = false ;
83+ _url.clear ();
84+
85+ GstState playbinState;
86+ gst_element_get_state (playbin, &playbinState, NULL , GST_CLOCK_TIME_NONE );
87+ if (playbinState > GST_STATE_NULL ) {
88+ gst_element_set_state (playbin, GST_STATE_NULL );
89+ }
90+ }
91+
8092gboolean AudioPlayer::OnBusMessage (GstBus *bus, GstMessage *message,
8193 AudioPlayer *data) {
8294 switch (GST_MESSAGE_TYPE (message)) {
@@ -413,8 +425,7 @@ void AudioPlayer::Resume() {
413425
414426void AudioPlayer::Dispose () {
415427 if (!playbin) throw " Player was already disposed (Dispose)" ;
416- if (_isPlaying) _isPlaying = false ;
417- if (_isInitialized) _isInitialized = false ;
428+ ReleaseMediaSource ();
418429
419430 g_source_remove (_refreshId);
420431
@@ -440,11 +451,6 @@ void AudioPlayer::Dispose() {
440451 panorama = nullptr ;
441452 }
442453
443- GstState playbinState;
444- gst_element_get_state (playbin, &playbinState, NULL , GST_CLOCK_TIME_NONE );
445- if (playbinState > GST_STATE_NULL ) {
446- gst_element_set_state (playbin, GST_STATE_NULL );
447- }
448454 gst_object_unref (GST_OBJECT (playbin));
449455 // Do not dispose method channel as it is used by multiple players!
450456 g_clear_object (&_eventChannel);
0 commit comments