Update emit_data to take buffers.

Simplify emit data method to take Gstreamer buffers. This allows us to more
concisely give it buffers with duration, timestamp and other relevant data set.
This commit is contained in:
Thomas Adamcik 2012-11-15 22:34:20 +01:00
parent 4aa23e3306
commit 0a96e5dccb
2 changed files with 11 additions and 10 deletions

View File

@ -225,22 +225,16 @@ class Audio(pykka.ThreadingActor):
"""
self._playbin.set_property('uri', uri)
def emit_data(self, capabilities, data):
def emit_data(self, buffer_):
"""
Call this to deliver raw audio data to be played.
Note that the uri must be set to ``appsrc://`` for this to work.
:param capabilities: a GStreamer capabilities string
:type capabilities: string
:param data: raw audio data to be played
:param buffer_: buffer to pass to appsrc
:type buffer_: :class:`gst.Buffer`
"""
caps = gst.caps_from_string(capabilities)
buffer_ = gst.Buffer(buffer(data))
buffer_.set_caps(caps)
source = self._playbin.get_property('source')
source.set_property('caps', caps)
source.emit('push-buffer', buffer_)
def emit_end_of_stream(self):

View File

@ -1,5 +1,9 @@
from __future__ import unicode_literals
import pygst
pygst.require('0.10')
import gst
import logging
import os
import threading
@ -108,7 +112,10 @@ class SpotifySessionManager(process.BaseThread, PyspotifySessionManager):
'sample_rate': sample_rate,
'channels': channels,
}
self.audio.emit_data(capabilites, bytes(frames))
buffer_ = gst.Buffer(bytes(frames))
buffer_.set_caps(gst.caps_from_string(capabilites))
self.audio.emit_data(buffer_)
return num_frames
def play_token_lost(self, session):