spotify: Only push audio data when GStreamer wants more
This commit is contained in:
parent
a02f2a9602
commit
50e8ff04b3
@ -11,6 +11,16 @@ from mopidy.backends import base
|
||||
logger = logging.getLogger('mopidy.backends.spotify')
|
||||
|
||||
|
||||
def need_data_callback(spotify_backend, length_hint):
|
||||
logger.debug('need_data_callback(%d) called', length_hint)
|
||||
spotify_backend.playback.on_need_data(length_hint)
|
||||
|
||||
|
||||
def enough_data_callback(spotify_backend):
|
||||
logger.debug('enough_data_callback() called')
|
||||
spotify_backend.playback.on_enough_data()
|
||||
|
||||
|
||||
def seek_data_callback(spotify_backend, time_position):
|
||||
logger.debug('seek_data_callback(%d) called', time_position)
|
||||
spotify_backend.playback.on_seek_data(time_position)
|
||||
@ -31,7 +41,10 @@ class SpotifyPlaybackProvider(base.BasePlaybackProvider):
|
||||
self.backend.spotify.session.play(1)
|
||||
|
||||
self.audio.prepare_change()
|
||||
self.audio.set_appsrc(seek_data=seek_data_callback_bound)
|
||||
self.audio.set_appsrc(
|
||||
need_data=None,
|
||||
enough_data=None,
|
||||
seek_data=seek_data_callback_bound)
|
||||
self.audio.start_playback()
|
||||
self.audio.set_metadata(track)
|
||||
|
||||
@ -44,6 +57,14 @@ class SpotifyPlaybackProvider(base.BasePlaybackProvider):
|
||||
self.backend.spotify.session.play(0)
|
||||
return super(SpotifyPlaybackProvider, self).stop()
|
||||
|
||||
def on_need_data(self, length_hint):
|
||||
logger.debug('playback.on_need_data(%d) called', length_hint)
|
||||
self.backend.spotify.push_audio_data = True
|
||||
|
||||
def on_enough_data(self):
|
||||
logger.debug('playback.on_enough_data() called')
|
||||
self.backend.spotify.push_audio_data = False
|
||||
|
||||
def on_seek_data(self, time_position):
|
||||
logger.debug('playback.on_seek_data(%d) called', time_position)
|
||||
self.backend.spotify.next_buffer_timestamp = time_position
|
||||
|
||||
@ -46,6 +46,7 @@ class SpotifySessionManager(process.BaseThread, PyspotifySessionManager):
|
||||
self.backend_ref = backend_ref
|
||||
|
||||
self.connected = threading.Event()
|
||||
self.push_audio_data = True
|
||||
self.next_buffer_timestamp = None
|
||||
|
||||
self.container_manager = None
|
||||
@ -107,6 +108,10 @@ class SpotifySessionManager(process.BaseThread, PyspotifySessionManager):
|
||||
"""Callback used by pyspotify"""
|
||||
# pylint: disable = R0913
|
||||
# Too many arguments (8/5)
|
||||
|
||||
if not self.push_audio_data:
|
||||
return 0
|
||||
|
||||
assert sample_type == 0, 'Expects 16-bit signed integer samples'
|
||||
capabilites = """
|
||||
audio/x-raw-int,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user