Public feed
#604439
class DaapSource(gst.BaseSrc):
__gsttemplates__ = (
gst.PadTemplate("src",
gst.PAD_SRC,
gst.PAD_ALWAYS,
gst.caps_new_any()),
)
__gstdetails__ = ("DAAP plugin", "Foo/Bar", "Read data on DAAP shares",
"Philippe Normand <philippe@fluendo.com>")
blocksize = 4096
fd = None
def __init__(self, name):
self.__gobject_init__()
self.curoffset = 0
self._libs = {}
self.cnx = daap.DAAPClient()
self.set_name(name)
def get_library(self, host, port):
if (host, port) not in self._libs:
self.cnx.connect(host, port)
session = self.cnx.login()
library = session.library()
self._libs[(host, port)] = library
return self._libs.get((host, port))
def set_property(self, name, value):
if name == 'uri':
parsed = media_uri.Uri(value).get_parts()
port = int(parsed['port'] or '3689')
library = self.get_library(parsed['host'], port)
track_id = int(parsed['params'].get('id','1'))
track = [ t for t in library.tracks()
if t.id == track_id ][0]
self.fd = track.request()
def do_create(self, offset, size):
## if offset != self.curoffset:
## self.fd.seek(offset, 0)
data = self.fd.read(self.blocksize)
if data:
self.curoffset += len(data)
return gst.FLOW_OK, gst.Buffer(data)
else:
return gst.FLOW_UNEXPECTED, None
gobject.type_register(DaapSource)
r = gst.element_register(type=DaapSource, elementname="daapsrc",
rank=gst.RANK_PRIMARY)