Skip to content
This repository was archived by the owner on Mar 6, 2025. It is now read-only.

Commit bcf497a

Browse files
committed
dedupe, don't getpass if no keyfil (just print command), increase test robustness and coverage
1 parent c781d21 commit bcf497a

File tree

4 files changed

+23
-30
lines changed

4 files changed

+23
-30
lines changed

PyLivestream/__init__.py

+8-17
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from pathlib import Path
2-
from getpass import getpass
32
import numpy as np
43
import subprocess as sp
54
import logging,os,sys
@@ -86,8 +85,8 @@ def get_resolution(fn:Path) -> tuple:
8685
# %% top level
8786
class Stream:
8887

89-
def __init__(self,ini,site,vidsource,image=False,loop=False,infn=None):
90-
self.ini = ini
88+
def __init__(self,ini:Path, site:str, vidsource:str, image:bool=False, loop:bool=False, infn:Path=None):
89+
self.ini = Path(ini).expanduser()
9190
self.site = site
9291
self.vidsource = vidsource
9392
self.image = image
@@ -98,6 +97,8 @@ def __init__(self,ini,site,vidsource,image=False,loop=False,infn=None):
9897
def osparam(self):
9998
"""load OS specific config"""
10099

100+
assert self.ini.is_file(),'{} not found.'.format(self.ini)
101+
101102
C = ConfigParser()
102103
C.read(str(self.ini))
103104

@@ -200,7 +201,7 @@ def audiocomp(self) -> list:
200201
'-ar', self.audiofs]
201202

202203

203-
def video_bitrate(self) -> list:
204+
def video_bitrate(self):
204205
"""get "best" video bitrate.
205206
Based on YouTube Live minimum specified stream rate."""
206207
if self.video_kbps: # per-site override
@@ -304,7 +305,7 @@ class Livestream(Stream):
304305
def __init__(self,ini,site,vidsource,image=False,loop=False,infn=None):
305306
super().__init__(ini,site,vidsource,image,loop,infn)
306307

307-
self.site = site
308+
self.site = site.lower()
308309

309310
self.osparam()
310311

@@ -322,8 +323,7 @@ def __init__(self,ini,site,vidsource,image=False,loop=False,infn=None):
322323
if self.key:
323324
streamid = self.key
324325
else:
325-
print('\n',' '.join(cmd),'\n')
326-
streamid = getpass('{} Live Stream ID: '.format(self.site))
326+
streamid = ''
327327

328328
self.sink = [self.server + streamid]
329329

@@ -333,7 +333,7 @@ def __init__(self,ini,site,vidsource,image=False,loop=False,infn=None):
333333
def golive(self, sinks:list=None):
334334
"""finally start the stream(s)"""
335335

336-
if self.sink[0].endswith('test'):
336+
if self.key is None:
337337
print('\n',' '.join(self.cmd),'\n')
338338
return
339339

@@ -362,9 +362,6 @@ def __init__(self, ini:Path, sites:list):
362362
if isinstance(sites,str):
363363
sites = [sites]
364364

365-
sites = [site.lower() for site in sites]
366-
ini=Path(ini).expanduser()
367-
368365
streams = []
369366
for site in sites:
370367
print('Config',site)
@@ -388,9 +385,6 @@ def __init__(self, ini:Path, sites:list):
388385
if isinstance(sites,str):
389386
sites = [sites]
390387

391-
sites = [site.lower() for site in sites]
392-
ini=Path(ini).expanduser()
393-
394388
streams = []
395389
for site in sites:
396390
print('Config',site)
@@ -409,9 +403,7 @@ class FileIn(Livestream):
409403

410404
def __init__(self, ini:Path, site:str, infn:Path, loop:bool=False, image:bool=False):
411405

412-
site = site.lower()
413406
vidsource = 'file'
414-
ini=Path(ini).expanduser()
415407

416408
stream = Livestream(ini, site, vidsource, image, loop, infn)
417409

@@ -428,7 +420,6 @@ def __init__(self, ini:Path, outfn:Path=None, clobber:bool=False):
428420
"""
429421
site = 'file'
430422
vidsource = 'screen'
431-
ini=Path(ini).expanduser()
432423

433424
super().__init__(ini,site,vidsource)
434425

tests/test.ini

+7-7
Original file line numberDiff line numberDiff line change
@@ -35,37 +35,37 @@ exe: /usr/bin/ffmpeg
3535
# per-site config
3636
[youtube]
3737
server: rtmp://a.rtmp.youtube.com/live2/
38-
key: test.key
38+
key:
3939

4040
[periscope]
4141
video_kbps: 800
4242
audio_bps: 64k
4343
server: rtmp://va.pscp.tv:80/x/
44-
key: test.key
44+
key:
4545

4646
[facebook]
4747
server: rtmp://live-api.facebook.com:80/rtmp/
48-
key: test.key
48+
key:
4949

5050
[twitch]
5151
audio_bps: 96k
5252
server: rtmp://live-jfk.twitch.tv/app/
53-
key: test.key
53+
key:
5454

5555
[mixer]
5656
keyframe_sec: 1
5757
server: rtmp://ingest-wdc.mixer.com:1935/beam
58-
key: test.key
58+
key:
5959

6060
[ustream]
6161
keyframe_sec: 1
6262
audio_bps: 128k
6363
server:
64-
key: test.key
64+
key:
6565

6666
[vimeo]
6767
server: rtmp://rtmp.cloud.vimeo.com/
68-
key: test.key
68+
key:
6969

7070
[file]
7171
video_kbps: 3000

tests/test.key

-1
This file was deleted.

tests/test_all.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
#!/usr/bin/env python
22
from pathlib import Path
3-
import os
3+
import numpy
44
import PyLivestream
55

66
rdir = Path(__file__).parent
7-
os.chdir(str(rdir))
87

9-
inifn = 'test.ini'
8+
inifn = rdir/'test.ini'
109
sites = ['periscope','youtube','facebook','twitch','mixer','ustream','vimeo']
1110

1211

@@ -22,9 +21,13 @@ def test_webcam():
2221

2322
def test_loop():
2423
for s in sites:
25-
PyLivestream.FileIn(inifn,s, 'star_collapse_out.avi')
24+
PyLivestream.FileIn(inifn,s, rdir/'star_collapse_out.avi')
2625

2726

2827
def test_disk():
2928
for s in sites:
30-
PyLivestream.SaveDisk(inifn, '')
29+
PyLivestream.SaveDisk(inifn, '')
30+
31+
32+
if __name__ == '__main__':
33+
numpy.testing.run_module_suite()

0 commit comments

Comments
 (0)