From a08b31dd39d8d5a0e1edeb6f98d52fdcfda24707 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 17 Aug 2012 15:38:24 -0400 Subject: [PATCH] CC-1665: Scheduled stream rebroadcasting and recording -ability to schedule streams without a 5 second pre-buffer --- python_apps/pypo/pypofetch.py | 5 ++++- python_apps/pypo/pypopush.py | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index ed8189dd2..e6019ac53 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -430,12 +430,15 @@ class PypoFetch(Thread): u'cue_in': 0, u'start': u'2012-07-26-04-00-00', u'replay_gain': u'0', u'row_id': 16, u'cue_out': 300, u'type': u'stream', u'id': 1, u'fade_in': 500} """ - if(media_item['type'] == 'file'): + if (media_item['type'] == 'file'): fileExt = os.path.splitext(media_item['uri'])[1] dst = os.path.join(download_dir, unicode(media_item['id']) + fileExt) media_item['dst'] = dst media_item['file_ready'] = False media_filtered[key] = media_item + else if media_item['type'] == 'stream': + #flag to indicate whether the stream started prebuffering + media_item['prebuffer_start'] = False self.media_prepare_queue.put(copy.copy(media_filtered)) except Exception, e: self.logger.error("%s", e) diff --git a/python_apps/pypo/pypopush.py b/python_apps/pypo/pypopush.py index b04c60d82..a58fb4fcf 100644 --- a/python_apps/pypo/pypopush.py +++ b/python_apps/pypo/pypopush.py @@ -389,12 +389,17 @@ class PypoPush(Thread): elif media_item['type'] == 'stream_buffer_start': self.start_web_stream_buffer(media_item) elif media_item['type'] == "stream": + if not media_item['prebuffer_started']: + #this is called if the stream wasn't scheduled sufficiently ahead of time + #so that the prebuffering stage could take effect. Let's do the prebuffering now. + self.start_web_stream_buffer(media_item) self.start_web_stream(media_item) elif media_item['type'] == "stream_end": self.stop_web_stream(media_item) except Exception, e: self.logger.error('Pypo Push Exception: %s', e) + def start_web_stream_buffer(self, media_item): try: self.telnet_lock.acquire() @@ -410,6 +415,8 @@ class PypoPush(Thread): tn.write("exit\n") self.logger.debug(tn.read_all()) + + media_item['prebuffer_started'] = True except Exception, e: self.logger.error(str(e)) finally: @@ -425,6 +432,8 @@ class PypoPush(Thread): msg = 'streams.scheduled_play_start\n' tn.write(msg) + + msg = 'dynamic_source.output_start\n' self.logger.debug(msg) tn.write(msg)