threefive 3.0.81__tar.gz → 3.0.83__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {threefive-3.0.81 → threefive-3.0.83}/PKG-INFO +32 -6
- {threefive-3.0.81 → threefive-3.0.83}/README.md +31 -5
- {threefive-3.0.81 → threefive-3.0.83}/pyproject.toml +1 -1
- {threefive-3.0.81 → threefive-3.0.83}/threefive/__init__.py +1 -2
- {threefive-3.0.81 → threefive-3.0.83}/threefive/cli.py +2 -4
- {threefive-3.0.81 → threefive-3.0.83}/threefive/encode.py +1 -1
- {threefive-3.0.81 → threefive-3.0.83}/threefive/gums.py +3 -2
- {threefive-3.0.81 → threefive-3.0.83}/threefive/hls.py +1 -1
- {threefive-3.0.81 → threefive-3.0.83}/threefive/new_reader.py +3 -5
- {threefive-3.0.81 → threefive-3.0.83}/threefive/segment.py +2 -2
- {threefive-3.0.81 → threefive-3.0.83}/threefive/sixfix.py +5 -6
- {threefive-3.0.81 → threefive-3.0.83}/threefive/stuff.py +1 -1
- {threefive-3.0.81 → threefive-3.0.83}/threefive/superkabuki.py +1 -3
- {threefive-3.0.81 → threefive-3.0.83}/threefive/upids.py +1 -1
- {threefive-3.0.81 → threefive-3.0.83}/threefive/version.py +1 -1
- {threefive-3.0.81 → threefive-3.0.83}/threefive.egg-info/PKG-INFO +32 -6
- {threefive-3.0.81 → threefive-3.0.83}/LICENSE +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/setup.cfg +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/aac.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/base.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/bitn.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/bump.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/commands.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/crc.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/crctable.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/cue.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/descriptors.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/hlsprofile.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/hlstags.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/iframes.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/packetdata.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/pmt.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/section.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/segmentation.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/speedo.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/stream.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/streamtypes.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/throttle.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/udp.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/uxp.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive/xml.py +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive.egg-info/SOURCES.txt +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive.egg-info/dependency_links.txt +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive.egg-info/entry_points.txt +0 -0
- {threefive-3.0.81 → threefive-3.0.83}/threefive.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: threefive
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.83
|
|
4
4
|
Summary: threefive is The #1 SCTE-35 Decoder and Encoder on the Planet.
|
|
5
5
|
Author-email: AdrianofDoom <spam@iodisco.com>
|
|
6
6
|
License-Expression: Sleepycat
|
|
@@ -18,7 +18,10 @@ License-File: LICENSE
|
|
|
18
18
|
Dynamic: license-file
|
|
19
19
|
|
|
20
20
|
### It is now official, phase three of threefive's global domination has begun. Behold [threefive.js](https://github.com/keithah/threefive.js)
|
|
21
|
-
|
|
21
|
+
_threefive has been ported to Javascript, C#, and Go._
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
22
25
|
|
|
23
26
|
# [ threefive ]
|
|
24
27
|
|
|
@@ -43,6 +46,28 @@ _(ominous music plays in the background)_
|
|
|
43
46
|
|
|
44
47
|
___
|
|
45
48
|
|
|
49
|
+
# Tip of the week.
|
|
50
|
+
## Q. How do I get a list of all the SCTE-35 cues in a stream?
|
|
51
|
+
## A. Like this
|
|
52
|
+
```py3
|
|
53
|
+
from threefive import Stream
|
|
54
|
+
|
|
55
|
+
strm=Stream('some_video.ts')
|
|
56
|
+
list_o_cues=[]
|
|
57
|
+
for cue in strm.decode_next(): # Stream.decode_next is a generator
|
|
58
|
+
list_o_cues.append(cue) # these will be threefive.Cue instances
|
|
59
|
+
|
|
60
|
+
# then you can do stuff like
|
|
61
|
+
|
|
62
|
+
for cue in list_o_cues:
|
|
63
|
+
|
|
64
|
+
print(cue.xml())
|
|
65
|
+
|
|
66
|
+
print(cue.command)
|
|
67
|
+
|
|
68
|
+
cue.show()
|
|
69
|
+
```
|
|
70
|
+
* I have always felt that if you use a library, you shouldn't have to write a lot of code.
|
|
46
71
|
|
|
47
72
|
|
|
48
73
|
### [ News ]
|
|
@@ -54,14 +79,13 @@ ___
|
|
|
54
79
|
* I have been __trying to setup threefive on readthedocs__,it's not going very well, but I'm working on it.
|
|
55
80
|
___
|
|
56
81
|
|
|
57
|
-
## [ Latest version is v3.0.
|
|
82
|
+
## [ Latest version is v3.0.83 ]
|
|
58
83
|
|
|
59
|
-
*
|
|
84
|
+
* __v3.0.83__ is to fix a bug 3.0.81 related to AES decryption..
|
|
85
|
+
* threefive cyclomatic complexity score is 1.9337094499294782 _( that's better than the Python standard library)_ .
|
|
60
86
|
* __threefive now has NO External Dependencies__
|
|
61
87
|
* SRT and AES support is now optional
|
|
62
88
|
* __threefive is fully python v3.14 compliant__
|
|
63
|
-
* I fixed everything they broke/changed between v3.09 and 3.14.
|
|
64
|
-
* 0 deprecation warnings.
|
|
65
89
|
* __No more setup tools!__ threefive now uses a __toml file and a Makefile__ to generate packages,
|
|
66
90
|
* I'm just trying to fit in with the cool python kids.
|
|
67
91
|
* __fix__ for addressable tv Upids
|
|
@@ -76,6 +100,8 @@ ___
|
|
|
76
100
|
|
|
77
101
|
# [__[Examples]__](https://github.com/superkabuki/threefive/tree/main/examples)
|
|
78
102
|
|
|
103
|
+
|
|
104
|
+
|
|
79
105
|
# [ Documentation ]
|
|
80
106
|
|
|
81
107
|
* __use threefive on the web__
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
### It is now official, phase three of threefive's global domination has begun. Behold [threefive.js](https://github.com/keithah/threefive.js)
|
|
2
|
-
|
|
2
|
+
_threefive has been ported to Javascript, C#, and Go._
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
3
6
|
|
|
4
7
|
# [ threefive ]
|
|
5
8
|
|
|
@@ -24,6 +27,28 @@ _(ominous music plays in the background)_
|
|
|
24
27
|
|
|
25
28
|
___
|
|
26
29
|
|
|
30
|
+
# Tip of the week.
|
|
31
|
+
## Q. How do I get a list of all the SCTE-35 cues in a stream?
|
|
32
|
+
## A. Like this
|
|
33
|
+
```py3
|
|
34
|
+
from threefive import Stream
|
|
35
|
+
|
|
36
|
+
strm=Stream('some_video.ts')
|
|
37
|
+
list_o_cues=[]
|
|
38
|
+
for cue in strm.decode_next(): # Stream.decode_next is a generator
|
|
39
|
+
list_o_cues.append(cue) # these will be threefive.Cue instances
|
|
40
|
+
|
|
41
|
+
# then you can do stuff like
|
|
42
|
+
|
|
43
|
+
for cue in list_o_cues:
|
|
44
|
+
|
|
45
|
+
print(cue.xml())
|
|
46
|
+
|
|
47
|
+
print(cue.command)
|
|
48
|
+
|
|
49
|
+
cue.show()
|
|
50
|
+
```
|
|
51
|
+
* I have always felt that if you use a library, you shouldn't have to write a lot of code.
|
|
27
52
|
|
|
28
53
|
|
|
29
54
|
### [ News ]
|
|
@@ -35,14 +60,13 @@ ___
|
|
|
35
60
|
* I have been __trying to setup threefive on readthedocs__,it's not going very well, but I'm working on it.
|
|
36
61
|
___
|
|
37
62
|
|
|
38
|
-
## [ Latest version is v3.0.
|
|
63
|
+
## [ Latest version is v3.0.83 ]
|
|
39
64
|
|
|
40
|
-
*
|
|
65
|
+
* __v3.0.83__ is to fix a bug 3.0.81 related to AES decryption..
|
|
66
|
+
* threefive cyclomatic complexity score is 1.9337094499294782 _( that's better than the Python standard library)_ .
|
|
41
67
|
* __threefive now has NO External Dependencies__
|
|
42
68
|
* SRT and AES support is now optional
|
|
43
69
|
* __threefive is fully python v3.14 compliant__
|
|
44
|
-
* I fixed everything they broke/changed between v3.09 and 3.14.
|
|
45
|
-
* 0 deprecation warnings.
|
|
46
70
|
* __No more setup tools!__ threefive now uses a __toml file and a Makefile__ to generate packages,
|
|
47
71
|
* I'm just trying to fit in with the cool python kids.
|
|
48
72
|
* __fix__ for addressable tv Upids
|
|
@@ -57,6 +81,8 @@ ___
|
|
|
57
81
|
|
|
58
82
|
# [__[Examples]__](https://github.com/superkabuki/threefive/tree/main/examples)
|
|
59
83
|
|
|
84
|
+
|
|
85
|
+
|
|
60
86
|
# [ Documentation ]
|
|
61
87
|
|
|
62
88
|
* __use threefive on the web__
|
|
@@ -20,11 +20,11 @@ from .iframes import IFramer
|
|
|
20
20
|
from .new_reader import reader
|
|
21
21
|
from .cue import Cue
|
|
22
22
|
from .stream import Stream
|
|
23
|
-
from .stuff import
|
|
23
|
+
from .stuff import print2, red
|
|
24
24
|
from .stuff import ERR
|
|
25
25
|
from .version import version
|
|
26
26
|
|
|
27
|
-
#
|
|
27
|
+
#import cProfile
|
|
28
28
|
# from sideways import cli as sidecli
|
|
29
29
|
|
|
30
30
|
write2 = False
|
|
@@ -240,7 +240,6 @@ def sidecar_chk(this):
|
|
|
240
240
|
strm = Stream(this)
|
|
241
241
|
strm.decode(func=mk_sidecar)
|
|
242
242
|
|
|
243
|
-
|
|
244
243
|
def speedo_chk(this):
|
|
245
244
|
"""
|
|
246
245
|
speedo_chk displays parse speed for mpegts streams
|
|
@@ -248,7 +247,6 @@ def speedo_chk(this):
|
|
|
248
247
|
strm = Stream(this)
|
|
249
248
|
strm.speed()
|
|
250
249
|
|
|
251
|
-
|
|
252
250
|
mpegts_map = {
|
|
253
251
|
"packets": packet_chk,
|
|
254
252
|
"proxy": proxy_chk,
|
|
@@ -69,7 +69,7 @@ class GumS:
|
|
|
69
69
|
self.socked.sendto(dgram, self.dest_grp)
|
|
70
70
|
throttle.throttle(packets[-1])
|
|
71
71
|
speedo.plus(len(dgram))
|
|
72
|
-
flush
|
|
72
|
+
flush=b'\xff' * 1316
|
|
73
73
|
self.socked.sendto(flush, self.dest_grp)
|
|
74
74
|
|
|
75
75
|
speedo.end()
|
|
@@ -104,7 +104,7 @@ def parse_args():
|
|
|
104
104
|
parse_args parse command line args
|
|
105
105
|
"""
|
|
106
106
|
|
|
107
|
-
parser = argparse.ArgumentParser(epilog="gums is part of threefive.\n\n")
|
|
107
|
+
parser = argparse.ArgumentParser( epilog="gums is part of threefive.\n\n")
|
|
108
108
|
|
|
109
109
|
parser.add_argument(
|
|
110
110
|
"-i",
|
|
@@ -116,6 +116,7 @@ def parse_args():
|
|
|
116
116
|
""",
|
|
117
117
|
)
|
|
118
118
|
|
|
119
|
+
|
|
119
120
|
parser.add_argument(
|
|
120
121
|
"-a",
|
|
121
122
|
"--addr",
|
|
@@ -7,13 +7,11 @@ Home of the reader function
|
|
|
7
7
|
import socket
|
|
8
8
|
import sys
|
|
9
9
|
import urllib.request
|
|
10
|
-
|
|
11
10
|
try:
|
|
12
11
|
from srtfu import SRTfu, SRTO_TRANSTYPE, SRT_LIVE, SRTO_RCVSYN, SRTO_RCVBUF
|
|
13
|
-
|
|
14
|
-
HAS_SRT = True
|
|
12
|
+
HAS_SRT=True
|
|
15
13
|
except ImportError:
|
|
16
|
-
HAS_SRT
|
|
14
|
+
HAS_SRT=False
|
|
17
15
|
from .udp import udp_receiver, mcast_ttl
|
|
18
16
|
from .stuff import blue, ERR, pif, print2
|
|
19
17
|
|
|
@@ -41,7 +39,7 @@ def try_srt(url, headers={}):
|
|
|
41
39
|
if HAS_SRT:
|
|
42
40
|
return _do_srt(uri, headers=headers)
|
|
43
41
|
else:
|
|
44
|
-
print2(
|
|
42
|
+
print2('pip install srtfu to add SRT support')
|
|
45
43
|
return False
|
|
46
44
|
|
|
47
45
|
|
|
@@ -12,7 +12,7 @@ from .pmt import PMT
|
|
|
12
12
|
|
|
13
13
|
fixme = []
|
|
14
14
|
|
|
15
|
-
HELPME
|
|
15
|
+
HELPME="""
|
|
16
16
|
scte35fix checks MPEGTS for SCTE-35 Streams
|
|
17
17
|
that have been change to bin data (type 0x06)
|
|
18
18
|
and changes them back to SCTE-35 (type 0x86) streams.
|
|
@@ -41,14 +41,13 @@ HELPME = """
|
|
|
41
41
|
scte35fix is part of threefive.
|
|
42
42
|
"""
|
|
43
43
|
|
|
44
|
-
|
|
45
44
|
def passed(cue):
|
|
46
45
|
"""
|
|
47
46
|
passed is a function passed to decode
|
|
48
47
|
used to pull pids from streams containing SCTE-35
|
|
49
48
|
so that we don't convert non-SCTE-35 0x06 streams.
|
|
50
49
|
"""
|
|
51
|
-
globals()[
|
|
50
|
+
globals()['fixme'].append(cue.packet_data.pid)
|
|
52
51
|
return cue
|
|
53
52
|
|
|
54
53
|
|
|
@@ -59,7 +58,7 @@ class PreFix(Stream):
|
|
|
59
58
|
|
|
60
59
|
def decode(self, func=passed):
|
|
61
60
|
super().decode(func=passed)
|
|
62
|
-
tofix = list(set(globals()[
|
|
61
|
+
tofix = list(set(globals()['fixme']))
|
|
63
62
|
if tofix:
|
|
64
63
|
print("fixing these pids", tofix)
|
|
65
64
|
return tofix
|
|
@@ -215,7 +214,7 @@ def sixfix(arg):
|
|
|
215
214
|
sixfix converts 0x6 bin data mpegts streams
|
|
216
215
|
that contain SCTE-35 data to stream type 0x86
|
|
217
216
|
"""
|
|
218
|
-
globals()[
|
|
217
|
+
globals()['fixme'] = []
|
|
219
218
|
s1 = PreFix(arg)
|
|
220
219
|
print2(f"reading {arg}")
|
|
221
220
|
sixed = s1.decode(func=passed)
|
|
@@ -231,7 +230,7 @@ def sixfix(arg):
|
|
|
231
230
|
|
|
232
231
|
|
|
233
232
|
def _chk_help():
|
|
234
|
-
for h in [
|
|
233
|
+
for h in ['help','-h', '--help']:
|
|
235
234
|
if h in sys.argv:
|
|
236
235
|
print(HELPME)
|
|
237
236
|
sys.exit()
|
|
@@ -53,9 +53,7 @@ class SuperKabuki(SixFix):
|
|
|
53
53
|
"""
|
|
54
54
|
_parse_args parse command line args
|
|
55
55
|
"""
|
|
56
|
-
parser = argparse.ArgumentParser(
|
|
57
|
-
epilog="scte35inject is part of threefive.\n\n"
|
|
58
|
-
)
|
|
56
|
+
parser = argparse.ArgumentParser(epilog="scte35inject is part of threefive.\n\n")
|
|
59
57
|
parser.add_argument(
|
|
60
58
|
"-i",
|
|
61
59
|
"--input",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: threefive
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.83
|
|
4
4
|
Summary: threefive is The #1 SCTE-35 Decoder and Encoder on the Planet.
|
|
5
5
|
Author-email: AdrianofDoom <spam@iodisco.com>
|
|
6
6
|
License-Expression: Sleepycat
|
|
@@ -18,7 +18,10 @@ License-File: LICENSE
|
|
|
18
18
|
Dynamic: license-file
|
|
19
19
|
|
|
20
20
|
### It is now official, phase three of threefive's global domination has begun. Behold [threefive.js](https://github.com/keithah/threefive.js)
|
|
21
|
-
|
|
21
|
+
_threefive has been ported to Javascript, C#, and Go._
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
22
25
|
|
|
23
26
|
# [ threefive ]
|
|
24
27
|
|
|
@@ -43,6 +46,28 @@ _(ominous music plays in the background)_
|
|
|
43
46
|
|
|
44
47
|
___
|
|
45
48
|
|
|
49
|
+
# Tip of the week.
|
|
50
|
+
## Q. How do I get a list of all the SCTE-35 cues in a stream?
|
|
51
|
+
## A. Like this
|
|
52
|
+
```py3
|
|
53
|
+
from threefive import Stream
|
|
54
|
+
|
|
55
|
+
strm=Stream('some_video.ts')
|
|
56
|
+
list_o_cues=[]
|
|
57
|
+
for cue in strm.decode_next(): # Stream.decode_next is a generator
|
|
58
|
+
list_o_cues.append(cue) # these will be threefive.Cue instances
|
|
59
|
+
|
|
60
|
+
# then you can do stuff like
|
|
61
|
+
|
|
62
|
+
for cue in list_o_cues:
|
|
63
|
+
|
|
64
|
+
print(cue.xml())
|
|
65
|
+
|
|
66
|
+
print(cue.command)
|
|
67
|
+
|
|
68
|
+
cue.show()
|
|
69
|
+
```
|
|
70
|
+
* I have always felt that if you use a library, you shouldn't have to write a lot of code.
|
|
46
71
|
|
|
47
72
|
|
|
48
73
|
### [ News ]
|
|
@@ -54,14 +79,13 @@ ___
|
|
|
54
79
|
* I have been __trying to setup threefive on readthedocs__,it's not going very well, but I'm working on it.
|
|
55
80
|
___
|
|
56
81
|
|
|
57
|
-
## [ Latest version is v3.0.
|
|
82
|
+
## [ Latest version is v3.0.83 ]
|
|
58
83
|
|
|
59
|
-
*
|
|
84
|
+
* __v3.0.83__ is to fix a bug 3.0.81 related to AES decryption..
|
|
85
|
+
* threefive cyclomatic complexity score is 1.9337094499294782 _( that's better than the Python standard library)_ .
|
|
60
86
|
* __threefive now has NO External Dependencies__
|
|
61
87
|
* SRT and AES support is now optional
|
|
62
88
|
* __threefive is fully python v3.14 compliant__
|
|
63
|
-
* I fixed everything they broke/changed between v3.09 and 3.14.
|
|
64
|
-
* 0 deprecation warnings.
|
|
65
89
|
* __No more setup tools!__ threefive now uses a __toml file and a Makefile__ to generate packages,
|
|
66
90
|
* I'm just trying to fit in with the cool python kids.
|
|
67
91
|
* __fix__ for addressable tv Upids
|
|
@@ -76,6 +100,8 @@ ___
|
|
|
76
100
|
|
|
77
101
|
# [__[Examples]__](https://github.com/superkabuki/threefive/tree/main/examples)
|
|
78
102
|
|
|
103
|
+
|
|
104
|
+
|
|
79
105
|
# [ Documentation ]
|
|
80
106
|
|
|
81
107
|
* __use threefive on the web__
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|