diff options
Diffstat (limited to 'src/livestreamer/stream.py')
-rw-r--r-- | src/livestreamer/stream.py | 56 |
1 files changed, 23 insertions, 33 deletions
diff --git a/src/livestreamer/stream.py b/src/livestreamer/stream.py index c2b5658..235b01b 100644 --- a/src/livestreamer/stream.py +++ b/src/livestreamer/stream.py @@ -1,45 +1,35 @@ -from livestreamer.utils import CommandLine +from livestreamer.utils import urlopen -import subprocess, shlex +import pbs -class Stream(object): - def __init__(self, params={}): - self.params = params - self.process = None +class StreamError(Exception): + pass +class Stream(object): def open(self): - if self.process: - self.close() - - cmdline = self.cmdline().format() - args = shlex.split(cmdline) - - self.process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + raise NotImplementedError - def read(self, *args): - if self.process: - return self.process.stdout.read(*args) +class RTMPStream(Stream): + def __init__(self, params): + self.params = params or {} - def close(self): - if self.process: - self.process.kill() - self.process = None + def open(self): + try: + rtmpdump = pbs.rtmpdump + except pbs.CommandNotFound: + raise StreamError("Unable to find 'rtmpdump' command") - def cmdline(self, out=None): - raise NotImplementedError + self.params["flv"] = "-" + self.params["_bg"] = True -class RTMPStream(Stream): - def cmdline(self, out=None): - cmd = CommandLine("rtmpdump") + stream = rtmpdump(**self.params) - for key, value in self.params.items(): - if key == "live": - if value == 1: - cmd.args[key] = True + return stream.process.stdout - cmd.args[key] = value +class HTTPStream(Stream): + def __init__(self, url): + self.url = url - if out: - cmd.args["flv"] = out + def open(self): + return urlopen(self.url) - return cmd |