aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/livestreamer/stream.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/livestreamer/stream.py')
-rw-r--r--src/livestreamer/stream.py56
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