Coder Social home page Coder Social logo

futzu / umzz Goto Github PK

View Code? Open in Web Editor NEW
6.0 2.0 4.0 156 KB

SCTE-35 Injection for Adaptive Bitrate HLS

License: GNU General Public License v3.0

Python 94.71% Makefile 5.29%
hls hls-live-streaming hls-stream mpegts pypy3 python3 scte-35 scte35 sexy threefive

umzz's Introduction

Ultra Mega zoom zoom

Live Adaptive Bitrate HLS SCTE35 Cue Injection, powered by threefive.

Latest Version v0.0.31

image


  • umzz
    • Handles live streams in realtime.
    • supports mpegts segments that use h264, h265, and mpeg2 video codecs.
    • Does not encode. Use any encoder you like and pass umzz the master.m3u8.
    • Adds the SCTE-35 Cues to each variant, and adjusts segments to start on iframes.
    • Keeps variants in sync so adaptive bitrate HLS works properly.
    • Outputs a new master.m3u8, new variant m3u8s, and variant segments with SCTE-35.

umzz parsing 4 live renditions (over a network) and ffplay playing all four umzz streams

image

Install
    python3 -mpip install umzz
  • and / or
    pypy3 -mpip install umzz

Inputs

umzz takes a master.m3u8 as input, More on inputs.
Don't use a master.m3u8 over a network,
  • Here's as close I can keep 4 renditions in sync over currently.
  • If the master.m3u8 is local, the renditions stay in sync

image


If you use a master,m3u8 across a network,
it will have problems. You're trying to download
and parse all the renditions at the same time.
Instead use ffmpeg to pull one rendition off the network
and use it to create a new local master.m3u8.
This is the faster way to do it

  • something like
ffmpeg  -re -copyts    
-i https://example.com/rendition4.m3u8  \ 
-g 30 -r 30 -flags +cgop \         
-c:v libx264 -preset faster \       
-b:v:0 2500k -b:v:1 256k  \          
-filter:v:0 scale=1920:1080 -filter:v:1 scale=512:288 \
-c:a aac -b:a 64k \                          
-map 0:v -map 0:a -map 0:v -map 0:a  \ 
-f hls -var_stream_map "v:0,a:0 v:1,a:1" \
-master_pl_name master.m3u8   \
fu3/mo_%v.m3u8  
  • While ffmpeg is working, wait a few seconds and then startup umzz.
    umzz -i fu3/master.m3u8 -s my_sidecar.txt -l
  • and you'll be good to go.

Command Line

cli tool
usage: umzz [-h] [-i INPUT] [-c] [-d] [-l] [-n] [-o OUTPUT_DIR] [-p] [-r]
            [-s SIDECAR_FILE] [-S] [-t TIME] [-T HLS_TAG] [-w WINDOW_SIZE]
            [-v]

optional arguments:
  -h, --help            show this help message and exit

  -i INPUT, --input INPUT
                        Input source, like /home/a/vid.ts or
                        udp://@235.35.3.5:3535 or https://futzu.com/xaa.ts or
                        https://example.com/not_a_master.m3u8 [default: stdin]

  -c, --continue_m3u8   Resume writing index.m3u8 [default:False]

  -d, --delete          delete segments (enables --live) [default:False]

  -l, --live            Flag for a live event (enables sliding window m3u8)
                        [default:False]

  -n, --no_discontinuity
                        Flag to disable adding #EXT-X-DISCONTINUITY tags at
                        splice points [default:False]

  -o OUTPUT_DIR, --output_dir OUTPUT_DIR
                        Directory for segments and index.m3u8 (created if
                        needed) [default:'.']

  -p, --program_date_time
                        Flag to add Program Date Time tags to index.m3u8 (
                        enables --live) [default:False]

  -r, --replay          Flag for replay aka looping (enables --live,--delete)
                        [default:False]

  -s SIDECAR_FILE, --sidecar_file SIDECAR_FILE
                        Sidecar file of SCTE-35 (pts,cue) pairs.[default:None]

  -S, --shulga          Flag to enable Shulga iframe detection mode
                        [default:False]

  -t TIME, --time TIME  Segment time in seconds [default:2]

  -T HLS_TAG, --hls_tag HLS_TAG
                        x_scte35, x_cue, x_daterange, or x_splicepoint
                        [default:x_cue]

  -w WINDOW_SIZE, --window_size WINDOW_SIZE
                        sliding window size (enables --live) [default:5]

  -v, --version         Show version

Writing Code

using umzz programmatically
    from umzz import do, argue

    args =argue()

    args.input = "/home/a/slow/master.m3u8"
    args.live = True
    args.replay = True
    args.sidecar_file="sidecar.txt"
    args.output_dir = "out-stuff"

    do(args)
  • set any command line options programmatically with args.
  • the vars in args correspond to the long_names of the cli tool.
  • the vars in args can be access via dot notation
  • these are the defaults returned from argue() .
vars in args default value
input sys.stdin.buffer
continue_m3u8 False
delete False
live False
no_discontinuity False
output_dir '.'
program_date_time False
replay False
sidecar_file None
shulga False
time 2
hls_tags 'x_cue'
window_size 5

SCTE-35

SCTE-35 cues are load from a sidecar file. More on sidecar files.

Sidecar Cues will be handled the same as SCTE35 cues from a video stream.
line format for text file insert_pts, cue

pts is the insert time for the cue, A four second preroll is standard. cue can be base64,hex, int, or bytes

      a@debian:~/umzz$ cat sidecar.txt
  
      38103.868589, /DAxAAAAAAAAAP/wFAUAAABdf+/+zHRtOn4Ae6DOAAAAAAAMAQpDVUVJsZ8xMjEqLYemJQ== 
      38199.918911, /DAsAAAAAAAAAP/wDwUAAABef0/+zPACTQAAAAAADAEKQ1VFSbGfMTIxIxGolm0= 

 

  umzz -i  noscte35-master.m3u8  -s sidecar.txt
Quick Example
  • if you have a master.m3u8 like
a@debian:~/umzz$ cat ~/stuff/master.m3u8
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-STREAM-INF:BANDWIDTH=83222,RESOLUTION=864x486,CODECS="avc1.42c01f,mp4a.40.2"
stream_0.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=83222,RESOLUTION=1280x720,CODECS="avc1.42c01f,mp4a.40.2"
stream_1.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=83222,RESOLUTION=640x360,CODECS="avc1.42c01e,mp4a.40.2"
stream_2.m3u8
  • and you want to add a splice insert at PTS 13140.123456, create a sidecar file and add the following line.
a@debian:~/umzz$ cat sidecar.txt
13140.123456,/DAhAAAAAAAAAP/wEAUAAAAJf78A/gASZvAACQAAAACokv3z
  • then run this.
a@debian:~/umzz$ umzz -i ~/stuff/master.m3u8 -s sidecar.txt -o fu
  • in the base dir fu is the new HLS with SCTE-35
a@debian:~/umzz$ ls -ald fu/* fu/*/index.m3u8
drwxr-xr-x 1 a a 1816 Apr  9 06:07 fu/0
-rw-r--r-- 1 a a 3171 Apr  9 06:07 fu/0/index.m3u8
drwxr-xr-x 1 a a 1816 Apr  9 06:07 fu/1
-rw-r--r-- 1 a a 3171 Apr  9 06:07 fu/1/index.m3u8
drwxr-xr-x 1 a a 1816 Apr  9 06:07 fu/2
-rw-r--r-- 1 a a 3171 Apr  9 06:07 fu/2/index.m3u8
-rw-r--r-- 1 a a  320 Apr  9 06:07 fu/master.m3u8

image

umzz's People

Contributors

futzu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

umzz's Issues

issue with sidecar file

´´ umzz -i /usr/share/ffplayout/public/live/playlist.m3u8 -o /usr/share/ffplayout/public/live/scte35-00 --sidecar_file /opt/mark/sidecar.txt -l -d -t 6 -p -n -T x_daterange -c
Namespace(input='/usr/share/ffplayout/public/live/playlist.m3u8', continue_m3u8=True, delete=True, live=True, no_discontinuity=True, no_throttle=False, output_dir='/usr/share/ffplayout/public/live/scte35-00', program_date_time=True, replay=False, sidecar_file='/opt/mark/sidecar.txt', shulga=False, time=6.0, hls_tag='x_daterange', window_size=5, version=False)
None
{
"lines": [
"#EXT-X-STREAM-INF:BANDWIDTH=3550800,RESOLUTION=1280x720,CODECS="avc1.4d4029,mp4a.40.2"",
"stream_720p.m3u8"
],
"media": "/usr/share/ffplayout/public/live/stream_720p.m3u8",
"tags": {
"#EXT-X-STREAM-INF": {
"CODECS": "avc1.4d4029,mp4a.40.2",
"RESOLUTION": "1280x720",
"BANDWIDTH": 3550800
}
},
"base_uri": "/usr/share/ffplayout/public/live/",
"relative_uri": "stream_720p.m3u8"
}
None
{
"lines": [
"",
"#EXT-X-STREAM-INF:BANDWIDTH=1570800,RESOLUTION=640x360,CODECS="avc1.4d4029,mp4a.40.2"",
"stream_360p.m3u8"
],
"media": "/usr/share/ffplayout/public/live/stream_360p.m3u8",
"tags": {
"#EXT-X-STREAM-INF": {
"CODECS": "avc1.4d4029,mp4a.40.2",
"RESOLUTION": "640x360",
"BANDWIDTH": 1570800
}
},
"base_uri": "/usr/share/ffplayout/public/live/",
"relative_uri": "stream_360p.m3u8"
}
{
"headers": {
"#EXTM3U": "",
"#EXT-X-VERSION": 4
}
}
BASE /usr/share/ffplayout/public/live/scte35-00
Rendition Process Started
Rendition Process Started
Process Process-1:
Process Process-2:
Traceback (most recent call last):
File "/usr/local/lib/pypy3.10/multiprocessing/process.py", line 314, in _bootstrap
self.run()
File "/usr/local/lib/pypy3.10/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/pypy3.10/site-packages/umzz.py", line 136, in mp_run
x9mp = self.mk_x9mp(manifest, dir_name)
File "/usr/local/lib/pypy3.10/site-packages/umzz.py", line 128, in mk_x9mp
Path(x9mp.args.sidecar_file).touch()
File "/usr/local/lib/pypy3.10/pathlib.py", line 1168, in touch
self._accessor.touch(self, mode, exist_ok)
File "/usr/local/lib/pypy3.10/pathlib.py", line 331, in touch
fd = os.open(path, flags, mode)
FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/usr/share/ffplayout/public/live/scte35-00/0/opt/mark/sidecar.txt')´´

PIP package

Please upload also PIP package..

x9k3 was very simple to install when installing using pip.

Windows size on live stream

Should windows size cut to last X segments variant index.m3u8?

It looks like default (5) or settable --window_size 10 are not used. I get index.m3u8 that just keeps adding lines (and #EXT-X-MEDIA-SEQUENCE:0)

Also when you're looking at window size... I think it makes sense to have 2 windows sizes - one for index.m3u8 (number of segments) and another for segment delete "-d, --delete delete segments" (segment .ts file delete should happen later than removal from index.m3u8) - this takes care of any CDN that is caching index.m3u8 and user is therefore later in fetching .ts file.

umzz -i https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/playlist.m3u8 -s sidecar.txt -o /home/uporabnik/umzzoutput --window_size 10

wait a minute and than read index.m3u8

~/umzzoutput/0$ cat index.m3u8 
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXT-X-X9K3-VERSION:0.1.89
#EXTINF:2.000000,
seg0.ts
#EXTINF:2.000000,
seg1.ts
#EXTINF:2.000000,
seg2.ts
#EXTINF:2.000000,
seg3.ts
#EXTINF:2.000000,
seg4.ts
#EXTINF:2.000000,
seg5.ts
#EXTINF:2.000000,
seg6.ts
#EXTINF:2.000000,
seg7.ts
#EXTINF:2.000000,
seg8.ts
#EXTINF:2.000000,
seg9.ts
#EXTINF:2.000000,
seg10.ts
#EXTINF:2.000000,
seg11.ts
#EXTINF:2.000000,
seg12.ts
#EXTINF:2.000000,
seg13.ts
#EXTINF:2.000000,
seg14.ts
#EXTINF:2.000000,
seg15.ts
#EXTINF:2.000000,
seg16.ts
#EXTINF:2.000000,
seg17.ts
#EXTINF:2.000000,
seg18.ts
#EXTINF:2.000000,
seg19.ts
#EXTINF:2.000000,
seg20.ts
#EXTINF:2.000000,
seg21.ts
#EXTINF:2.000000,
seg22.ts
#EXTINF:2.000000,
seg23.ts
#EXTINF:2.000000,
seg24.ts
#EXTINF:2.000000,
seg25.ts
#EXTINF:2.000000,
seg26.ts
#EXTINF:2.000000,
seg27.ts
#EXTINF:2.000000,
seg28.ts
#EXTINF:2.000000,
seg29.ts
#EXTINF:2.000000,
seg30.ts
#EXTINF:2.000000,
seg31.ts
#EXTINF:2.000000,
seg32.ts
#EXTINF:2.000000,
seg33.ts
#EXTINF:2.000000,
seg34.ts
#EXTINF:2.000000,
seg35.ts
#EXTINF:2.000000,
seg36.ts
#EXTINF:2.000000,
seg37.ts
#EXTINF:2.000000,
seg38.ts
#EXTINF:2.000000,
seg39.ts
#EXTINF:2.000000,
seg40.ts
#EXTINF:2.000000,
seg41.ts
#EXTINF:2.000000,
seg42.ts
#EXTINF:2.000000,
seg43.ts
#EXTINF:2.000000,
seg44.ts
#EXTINF:2.000000,
seg45.ts
#EXTINF:2.000000,
seg46.ts
#EXTINF:2.000000,
seg47.ts
#EXTINF:2.000000,
seg48.ts
#EXTINF:2.000000,
seg49.ts
#EXTINF:2.000000,
seg50.ts
#EXTINF:2.000000,
seg51.ts
#EXTINF:2.000000,
seg52.ts
#EXTINF:2.000000,
seg53.ts
#EXTINF:2.000000,
seg54.ts
#EXTINF:2.000000,
seg55.ts
#EXTINF:2.000000,
seg56.ts
#EXTINF:2.000000,
seg57.ts
#EXTINF:2.000000,
seg58.ts
#EXTINF:2.000000,
seg59.ts
#EXTINF:2.000000,
seg60.ts
#EXTINF:2.000000,
seg61.ts
#EXTINF:2.000000,
seg62.ts
#EXTINF:2.000000,
seg63.ts
#EXTINF:2.000000,
seg64.ts
#EXTINF:2.000000,
seg65.ts
#EXTINF:2.000000,
seg66.ts
#EXTINF:2.000000,
seg67.ts
uporabnik@ubuntu:~/umzzoutput/0$ 

Error

I have a problem and I can't run it yesterday it was working normally, then I went to install it on another server and it didn't want to work anymore

root@srv-playout:/home/luiz# umzz -i /usr/share/ffplayout/public/live/master.m3u8 -d -l -n
input = /usr/share/ffplayout/public/live/master.m3u8
byterange = False
continue_m3u8 = False
delete = True
live = True
no_discontinuity = True
no_throttle = False
output_dir = .
program_date_time = False
replay = False
sidecar_file = None
shulga = False
time = 2
hls_tag = x_cue
window_size = 5
version = False
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=3660800,RESOLUTION=1920x1080,CODECS=\"avc1.4d4029,mp4a.40.2\"",
      "stream_1080p.m3u8"
   ],
   "media": "/usr/share/ffplayout/public/live/stream_1080p.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "CODECS": "avc1.4d4029,mp4a.40.2",
         "RESOLUTION": "1920x1080",
         "BANDWIDTH": 3660800
      }
   },
   "base_uri": "/usr/share/ffplayout/public/live/",
   "relative_uri": "stream_1080p.m3u8"
}
Traceback (most recent call last):
  File "/usr/local/bin/umzz", line 5, in <module>
    cli()
  File "/usr/local/lib/pypy3.9/dist-packages/umzz.py", line 207, in cli
    do(args)
  File "/usr/local/lib/pypy3.9/dist-packages/umzz.py", line 187, in do
    fu.decode()
  File "/usr/local/lib/pypy3.9/dist-packages/m3ufu.py", line 639, in decode
    if not self._parse_line(line):
  File "/usr/local/lib/pypy3.9/dist-packages/m3ufu.py", line 620, in _parse_line
    self._do_media(line)
  File "/usr/local/lib/pypy3.9/dist-packages/m3ufu.py", line 586, in _do_media
    self._add_media(media)
  File "/usr/local/lib/pypy3.9/dist-packages/m3ufu.py", line 563, in _add_media
    segment.decode()
  File "/usr/local/lib/pypy3.9/dist-packages/m3ufu.py", line 396, in decode
    self.tags = TagParser(self.lines).tags
  File "/usr/local/lib/pypy3.9/dist-packages/m3ufu.py", line 141, in __init__
    self._parse_tags(line)
  File "/usr/local/lib/pypy3.9/dist-packages/m3ufu.py", line 159, in _parse_tags
    if line[0] !='#':

cat /usr/share/ffplayout/public/live/master.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=6740800,RESOLUTION=1920x1080,CODECS="avc1.4d4029,mp4a.40.2"
stream_1080p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=3405600,RESOLUTION=1280x720,CODECS="avc1.4d4029,mp4a.40.2"
stream_720p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=1720400,RESOLUTION=960x540,CODECS="avc1.4d4029,mp4a.40.2"
stream_540p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=585200,RESOLUTION=640x360,CODECS="avc1.4d4029,mp4a.40.2"
stream_360p.m3u8


-c:v h264_nvenc
-r:v 25
-aspect 16:9
-level 41
-colorspace:v bt709 
-color_primaries:v bt709 
-color_trc:v bt709 
-color_range:v tv
-delay 0
-c:a aac
-ar 48000
-profile:v main
-g 25
-filter_complex "[0:v]split=4[v1_out][v2_out][v3_out][v4_out]; [v1_out]scale=w=1920:h=1080[v1_out_final]; [v2_out]scale=w=1280:h=720[v2_out_final]; [v3_out]scale=w=960:h=540[v3_out_final]; [v4_out]scale=w=640:h=360[v4_out_final]; [0:a]asplit=4[a1][a2][a3][a4]"
-map "[v1_out_final]"
-map "[a1]"
-b:v:0 6000k
-maxrate:0 6500k
-bufsize:0 6600k
-b:a:0 128k
-map "[v2_out_final]"
-map "[a2]"
-b:v:1 3000k
-maxrate:1 3500k
-bufsize:1 3600k
-b:a:1 96k
-map "[v3_out_final]"
-map "[a3]"
-b:v:2 1500k
-maxrate:2 2000k
-bufsize:2 2100k
-b:a:2 64k
-map "[v4_out_final]"
-map "[a4]"
-b:v:3 500k
-maxrate:3 1000k
-bufsize:3 1100k
-b:a:3 32k
-hls_flags append_list+delete_segments+omit_endlist
-hls_segment_filename /usr/share/ffplayout/public/live/stream_%v-%d.ts
-master_pl_name master.m3u8
-var_stream_map "v:0,a:0,name:1080p v:1,a:1,name:720p v:2,a:2,name:540p v:3,a:3,name:360p"
-metadata:s:a language=pt  -metadata service_name="Canal Solo Fértil" -metadata service_name="Canal Solo Fértil"  -metadata network_name="Canal Solo Fértil" /usr/share/ffplayout/public/live/stream_%v.m3u8

programmatically use

The 'umzz' can be used programmatically? In 'x9k3', I did it as follows.

#!/usr/bin/env pypy3
import subprocess
import x9k3

# Comando ffmpeg com a saída redirecionada para um pipe
ffmpeg_command = 'ffmpeg -hide_banner -nostats -v level+fatal  -hwaccel_device 0 -hwaccel qsv -i "udp://227.0.0.1:1234?overrun_nonfatal=1&fifo_size=288000&buffer_size=288000&timeout=90000000" -map 0 -c copy -f mpegts -'

# Inicie o processo ffmpeg
process = subprocess.Popen(ffmpeg_command, stdout=subprocess.PIPE, shell=True)

# Leia a saída do processo
input_stream = process.stdout

# Crie uma inst√¢ncia de X9K3
x9 = x9k3.X9K3(input_stream)

# Configure os outros argumentos
x9.args.output_dir = "/usr/share/ffplayout/public/live/scte35"
x9.args.sidecar_file = "/opt/mark/sidecar.txt"
x9.args.time = 4
x9.args.hls_tag = "x_scte35"
x9.args.live = True
##x9.args.delete = True
# Execute o X9K3
x9.run()

# Aguarde o processo ffmpeg terminar (opcional)
process.wait()

live option is not working

Hi Adrian, I have been trying this tool to generate abr stream and am not sure why it is not working
please let me know what I am doing wrong or the tool has any bug which I don;t see in output log.

Here are commands I am running:

ffmpeg -re -i http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4 \ -pix_fmt yuv420p \ -reconnect 1 \ -filter_complex "[0:v]split=3[v1][v2][v3];[v1]scale=480x270[v1out];[v2]scale=1280x720[v2out];[v3]scale=1920x1080[v3out]" \ -map "[v1out]" -c:v:0 libx264 -preset faster -tune zerolatency -profile:v high -level 3.0 -b:v:0 800k -g 50 -r 25 \ -map 0:a -c:a:0 aac -b:a:0 64k -ac 2 \ -map "[v2out]" -c:v:1 libx264 -preset faster -tune zerolatency -profile:v high -level 3.0 -b:v:1 2000k -g 50 -r 25 \ -map 0:a -c:a:1 aac -b:a:1 96k -ac 2 \ -map "[v3out]" -c:v:2 libx264 -preset faster -tune zerolatency -profile:v high -level 3.0 -b:v:2 3500k -g 50 -r 25 \ -map 0:a -c:a:2 aac -b:a:2 128k -ac 2 \ -hls_time 6 \ -hls_list_size 6 \ -hls_allow_cache 0 \ -hls_flags +delete_segments \ -movflags +faststart \ -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \ -master_pl_name master.m3u8 \ -f hls hls/%v/stream.m3u8

   and then using umzz command like this
   ` umzz -i hls/master.m3u8 -s sidecar.txt -t 2 -w 7 -l -d -o umzz-op`
   
   I am not sure why it is not generating out even though the inputs are all correct.
   
   here is output of umzz for better understanding.
   
   `umzz -i hls/master.m3u8 -s sidecar.txt -t 2 -w 7 -l -d -o umzz-op 

Namespace(input='hls/master.m3u8', output_dir='umzz-op', sidecar_file='sidecar.txt', time=2.0, hls_tag='x_cue', window_size=7, delete=True, live=True, replay=False, shulga=False, version=False, program_date_time=False)
None
{
"lines": [
"#EXT-X-STREAM-INF:BANDWIDTH=950400,RESOLUTION=480x270,CODECS="avc1.64001e,mp4a.40.2"",
"0/stream.m3u8"
],
"media": "hls/0/stream.m3u8",
"tags": {
"#EXT-X-STREAM-INF": {
"CODECS": "avc1.64001e,mp4a.40.2",
"RESOLUTION": "480x270",
"BANDWIDTH": 950400
}
},
"base_uri": "hls/",
"relative_uri": "0/stream.m3u8"
}
None
{
"lines": [
"",
"#EXT-X-STREAM-INF:BANDWIDTH=2305600,RESOLUTION=1280x720,CODECS="avc1.64001e,mp4a.40.2"",
"1/stream.m3u8"
],
"media": "hls/1/stream.m3u8",
"tags": {
"#EXT-X-STREAM-INF": {
"CODECS": "avc1.64001e,mp4a.40.2",
"RESOLUTION": "1280x720",
"BANDWIDTH": 2305600
}
},
"base_uri": "hls/",
"relative_uri": "1/stream.m3u8"
}
None
{
"lines": [
"",
"#EXT-X-STREAM-INF:BANDWIDTH=3990800,RESOLUTION=1920x1080,CODECS="avc1.64001e,mp4a.40.2"",
"2/stream.m3u8"
],
"media": "hls/2/stream.m3u8",
"tags": {
"#EXT-X-STREAM-INF": {
"CODECS": "avc1.64001e,mp4a.40.2",
"RESOLUTION": "1920x1080",
"BANDWIDTH": 3990800
}
},
"base_uri": "hls/",
"relative_uri": "2/stream.m3u8"
}
{
"headers": {
"#EXTM3U": "",
"#EXT-X-VERSION": 3
}
}
BASE umzz-op
Process-1 is up
Process-2 is up
Process-3 is up
Process-1 is down
Process-3 is down
root@6511837e4ef8:/opt/casparcg# umzz -v
umzz 0.0.9
`

ls -R umzz-op/ :
0 1 2 master.m3u8

umzz-op/0:

umzz-op/1:

umzz-op/2:

--delete problem

I get logs with:

deleting seg0.ts
https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b946000.m3u8 ...........Failed

when using --delete for live stream

full example:

uporabnik@ubuntu:~/umzzoutput$ umzz -i https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/playlist.m3u8 -s sidecar.txt -o /home/uporabnik/umzzoutput --window_size 10 --delete
Namespace(delete=True, hls_tag='x_cue', input='https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/playlist.m3u8', output_dir='/home/uporabnik/umzzoutput', program_date_time=False, replay=False, shulga=False, sidecar_file='sidecar.txt', time=2, version=False, window_size=10)
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=946000,RESOLUTION=640x360",
      "chunklist_b946000.m3u8"
   ],
   "media": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b946000.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "RESOLUTION": "640x360",
         "BANDWIDTH": 946000
      }
   },
   "base_uri": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/"
}
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=1396000,RESOLUTION=640x360",
      "chunklist_b1396000.m3u8"
   ],
   "media": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b1396000.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "RESOLUTION": "640x360",
         "BANDWIDTH": 1396000
      }
   },
   "base_uri": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/"
}
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=1900000",
      "chunklist_b1900000.m3u8"
   ],
   "media": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b1900000.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "BANDWIDTH": 1900000
      }
   },
   "base_uri": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/"
}
{
  "headers": {
    "#EXTM3U": "",
    "#EXT-X-VERSION": 3
  }
}
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=946000,RESOLUTION=640x360', 'chunklist_b946000.m3u8'], 'media': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b946000.m3u8', 'pts': None, 'start': None, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'RESOLUTION': '640x360', 'BANDWIDTH': 946000}}, 'tmp': None, 'base_uri': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
Process-1  is up
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=1396000,RESOLUTION=640x360', 'chunklist_b1396000.m3u8'], 'media': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b1396000.m3u8', 'pts': None, 'start': 0.0, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'RESOLUTION': '640x360', 'BANDWIDTH': 1396000}}, 'tmp': None, 'base_uri': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
/home/uporabnik/umzzoutput/0/seg0.ts:   start: 0.000000   end: 2.000000   duration: 2.000000
throttling 1.9
Process-2  is up
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=1900000', 'chunklist_b1900000.m3u8'], 'media': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b1900000.m3u8', 'pts': None, 'start': 0.0, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'BANDWIDTH': 1900000}}, 'tmp': None, 'base_uri': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
/home/uporabnik/umzzoutput/1/seg0.ts:   start: 0.000000   end: 2.000000   duration: 2.000000
throttling 1.9
Process-3  is up
/home/uporabnik/umzzoutput/0/seg1.ts:   start: 2.000000   end: 4.000000   duration: 2.000000
throttling 1.88
/home/uporabnik/umzzoutput/2/seg0.ts:   start: 0.000000   end: 2.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg1.ts:   start: 2.000000   end: 4.000000   duration: 2.000000
throttling 1.86
/home/uporabnik/umzzoutput/0/seg2.ts:   start: 4.000000   end: 6.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg1.ts:   start: 2.000000   end: 4.000000   duration: 2.000000
throttling 1.87
/home/uporabnik/umzzoutput/1/seg2.ts:   start: 4.000000   end: 6.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg3.ts:   start: 6.000000   end: 8.000000   duration: 2.000000
throttling 1.89
/home/uporabnik/umzzoutput/2/seg2.ts:   start: 4.000000   end: 6.000000   duration: 2.000000
throttling 1.89
/home/uporabnik/umzzoutput/1/seg3.ts:   start: 6.000000   end: 8.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg4.ts:   start: 8.000000   end: 10.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg3.ts:   start: 6.000000   end: 8.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg4.ts:   start: 8.000000   end: 10.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg5.ts:   start: 10.000000   end: 12.000000   duration: 2.000000
throttling 1.89
/home/uporabnik/umzzoutput/2/seg4.ts:   start: 8.000000   end: 10.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg5.ts:   start: 10.000000   end: 12.000000   duration: 2.000000
throttling 1.89
/home/uporabnik/umzzoutput/0/seg6.ts:   start: 12.000000   end: 14.000000   duration: 2.000000
throttling 1.89
/home/uporabnik/umzzoutput/2/seg5.ts:   start: 10.000000   end: 12.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg6.ts:   start: 12.000000   end: 14.000000   duration: 2.000000
throttling 1.89
/home/uporabnik/umzzoutput/0/seg7.ts:   start: 14.000000   end: 16.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg6.ts:   start: 12.000000   end: 14.000000   duration: 2.000000
throttling 1.89
/home/uporabnik/umzzoutput/1/seg7.ts:   start: 14.000000   end: 16.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg8.ts:   start: 16.000000   end: 18.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg7.ts:   start: 14.000000   end: 16.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg8.ts:   start: 16.000000   end: 18.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg9.ts:   start: 18.000000   end: 20.000000   duration: 2.000000
deleting seg0.ts
https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b946000.m3u8 ...........Failed
/home/uporabnik/umzzoutput/2/seg8.ts:   start: 16.000000   end: 18.000000   duration: 2.000000
throttling 1.9
Process-1  is down
/home/uporabnik/umzzoutput/1/seg9.ts:   start: 18.000000   end: 20.000000   duration: 2.000000
deleting seg0.ts
https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b1396000.m3u8 ...........Failed
/home/uporabnik/umzzoutput/2/seg9.ts:   start: 18.000000   end: 20.000000   duration: 2.000000
deleting seg0.ts
https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b1900000.m3u8 ...........Failed
uporabnik@ubuntu:~/umzzoutput$ 

and to test without --delete - everything looks ok:

uporabnik@ubuntu:~/umzzoutput$ umzz -i https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/playlist.m3u8 -s sidecar.txt -o /home/uporabnik/umzzoutput --window_size 10

Namespace(delete=False, hls_tag='x_cue', input='https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/playlist.m3u8', output_dir='/home/uporabnik/umzzoutput', program_date_time=False, replay=False, shulga=False, sidecar_file='sidecar.txt', time=2, version=False, window_size=10)
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=946000,RESOLUTION=640x360",
      "chunklist_b946000.m3u8"
   ],
   "media": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b946000.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "RESOLUTION": "640x360",
         "BANDWIDTH": 946000
      }
   },
   "base_uri": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/"
}
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=1396000,RESOLUTION=640x360",
      "chunklist_b1396000.m3u8"
   ],
   "media": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b1396000.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "RESOLUTION": "640x360",
         "BANDWIDTH": 1396000
      }
   },
   "base_uri": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/"
}
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=1900000",
      "chunklist_b1900000.m3u8"
   ],
   "media": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b1900000.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "BANDWIDTH": 1900000
      }
   },
   "base_uri": "https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/"
}
{
  "headers": {
    "#EXTM3U": "",
    "#EXT-X-VERSION": 3
  }
}
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=946000,RESOLUTION=640x360', 'chunklist_b946000.m3u8'], 'media': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b946000.m3u8', 'pts': None, 'start': None, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'RESOLUTION': '640x360', 'BANDWIDTH': 946000}}, 'tmp': None, 'base_uri': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
Process-1  is up
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=1396000,RESOLUTION=640x360', 'chunklist_b1396000.m3u8'], 'media': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b1396000.m3u8', 'pts': None, 'start': 0.0, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'RESOLUTION': '640x360', 'BANDWIDTH': 1396000}}, 'tmp': None, 'base_uri': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
/home/uporabnik/umzzoutput/0/seg0.ts:   start: 0.000000   end: 2.000000   duration: 2.000000
throttling 1.9
Process-2  is up
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=1900000', 'chunklist_b1900000.m3u8'], 'media': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/chunklist_b1900000.m3u8', 'pts': None, 'start': 0.0, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'BANDWIDTH': 1900000}}, 'tmp': None, 'base_uri': 'https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
/home/uporabnik/umzzoutput/1/seg0.ts:   start: 0.000000   end: 2.000000   duration: 2.000000
throttling 1.9
Process-3  is up
/home/uporabnik/umzzoutput/0/seg1.ts:   start: 2.000000   end: 4.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg0.ts:   start: 0.000000   end: 2.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg1.ts:   start: 2.000000   end: 4.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg2.ts:   start: 4.000000   end: 6.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg1.ts:   start: 2.000000   end: 4.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg2.ts:   start: 4.000000   end: 6.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg3.ts:   start: 6.000000   end: 8.000000   duration: 2.000000
throttling 1.87
/home/uporabnik/umzzoutput/2/seg2.ts:   start: 4.000000   end: 6.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg3.ts:   start: 6.000000   end: 8.000000   duration: 2.000000
throttling 1.86
/home/uporabnik/umzzoutput/0/seg4.ts:   start: 8.000000   end: 10.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg3.ts:   start: 6.000000   end: 8.000000   duration: 2.000000
throttling 1.87
/home/uporabnik/umzzoutput/1/seg4.ts:   start: 8.000000   end: 10.000000   duration: 2.000000
throttling 1.88
/home/uporabnik/umzzoutput/0/seg5.ts:   start: 10.000000   end: 12.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg4.ts:   start: 8.000000   end: 10.000000   duration: 2.000000
throttling 1.88
/home/uporabnik/umzzoutput/1/seg5.ts:   start: 10.000000   end: 12.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg6.ts:   start: 12.000000   end: 14.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg5.ts:   start: 10.000000   end: 12.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg6.ts:   start: 12.000000   end: 14.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg7.ts:   start: 14.000000   end: 16.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg6.ts:   start: 12.000000   end: 14.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg7.ts:   start: 14.000000   end: 16.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg8.ts:   start: 16.000000   end: 18.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg7.ts:   start: 14.000000   end: 16.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg8.ts:   start: 16.000000   end: 18.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg9.ts:   start: 18.000000   end: 20.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg8.ts:   start: 16.000000   end: 18.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg9.ts:   start: 18.000000   end: 20.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg10.ts:   start: 20.000000   end: 22.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg9.ts:   start: 18.000000   end: 20.000000   duration: 2.000000
throttling 1.89
/home/uporabnik/umzzoutput/1/seg10.ts:   start: 20.000000   end: 22.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg11.ts:   start: 22.000000   end: 24.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg10.ts:   start: 20.000000   end: 22.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg11.ts:   start: 22.000000   end: 24.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg12.ts:   start: 24.000000   end: 26.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg11.ts:   start: 22.000000   end: 24.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg12.ts:   start: 24.000000   end: 26.000000   duration: 2.000000
throttling 1.89
/home/uporabnik/umzzoutput/0/seg13.ts:   start: 26.000000   end: 28.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg12.ts:   start: 24.000000   end: 26.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg13.ts:   start: 26.000000   end: 28.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg14.ts:   start: 28.000000   end: 30.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg13.ts:   start: 26.000000   end: 28.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg14.ts:   start: 28.000000   end: 30.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg15.ts:   start: 30.000000   end: 32.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg14.ts:   start: 28.000000   end: 30.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg15.ts:   start: 30.000000   end: 32.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg16.ts:   start: 32.000000   end: 34.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg15.ts:   start: 30.000000   end: 32.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg16.ts:   start: 32.000000   end: 34.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg17.ts:   start: 34.000000   end: 36.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg16.ts:   start: 32.000000   end: 34.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg17.ts:   start: 34.000000   end: 36.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg18.ts:   start: 36.000000   end: 38.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg17.ts:   start: 34.000000   end: 36.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg18.ts:   start: 36.000000   end: 38.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg19.ts:   start: 38.000000   end: 40.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg18.ts:   start: 36.000000   end: 38.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg19.ts:   start: 38.000000   end: 40.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg20.ts:   start: 40.000000   end: 42.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg19.ts:   start: 38.000000   end: 40.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg20.ts:   start: 40.000000   end: 42.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg21.ts:   start: 42.000000   end: 44.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg20.ts:   start: 40.000000   end: 42.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg21.ts:   start: 42.000000   end: 44.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg22.ts:   start: 44.000000   end: 46.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg21.ts:   start: 42.000000   end: 44.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/1/seg22.ts:   start: 44.000000   end: 46.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/0/seg23.ts:   start: 46.000000   end: 48.000000   duration: 2.000000
throttling 1.9
/home/uporabnik/umzzoutput/2/seg22.ts:   start: 44.000000   end: 46.000000   duration: 2.000000
throttling 1.9

Continuously monitor or not

Hi Adrian,
I have two scenario. First, all segments store in my location and using umzz so add contuinity tag. But second only 10 seg store so umzz not work some segments read then stop mechanism.

i have one issue

I'm new to this concept, I'm testing umzz and I'm receiving only this message:
"umzz -i https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master.m3u8 -t 3 -p -s sidecar.txt -o ./1/
Namespace(delete=False, hls_tag='x_cue', input='https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master.m3u8', output_dir='./1/', program_date_time=True, replay=False, shulga=False, sidecar_file='sidecar.txt', time=3.0, version=False, window_size=5)"

Am I forgetting to do something? If anyone has any information

unsupported operand type(s) for +: 'NoneType' and 'float' when inserting SCTE35

I'm trying with stream from #3 on version @0.0.3

test case 1: pass thru (no scte insertion)
runs normally in the browser -> test pass OK


test case 2: insert scte messages to sidecar
pseudo code with scte35 taken from x9k3 main page:

while true
	send scte:  0.00,/DAhAAAAAAAAAP/wEAUAAAAJf78A/gASZvAACQAAAACokv3z
	sleep 30 seconds
	send scte:  0.00,/DAcAAAAAAAAAP/wCwUAAAABfx8AAAEAAAAA3r8DiQ==
	sleep 10 seconds
end while

fails:

unsupported operand type(s) for +: 'NoneType' and 'float'
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8 ...........Failed

and also in browser variant with media-sequence stopped updating.

more logs for test case 2:


/tmp/shareddata/umzz/4/seg42.ts:   start: 252.000000   end: 258.000000   duration: 6.000000
{'tags': {'#Iframe': '198.0', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:26.626596Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/4/seg33.ts', 'file': 'seg33.ts', 'num': 33}
deleting /tmp/shareddata/umzz/4/seg33.ts
throttling 5.63
Cue Time 73569.7272
/tmp/shareddata/umzz/2/seg41.ts:   start: 73569.727200   end: 73569.727200   duration: 0.000000
{'tags': {'#Iframe': '73515.7272', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:26.121029Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/2/seg32.ts', 'file': 'seg32.ts', 'num': 32}
deleting /tmp/shareddata/umzz/2/seg32.ts
/tmp/shareddata/umzz/5/seg42.ts:   start: 252.000000   end: 258.000000   duration: 6.000000
{'tags': {'#Iframe': '198.0', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:27.666857Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/5/seg33.ts', 'file': 'seg33.ts', 'num': 33}
deleting /tmp/shareddata/umzz/5/seg33.ts
throttling 5.67
#EXT-X-SCTE35:CUE="/DAhAAAAAAAAAP/wEAUAAAAJf78A/gASZvAACQAAAACokv3z" ,CUE-OUT=YES 
/tmp/shareddata/umzz/2/seg42.ts:   start: 73569.727200   end: 73575.727200   duration: 6.000000
{'tags': {'#Iframe': '73521.7272', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:31.894310Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/2/seg33.ts', 'file': 'seg33.ts', 'num': 33}
deleting /tmp/shareddata/umzz/2/seg33.ts
throttling 5.63
Cue Time 73572.7272
/tmp/shareddata/umzz/0/seg42.ts:   start: 73572.727200   end: 73572.727200   duration: 0.000000
{'tags': {'#Iframe': '73518.7272', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:28.675658Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/0/seg33.ts', 'file': 'seg33.ts', 'num': 33}
deleting /tmp/shareddata/umzz/0/seg33.ts
#EXT-X-SCTE35:CUE="/DAhAAAAAAAAAP/wEAUAAAAJf78A/gASZvAACQAAAACokv3z" ,CUE-OUT=YES 
/tmp/shareddata/umzz/0/seg43.ts:   start: 73572.727200   end: 73578.727200   duration: 6.000000
{'tags': {'#Iframe': '73524.7272', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:34.662136Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/0/seg34.ts', 'file': 'seg34.ts', 'num': 34}
deleting /tmp/shareddata/umzz/0/seg34.ts
throttling 5.69
/tmp/shareddata/umzz/4/seg43.ts:   start: 258.000000   end: 264.000000   duration: 6.000000
{'tags': {'#Iframe': '204.0', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:32.333294Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/4/seg34.ts', 'file': 'seg34.ts', 'num': 34}
deleting /tmp/shareddata/umzz/4/seg34.ts
throttling 5.69
unsupported operand type(s) for +: 'NoneType' and 'float'
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8 ...........Failed
/tmp/shareddata/umzz/5/seg43.ts:   start: 258.000000   end: 264.000000   duration: 6.000000
{'tags': {'#Iframe': '204.0', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:33.313112Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/5/seg34.ts', 'file': 'seg34.ts', 'num': 34}
deleting /tmp/shareddata/umzz/5/seg34.ts
throttling 5.69
#EXT-X-SCTE35:CUE="/DAhAAAAAAAAAP/wEAUAAAAJf78A/gASZvAACQAAAACokv3z" ,CUE-OUT=CONT
/tmp/shareddata/umzz/3/seg42.ts:   start: 73575.727200   end: 73581.727200   duration: 6.000000
{'tags': {'#Iframe': '73521.7272', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:32.568482Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/3/seg33.ts', 'file': 'seg33.ts', 'num': 33}
deleting /tmp/shareddata/umzz/3/seg33.ts
throttling 5.64
#EXT-X-SCTE35:CUE="/DAhAAAAAAAAAP/wEAUAAAAJf78A/gASZvAACQAAAACokv3z" ,CUE-OUT=CONT
/tmp/shareddata/umzz/0/seg44.ts:   start: 73578.727200   end: 73584.727200   duration: 6.000000
{'tags': {'#Iframe': '73530.7272', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:40.469778Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/0/seg35.ts', 'file': 'seg35.ts', 'num': 35}
deleting /tmp/shareddata/umzz/0/seg35.ts
throttling 5.7
/tmp/shareddata/umzz/4/seg44.ts:   start: 264.000000   end: 270.000000   duration: 6.000000
{'tags': {'#Iframe': '210.0', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:38.045326Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/4/seg35.ts', 'file': 'seg35.ts', 'num': 35}
deleting /tmp/shareddata/umzz/4/seg35.ts
throttling 5.63
/tmp/shareddata/umzz/5/seg44.ts:   start: 264.000000   end: 270.000000   duration: 6.000000
{'tags': {'#Iframe': '210.0', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:39.067023Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/5/seg35.ts', 'file': 'seg35.ts', 'num': 35}
deleting /tmp/shareddata/umzz/5/seg35.ts
throttling 5.69
#EXT-X-SCTE35:CUE="/DAhAAAAAAAAAP/wEAUAAAAJf78A/gASZvAACQAAAACokv3z" ,CUE-OUT=CONT
/tmp/shareddata/umzz/3/seg43.ts:   start: 73581.727200   end: 73587.727200   duration: 6.000000
{'tags': {'#Iframe': '73527.7272', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:38.398726Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/3/seg34.ts', 'file': 'seg34.ts', 'num': 34}
deleting /tmp/shareddata/umzz/3/seg34.ts
throttling 5.69
#EXT-X-SCTE35:CUE="/DAhAAAAAAAAAP/wEAUAAAAJf78A/gASZvAACQAAAACokv3z" ,CUE-OUT=CONT
/tmp/shareddata/umzz/0/seg45.ts:   start: 73584.727200   end: 73590.727200   duration: 6.000000
{'tags': {'#Iframe': '73536.7272', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:46.300277Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/0/seg36.ts', 'file': 'seg36.ts', 'num': 36}
deleting /tmp/shareddata/umzz/0/seg36.ts
throttling 5.7
/tmp/shareddata/umzz/4/seg45.ts:   start: 270.000000   end: 276.000000   duration: 6.000000
{'tags': {'#Iframe': '216.0', '#EXT-X-PROGRAM-DATE-TIME': '2023-04-11T21:51:43.741259Z', '#EXTINF': '6.000000,'}, 'name': '/tmp/shareddata/umzz/4/seg36.ts', 'file': 'seg36.ts', 'num': 36}
deleting /tmp/shareddata/umzz/4/seg36.ts
throttling 5.7

enviorment (just read parameters if needed , it's line separated for running in k8s deployment .yaml):

            - /opt/pypy/bin/umzz
            - -i
            - "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master.m3u8"
            - -t
            - "6"
            - -p
            - -w
            - "10"
            - --delete            
            - -s
            - /tmp/shareddata/sidecar-umzz.txt
            - --hls_tag
            - x_scte35            
            - -o
            - /tmp/shareddata/umzz

Http client should have some retry

I was running on stream from #3 and after some time I can see that some variant subProcesses fail.
running [email protected]

I did some log parsing and found some kind of variant hls fetch error... "Connection closed by remote peer" or similar (I have rewritten it from memory, not copy pasted). Upstream server was CDN from Akamai, therefore probably solid connection..

Is there any easy way to add some http retrys with minimal backoff to http request on some errors (most probably http code 5xx, timeout, connection failure)? something like in https://stackoverflow.com/questions/9446387/how-to-retry-urllib2-request-when-fails
Why - Fetching Two variant streams makes double trouble ... But six - ... :)

uporabnik@ubuntu:~/umzzoutput$ cat 0/index.m3u8 | grep MEDIA
#EXT-X-MEDIA-SEQUENCE:1126
uporabnik@ubuntu:~/umzzoutput$ cat 1/index.m3u8 | grep MEDIA
#EXT-X-MEDIA-SEQUENCE:1123
uporabnik@ubuntu:~/umzzoutput$ cat 2/index.m3u8 | grep MEDIA
#EXT-X-MEDIA-SEQUENCE:465
uporabnik@ubuntu:~/umzzoutput$ cat 3/index.m3u8 | grep MEDIA
#EXT-X-MEDIA-SEQUENCE:1188
uporabnik@ubuntu:~/umzzoutput$ cat 4/index.m3u8 | grep MEDIA
#EXT-X-MEDIA-SEQUENCE:46
uporabnik@ubuntu:~/umzzoutput$ cat 5/index.m3u8 | grep MEDIA
#EXT-X-MEDIA-SEQUENCE:145

[feature] hls m3u8 format

I was just testing 0.0.3 and found some ideas that might be for general use. I'm mostly targeting player compatibility of hls m3u8 format. I have to start learning python to be able to make PR once in future. :)

-use leading zeroes for segment filename, because looking thru the folder to debug .ts files looks way simpler when files are sorted ascending.

seg11.ts 
seg00000011.ts

-add option --segmentfileprefix for segment file name prefix...
Why: because if app is restarted file names should change in order for CDN to refresh them. For .ts you normally configure CDN cache for 24hours or more.

If user can provide prefix, it's easy to change - for example using bash epochtime variable on app start. There is another option to write last segment# to file, and reread on start, but that would just complicate things...

-when you write custom hls attribute it's better to be on safe side, that some players don't break. Just use double hash ## for line to become comment

#EXT-X-UMZZ-VERSION:0.0.3
to:
##EXT-X-UMZZ-VERSION:0.0.3

same goes for Iframe

#Iframe:213.0
to:
##Iframe:213.0

-write program-data-time with max 3 decimals...
It would make sense to format time output (program date time) to max 3 decimals in "seconds" part. It's probably just some double rounding, that got this extra data, however it's nice to have output that is up to specification or at least example from official specification.

original variant m3u8

#EXT-X-PROGRAM-DATE-TIME:2023-04-11T16:31:37.433+02:00
#EXTINF:3,
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/20230404T122017/master_1660/00068/master_1660_02627.ts

umzz output:
#EXT-X-PROGRAM-DATE-TIME:2023-04-11T14:32:59.430210Z

and Specification from apple Examine a Low-Latency HLS Playlist

#EXTM3U
...
#EXT-X-PROGRAM-DATE-TIME:2019-02-14T02:13:36.106Z

relative urls or absolute urls (variant m3u8 url resolving)

Just started testing v 0.0.1 .. When I tried example below it looks like it is wrong in resolving urls. Master.m3u8 below has full urls (non relative) for variants.
umzz -i https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master.m3u8 -s sidecar.txt -o /home/uporabnik/umzzoutput

however this in logs looks strange:
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_6660.m3u8 ...........Failed

Full repetable example:

umzz -i https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master.m3u8 -s sidecar.txt -o /home/uporabnik/umzzoutput

Namespace(delete=False, hls_tag='x_cue', input='https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master.m3u8', output_dir='/home/uporabnik/umzzoutput', program_date_time=False, replay=False, shulga=False, sidecar_file='sidecar.txt', time=2, version=False, window_size=5)
{
   "lines": [
      "#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID=\"CC\",LANGUAGE=\"eng\",NAME=\"English\",INSTREAM-ID=\"CC1\"",
      "#EXT-X-STREAM-INF:BANDWIDTH=352000,AVERAGE-BANDWIDTH=290400,CODECS=\"avc1.66.30,mp4a.40.2\",RESOLUTION=320x180,FRAME-RATE=30.000,CLOSED-CAPTIONS=\"CC\"",
      "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_264.m3u8"
   ],
   "media": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_264.m3u8",
   "tags": {
      "#EXT-X-MEDIA": {
         "INSTREAM-ID": "CC1",
         "NAME": "English",
         "LANGUAGE": "eng",
         "GROUP-ID": "CC",
         "TYPE": "CLOSED-CAPTIONS"
      },
      "#EXT-X-STREAM-INF": {
         "CLOSED-CAPTIONS": "CC",
         "FRAME-RATE": 30.0,
         "RESOLUTION": "320x180",
         "CODECS": "avc1.66.30,mp4a.40.2",
         "AVERAGE-BANDWIDTH": 290400,
         "BANDWIDTH": 352000
      },
      "https": "//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_264.m3u8"
   },
   "base_uri": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/"
}
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=774400,AVERAGE-BANDWIDTH=635800,CODECS=\"avc1.4d4015,mp4a.40.2\",RESOLUTION=426x240,FRAME-RATE=30.000,CLOSED-CAPTIONS=\"CC\"",
      "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_578.m3u8"
   ],
   "media": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_578.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "CLOSED-CAPTIONS": "CC",
         "FRAME-RATE": 30.0,
         "RESOLUTION": "426x240",
         "CODECS": "avc1.4d4015,mp4a.40.2",
         "AVERAGE-BANDWIDTH": 635800,
         "BANDWIDTH": 774400
      },
      "https": "//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_578.m3u8"
   },
   "base_uri": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/"
}
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=1267200,AVERAGE-BANDWIDTH=1020800,CODECS=\"avc1.77.30,mp4a.40.2\",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS=\"CC\"",
      "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8"
   ],
   "media": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "CLOSED-CAPTIONS": "CC",
         "FRAME-RATE": 30.0,
         "RESOLUTION": "640x360",
         "CODECS": "avc1.77.30,mp4a.40.2",
         "AVERAGE-BANDWIDTH": 1020800,
         "BANDWIDTH": 1267200
      },
      "https": "//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8"
   },
   "base_uri": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/"
}
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=2288000,AVERAGE-BANDWIDTH=1826000,CODECS=\"avc1.4d401f,mp4a.40.2\",RESOLUTION=960x540,FRAME-RATE=30.000,CLOSED-CAPTIONS=\"CC\"",
      "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_1660.m3u8"
   ],
   "media": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_1660.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "CLOSED-CAPTIONS": "CC",
         "FRAME-RATE": 30.0,
         "RESOLUTION": "960x540",
         "CODECS": "avc1.4d401f,mp4a.40.2",
         "AVERAGE-BANDWIDTH": 1826000,
         "BANDWIDTH": 2288000
      },
      "https": "//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_1660.m3u8"
   },
   "base_uri": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/"
}
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=4681600,AVERAGE-BANDWIDTH=3696000,CODECS=\"avc1.4d401f,mp4a.40.2\",RESOLUTION=1280x720,FRAME-RATE=30.000,CLOSED-CAPTIONS=\"CC\"",
      "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_3360.m3u8"
   ],
   "media": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_3360.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "CLOSED-CAPTIONS": "CC",
         "FRAME-RATE": 30.0,
         "RESOLUTION": "1280x720",
         "CODECS": "avc1.4d401f,mp4a.40.2",
         "AVERAGE-BANDWIDTH": 3696000,
         "BANDWIDTH": 4681600
      },
      "https": "//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_3360.m3u8"
   },
   "base_uri": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/"
}
{
   "lines": [
      "#EXT-X-STREAM-INF:BANDWIDTH=9328000,AVERAGE-BANDWIDTH=7326000,CODECS=\"avc1.4d4028,mp4a.40.2\",RESOLUTION=1920x1080,FRAME-RATE=30.000,CLOSED-CAPTIONS=\"CC\"",
      "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_6660.m3u8"
   ],
   "media": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_6660.m3u8",
   "tags": {
      "#EXT-X-STREAM-INF": {
         "CLOSED-CAPTIONS": "CC",
         "FRAME-RATE": 30.0,
         "RESOLUTION": "1920x1080",
         "CODECS": "avc1.4d4028,mp4a.40.2",
         "AVERAGE-BANDWIDTH": 7326000,
         "BANDWIDTH": 9328000
      },
      "https": "//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_6660.m3u8"
   },
   "base_uri": "https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/"
}
{
  "headers": {
    "#EXTM3U": "",
    "#EXT-X-VERSION": 3,
    "#EXT-X-INDEPENDENT-SEGMENTS": ""
  }
}
{'lines': ['#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID="CC",LANGUAGE="eng",NAME="English",INSTREAM-ID="CC1"', '#EXT-X-STREAM-INF:BANDWIDTH=352000,AVERAGE-BANDWIDTH=290400,CODECS="avc1.66.30,mp4a.40.2",RESOLUTION=320x180,FRAME-RATE=30.000,CLOSED-CAPTIONS="CC"', 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_264.m3u8'], 'media': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_264.m3u8', 'pts': None, 'start': None, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-MEDIA': {'INSTREAM-ID': 'CC1', 'NAME': 'English', 'LANGUAGE': 'eng', 'GROUP-ID': 'CC', 'TYPE': 'CLOSED-CAPTIONS'}, '#EXT-X-STREAM-INF': {'CLOSED-CAPTIONS': 'CC', 'FRAME-RATE': 30.0, 'RESOLUTION': '320x180', 'CODECS': 'avc1.66.30,mp4a.40.2', 'AVERAGE-BANDWIDTH': 290400, 'BANDWIDTH': 352000}, 'https': '//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_264.m3u8'}, 'tmp': None, 'base_uri': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
Process-1  is up
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=774400,AVERAGE-BANDWIDTH=635800,CODECS="avc1.4d4015,mp4a.40.2",RESOLUTION=426x240,FRAME-RATE=30.000,CLOSED-CAPTIONS="CC"', 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_578.m3u8'], 'media': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_578.m3u8', 'pts': None, 'start': 0.0, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'CLOSED-CAPTIONS': 'CC', 'FRAME-RATE': 30.0, 'RESOLUTION': '426x240', 'CODECS': 'avc1.4d4015,mp4a.40.2', 'AVERAGE-BANDWIDTH': 635800, 'BANDWIDTH': 774400}, 'https': '//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_578.m3u8'}, 'tmp': None, 'base_uri': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_264.m3u8 ...........Failed
Process-2  is up
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=1267200,AVERAGE-BANDWIDTH=1020800,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="CC"', 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8'], 'media': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8', 'pts': None, 'start': 0.0, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'CLOSED-CAPTIONS': 'CC', 'FRAME-RATE': 30.0, 'RESOLUTION': '640x360', 'CODECS': 'avc1.77.30,mp4a.40.2', 'AVERAGE-BANDWIDTH': 1020800, 'BANDWIDTH': 1267200}, 'https': '//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8'}, 'tmp': None, 'base_uri': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_578.m3u8 ...........Failed
Process-3  is up
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=2288000,AVERAGE-BANDWIDTH=1826000,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=30.000,CLOSED-CAPTIONS="CC"', 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_1660.m3u8'], 'media': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_1660.m3u8', 'pts': None, 'start': 0.0, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'CLOSED-CAPTIONS': 'CC', 'FRAME-RATE': 30.0, 'RESOLUTION': '960x540', 'CODECS': 'avc1.4d401f,mp4a.40.2', 'AVERAGE-BANDWIDTH': 1826000, 'BANDWIDTH': 2288000}, 'https': '//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_1660.m3u8'}, 'tmp': None, 'base_uri': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8 ...........Failed
Process-4  is up
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=4681600,AVERAGE-BANDWIDTH=3696000,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=30.000,CLOSED-CAPTIONS="CC"', 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_3360.m3u8'], 'media': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_3360.m3u8', 'pts': None, 'start': 0.0, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'CLOSED-CAPTIONS': 'CC', 'FRAME-RATE': 30.0, 'RESOLUTION': '1280x720', 'CODECS': 'avc1.4d401f,mp4a.40.2', 'AVERAGE-BANDWIDTH': 3696000, 'BANDWIDTH': 4681600}, 'https': '//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_3360.m3u8'}, 'tmp': None, 'base_uri': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_1660.m3u8 ...........Failed
Process-5  is up
{'lines': ['#EXT-X-STREAM-INF:BANDWIDTH=9328000,AVERAGE-BANDWIDTH=7326000,CODECS="avc1.4d4028,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=30.000,CLOSED-CAPTIONS="CC"', 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_6660.m3u8'], 'media': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_6660.m3u8', 'pts': None, 'start': 0.0, 'end': None, 'duration': 0, 'cue': False, 'cue_data': None, 'tags': {'#EXT-X-STREAM-INF': {'CLOSED-CAPTIONS': 'CC', 'FRAME-RATE': 30.0, 'RESOLUTION': '1920x1080', 'CODECS': 'avc1.4d4028,mp4a.40.2', 'AVERAGE-BANDWIDTH': 7326000, 'BANDWIDTH': 9328000}, 'https': '//rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_6660.m3u8'}, 'tmp': None, 'base_uri': 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/', 'last_iv': None, 'last_key_uri': None, 'debug': False}
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_3360.m3u8 ...........Failed
Process-6  is up
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_6660.m3u8 ...........Failed
Process-1  is down

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.