threefive 3.0.93__tar.gz → 3.0.97__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.93 → threefive-3.0.97}/PKG-INFO +294 -139
- {threefive-3.0.93 → threefive-3.0.97}/README.md +293 -138
- {threefive-3.0.93 → threefive-3.0.97}/pyproject.toml +1 -1
- {threefive-3.0.93 → threefive-3.0.97}/threefive/__init__.py +3 -13
- {threefive-3.0.93 → threefive-3.0.97}/threefive/base.py +21 -18
- {threefive-3.0.93 → threefive-3.0.97}/threefive/bitn.py +45 -21
- {threefive-3.0.93 → threefive-3.0.97}/threefive/cli.py +202 -212
- threefive-3.0.97/threefive/crctable.py +34 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/cue.py +45 -24
- {threefive-3.0.93 → threefive-3.0.97}/threefive/gums.py +11 -13
- {threefive-3.0.93 → threefive-3.0.97}/threefive/hls.py +8 -10
- {threefive-3.0.93 → threefive-3.0.97}/threefive/hlstags.py +9 -2
- {threefive-3.0.93 → threefive-3.0.97}/threefive/new_reader.py +16 -18
- {threefive-3.0.93 → threefive-3.0.97}/threefive/segment.py +11 -12
- {threefive-3.0.93 → threefive-3.0.97}/threefive/stream.py +107 -116
- {threefive-3.0.93 → threefive-3.0.97}/threefive/throttle.py +4 -3
- {threefive-3.0.93 → threefive-3.0.97}/threefive/udp.py +3 -18
- {threefive-3.0.93 → threefive-3.0.97}/threefive/version.py +1 -1
- {threefive-3.0.93 → threefive-3.0.97}/threefive.egg-info/PKG-INFO +294 -139
- {threefive-3.0.93 → threefive-3.0.97}/threefive.egg-info/SOURCES.txt +0 -1
- threefive-3.0.93/threefive/bump.py +0 -236
- threefive-3.0.93/threefive/crctable.py +0 -258
- {threefive-3.0.93 → threefive-3.0.97}/LICENSE +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/setup.cfg +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/aac.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/commands.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/crc.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/descriptors.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/encode.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/hlsprofile.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/iframes.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/packetdata.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/pmt.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/section.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/segmentation.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/sixfix.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/speedo.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/streamtypes.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/stuff.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/superkabuki.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/upids.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/uxp.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive/xml.py +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive.egg-info/dependency_links.txt +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/threefive.egg-info/entry_points.txt +0 -0
- {threefive-3.0.93 → threefive-3.0.97}/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.97
|
|
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
|
|
@@ -17,47 +17,115 @@ Description-Content-Type: text/markdown
|
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Dynamic: license-file
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
_A lot of people consider me to be a subject matter expert on SCTE-35,<BR> I see myself more as the undisputed heavy weight champion of SCTE-35._ ~Adrian
|
|
21
|
+
|
|
22
|
+
# [ threefive ]
|
|
23
|
+
|
|
24
|
+
# Over 1.2 Million Installs.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
21
28
|
* __Decodes SCTE-35__ from `MPEGTS`✔ `Base64`✔ `Bytes`✔ `DASH`✔ `Hex` ✔ `HLS`✔ `Integers`✔ `JSON`✔ `XML`✔ `XML+Binary`✔
|
|
22
29
|
* __Encodes SCTE-35__ to `MPEGTS`✔ `Base64`✔ `Bytes`✔ `Hex`✔ `Integers`✔ `JSON`✔ `XML`✔ `XML+Binary`✔
|
|
23
|
-
___
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
* __threefive__ now has support for __SCTE-35-2. Event Descriptors__ and __Property types__ from the recently published __2026 SCTE-35-2 Specification__.
|
|
27
|
-
* __threefive v3.0.93__ now supports HLS autodetection in the cli.
|
|
28
|
-
___
|
|
31
|
+
# [ version ]
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
### __latest is v.3.0.97__
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# [ really really quick start ]
|
|
37
|
+
|
|
38
|
+
* __Install__
|
|
39
|
+
```
|
|
40
|
+
python3 -m pip install threefive`
|
|
41
|
+
```
|
|
42
|
+
* __decoding SCTE-35__
|
|
43
|
+
* __base64__
|
|
44
|
+
* decode __SCTE-35__ as __base64__
|
|
45
|
+
```cobol
|
|
46
|
+
threefive '/DAWAAAAAAAAAP/wBQb+AKmKxwAACzuu2Q=='
|
|
47
|
+
```
|
|
48
|
+
* decode __SCTE-35__ as __base64__ and __convert SCTE-35 to hex__
|
|
49
|
+
```cobol
|
|
50
|
+
threefive '/DAWAAAAAAAAAP/wBQb+AKmKxwAACzuu2Q==' hex
|
|
51
|
+
```
|
|
52
|
+
* __Hex__
|
|
53
|
+
* decode __SCTE-35__ as __hex__
|
|
54
|
+
```cobol
|
|
55
|
+
threefive '0xfc301600000000000000fff00506fe00a98ac700000b3baed9'
|
|
56
|
+
```
|
|
57
|
+
* decode __SCTE-35__ as __hex__ and __convert__ __SCTE-35__ to __xml__
|
|
58
|
+
```cobol
|
|
59
|
+
threefive '0xfc301600000000000000fff00506fe00a98ac700000b3baed9' xml
|
|
60
|
+
```
|
|
61
|
+
* __HLS__
|
|
62
|
+
* decode __SCTE-35__ from __HLS__ ( a rendition or a master.m3u8)
|
|
63
|
+
```cobol
|
|
64
|
+
threefive 'https://demo.unified-streaming.com/k8s/live/scte35.isml/.m3u8'
|
|
65
|
+
```
|
|
66
|
+
* __MPEGTS__
|
|
67
|
+
* decode __SCTE-35__ from __MPEGTS__
|
|
68
|
+
```cobol
|
|
69
|
+
threefive 'https;//iodisco.com/longb2.ts'
|
|
70
|
+
```
|
|
71
|
+
* decode __SCTE-35__ from __MPEGTS__ and __convert__ __SCTE-35__ to __bytes__
|
|
72
|
+
```cobol
|
|
73
|
+
threefive 'https;//iodisco.com/longb2.ts' bytes
|
|
74
|
+
```
|
|
75
|
+
* __Multicast__
|
|
76
|
+
* decode __SCTE-35__ from __MPEGTS__ over __Multicast__
|
|
77
|
+
```cobol
|
|
78
|
+
threefive udp://@235.3.5.35:3535
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
* __threefive does a lot more__, that was just to get you started.
|
|
35
82
|
___
|
|
36
|
-
|
|
83
|
+
|
|
84
|
+
# [ Documentation ]
|
|
85
|
+
|
|
86
|
+
[A Lot of Examples ](https://github.com/superkabuki/threefive_is_scte35/blob/main/examples) | [ Tip of the Week ](totw.md) | [ Cheap Tricks ](cheaptricks.md) |
|
|
87
|
+
|
|
88
|
+
|
|
37
89
|
#### Need to inject SCTE-35 into HLS? [X9k3.](https://github.com/superkabuki/x9k3)
|
|
90
|
+
|
|
38
91
|
* [__web based SCTE-35 tools__](#web) - threefive and friends over http.
|
|
92
|
+
|
|
39
93
|
* [__install__](#install)
|
|
94
|
+
|
|
40
95
|
* [__quick start__](quickstart.md)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
96
|
+
|
|
97
|
+
* ___SCTE-35 on the command line___
|
|
98
|
+
* [ __the threefive cli tool__](#-cli-) _If you work with SCTE-35, this is as cool as it gets._
|
|
99
|
+
|
|
100
|
+
* __other included tools__
|
|
44
101
|
* [__scte35fix__](#scte35fix) _ffmpeg changes scte-35 streams into bin data, scte35fix changes them back._
|
|
45
102
|
* [__scte35inject__](scte35inject.md) _scte35inject inject scte-35 into mpegts._
|
|
46
103
|
* [__gums__](#gums) _gums is a multicast sender(server) for video_
|
|
47
|
-
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
* __the threefive library__ _cool code for the cool kids_.
|
|
48
107
|
* [__Using the threefive.Cue class__](lib.md)
|
|
49
|
-
* [__Using the threefive library__](
|
|
108
|
+
* [__Using the threefive library__](#-using-the-library-) _decode SCTE-35 with less than ten lines of code_
|
|
50
109
|
* * [threefive __Classes__](#classes) _threefive is OO, made to subclass_
|
|
51
110
|
* [__Cue__ Class](https://github.com/superkabuki/threefive/blob/main/cue.md) _this class you'll use often_
|
|
52
111
|
* [__Stream__ Class](https://github.com/superkabuki/threefive/blob/main/stream.md) _this is the class for parsing MPEGTS_
|
|
112
|
+
|
|
53
113
|
* [SCTE-35 __Sidecar Files__](https://github.com/superkabuki/SCTE-35_Sidecar_Files) _threefive supports SCTE-35 sidecar files_
|
|
54
|
-
|
|
114
|
+
|
|
115
|
+
* [SCTE-35 __HLS__](https://github.com/superkabuki/threefive/blob/main/hls.md) _parse SCTE-35 in HLS in MPEGTS,CMAF, or fmP4__
|
|
116
|
+
|
|
55
117
|
* [SCTE-35 __XML__ ](https://github.com/superkabuki/SCTE-35/blob/main/xml.md) and [More __XML__](node.md) _threefive can parse and encode SCTE-35 xml_
|
|
118
|
+
|
|
56
119
|
* [__Encode__ SCTE-35](https://github.com/superkabuki/threefive/blob/main/encode.md) _threefive can encode SCTE-35 in every SCTE-35 format_
|
|
120
|
+
|
|
57
121
|
* [Make your __threefive__ script an executable with __cython__](cython.md) _threefive is compatible with all python tools_
|
|
58
122
|
</samp>
|
|
59
123
|
|
|
60
124
|
## [Install]
|
|
125
|
+
|
|
126
|
+
* __threefive__ is curretnly tested on python-3.11, python-3.14, python-3.14t, pypy-7.3.11 and pypy-7.3.22
|
|
127
|
+
|
|
128
|
+
* __threefive__ is some of the __fastest code__ you'll see on __python3__.
|
|
61
129
|
* __python3 via pip__
|
|
62
130
|
```rebol
|
|
63
131
|
python3 -mpip install threefive
|
|
@@ -96,121 +164,120 @@ make install py3=python3.14
|
|
|
96
164
|
# works for any python in your path or use a full path if needed.
|
|
97
165
|
|
|
98
166
|
```
|
|
99
|
-
|
|
167
|
+
#### [⇧](#-documentation-)
|
|
100
168
|
___
|
|
101
169
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
The format is auto-detected.
|
|
170
|
+
## [ CLI ]
|
|
171
|
+
threefive is designed to be easy to use. I'm not sure that it's served well by a long explaination, so I'm going to try and keep this brief.
|
|
105
172
|
|
|
106
|
-
|
|
173
|
+
### The threefive cli tool.
|
|
107
174
|
|
|
108
|
-
|
|
109
|
-
```js
|
|
110
|
-
threefive https://example.com/master.m3u8
|
|
111
|
-
```
|
|
175
|
+
the threefive cli tool decodes SCTE-35, formats are autodetected, and they all work the same way.
|
|
112
176
|
|
|
113
|
-
|
|
114
|
-
SCTE-35 can be parsed from MPEGTS over a variety of protocols.
|
|
115
|
-
* __SCTE-35 Input__: MPEGTS
|
|
116
|
-
* __Protocols__: pipes, files, stdin, http(s), multicast,SRT and UDP.
|
|
117
|
-
* __SCTE-35 Output__: JSON _(default)_ base64, bytes, hex, int, xml, and xmlbin.
|
|
177
|
+
threefive [media to parse for SCTE-35]
|
|
118
178
|
|
|
119
|
-
|
|
120
|
-
|-------|------------|-----------|---------------------------------------------------------|
|
|
121
|
-
|__MPEGTS__|file|__JSON__ | __threefive__ video.ts |
|
|
122
|
-
|__.__|https|__base64__ | __threefive__ https://example.com/video.ts __base64__ |
|
|
123
|
-
|__.__|multicast|__bytes__ | __threefive__ udp://@235.3.5:3535 __bytes__ |
|
|
124
|
-
|__.__|SRT|__hex__ | __threefive__ srt://1.2.3.4:4201 __hex__ |
|
|
125
|
-
|__.__|UDP|__int__ | __threefive__ udp://10.10.10.10:1011 __int__ |
|
|
126
|
-
|__.__|Pipe|__xml__| cat video.ts \| __threefive__ __xml__ |
|
|
127
|
-
|__.__|stdin|__xml+bin__| __threefive__ __xmlbin__ < video.ts|
|
|
179
|
+
examples:
|
|
128
180
|
|
|
129
|
-
|
|
181
|
+
*
|
|
182
|
+
```sed
|
|
183
|
+
threefive '/DAWAAAAAAAAAP/wBQb+AKmKxwAACzuu2Q=='
|
|
184
|
+
```
|
|
185
|
+
*
|
|
186
|
+
```sed
|
|
187
|
+
threefive 0xfc301600000000000000fff00506fe00a98ac700000b3baed9
|
|
188
|
+
```
|
|
189
|
+
*
|
|
190
|
+
```sed
|
|
191
|
+
threefive 1583008701074197245727019716796221242036302348025116111908569
|
|
192
|
+
```
|
|
193
|
+
*
|
|
194
|
+
```sed
|
|
195
|
+
threefive video.ts
|
|
196
|
+
```
|
|
197
|
+
*
|
|
198
|
+
```sed
|
|
199
|
+
threefive https://demo.unified-streaming.com/k8s/live/scte35.isml/scte35-audio_eng=64000-video=500000.m3u8
|
|
200
|
+
```
|
|
130
201
|
|
|
131
|
-
|
|
202
|
+
* Formats like XML and JSON that may be to large to type on the command line,they can be redirected or piped in to threefive.
|
|
132
203
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
> __Here are several examples.__
|
|
141
|
-
|
|
142
|
-
|SCTE-35 Input | SCTE-35 Output | Command |
|
|
143
|
-
|-------|-----------|---------------------------------------------------------|
|
|
144
|
-
|__base64__|__JSON__ | __threefive__ '/DAWAAAAAAAAAP/wBQb+AKmKxwAACzuu2Q==' |
|
|
145
|
-
|__.__|__bytes__ | __threefive__ '/DAWAAAAAAAAAP/wBQb+AKmKxwAACzuu2Q==' __bytes__|
|
|
146
|
-
|__.__|__hex__ | __threefive__ '/DAWAAAAAAAAAP/wBQb+AKmKxwAACzuu2Q==' __hex__|
|
|
147
|
-
|__.__|__xml__ | __threefive__ '/DAWAAAAAAAAAP/wBQb+AKmKxwAACzuu2Q==' __xml__|
|
|
148
|
-
|__hex__ | __JSON__ | __threefive__ 0xfc301600000000000000fff00506fe00a98ac700000b3baed9|
|
|
149
|
-
|__.__ | __base64__ | __threefive__ 0xfc301600000000000000fff00506fe00a98ac700000b3baed9 __base64__ |
|
|
150
|
-
|__.__ | __int__ | __threefive__ 0xfc301600000000000000fff00506fe00a98ac700000b3baed9 __int__ |
|
|
151
|
-
|__.__ | __xmlbin__ | __threefive__ 0xfc301600000000000000fff00506fe00a98ac700000b3baed9 __xmlbin__ |
|
|
152
|
-
| __int__ | __JSON__ | __threefive__ 1583008701074197245727019716796221242036302348025116111908569 |
|
|
153
|
-
|__.__ | __hex__ | __threefive__ 1583008701074197245727019716796221242036302348025116111908569 __hex__ |
|
|
154
|
-
|__.__ | __xml__ | __threefive__ 1583008701074197245727019716796221242036302348025116111908569 __xml__ |
|
|
155
|
-
|__JSON__ |__base64__ | __threefive__ < json.json __base64__ |
|
|
156
|
-
|__.__ |__bytes__ | __threefive__ < json.json __bytes__ |
|
|
157
|
-
|__.__ |__xml__ | __threefive__ < json.json __xml__ |
|
|
158
|
-
|__xml__ |__JSON__ | __threefive__ < xml.xml |
|
|
159
|
-
|__xmlbin__|__int__ | __threefive__ < xmlbin.xml __int__ |
|
|
204
|
+
* redirect
|
|
205
|
+
```sed
|
|
206
|
+
threefive < xml.xml
|
|
207
|
+
```
|
|
208
|
+
* pipe
|
|
209
|
+
```sed
|
|
210
|
+
cat json.json | threefive
|
|
160
211
|
|
|
161
|
-
|
|
212
|
+
```
|
|
213
|
+
### cli outputs and converting SCTE-35 Formats
|
|
162
214
|
|
|
163
|
-
|
|
215
|
+
* the __default output format for threefive is json__
|
|
164
216
|
|
|
165
|
-
|
|
166
|
-
*
|
|
167
|
-
* threefive has built in help, just type `threefive help`
|
|
168
|
-
* This table shows how to use them.
|
|
169
|
-
|
|
170
|
-
| Description | How To Use |
|
|
171
|
-
|------------------------------------------|---------------------------------------------------------|
|
|
172
|
-
| Inject __SCTE35__ packets |threefive __inject__ -i in.video -s sidecar.txt -o out.ts|
|
|
173
|
-
| Show raw __SCTE35__ packets |threefive __packets__ udp://@235.35.3.5:3535 |
|
|
174
|
-
| Copy MPEGTS stream to stdout at realtime speed| threefive __rt__ input.ts | mplayer - |
|
|
175
|
-
| Create __SCTE35__ sidecar file |threefive __sidecar__ video.ts |
|
|
176
|
-
| Show streams in mpegts stream | threefive __show__ https://example.com/video.ts |
|
|
177
|
-
| Show __iframes__ in mpegts stream |threefive __iframes__ srt://10.10.1.3:9000 |
|
|
178
|
-
| Show __PTS__ values from mpegts stream | threefive __pts__ udp://192.168.1.10:9000 |
|
|
179
|
-
|__Proxy__ the __mpegts__ stream to stdout |threefive __proxy__ https://wexample.com/video.ts |
|
|
180
|
-
| | |
|
|
181
|
-
| | |
|
|
217
|
+
* The cli tool can convert from one SCTE-35 format to another using keywords.
|
|
218
|
+
* The keywords are __base64,bytes,hex, int,json,xml, and xmlbin__
|
|
182
219
|
|
|
183
|
-
|
|
220
|
+
* some conversion examples
|
|
184
221
|
|
|
185
|
-
# [⇧](#-documentation-)
|
|
186
222
|
|
|
223
|
+
* SCTE-35 Base64 to SCTE-35 Hex
|
|
224
|
+
```sed
|
|
225
|
+
threefive '/DAWAAAAAAAAAP/wBQb+AKmKxwAACzuu2Q==' hex
|
|
226
|
+
```
|
|
227
|
+
* SCTE-35 Int to SCTE-35 Xml
|
|
228
|
+
```sed
|
|
229
|
+
threefive 1583008701074197245727019716796221242036302348025116111908569 xml
|
|
230
|
+
```
|
|
231
|
+
* SCTE-35 Hex to SCTE-35 xml+binary
|
|
232
|
+
```sed
|
|
233
|
+
threefive 0xfc301600000000000000fff00506fe00a98ac700000b3baed9 xmlbin
|
|
234
|
+
```
|
|
187
235
|
|
|
188
|
-
###
|
|
189
|
-
threefive
|
|
190
|
-
#### scte35bump
|
|
236
|
+
### threefive cli and MPEGTS
|
|
237
|
+
* threefive can parse MPEGTS from stdin, local files, HTTP(s), Multicast, SRT, and unicast UDP.
|
|
191
238
|
|
|
192
|
-
*
|
|
239
|
+
* some mpegts examples
|
|
193
240
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
241
|
+
* local
|
|
242
|
+
```sed
|
|
243
|
+
threefive video.ts
|
|
244
|
+
```
|
|
245
|
+
* stdin
|
|
246
|
+
```sed
|
|
247
|
+
cat video.ts | threefive
|
|
248
|
+
```
|
|
249
|
+
* https
|
|
250
|
+
```sed
|
|
251
|
+
threefive https://iodisco.com/longb2.ts
|
|
252
|
+
```
|
|
253
|
+
* multicast
|
|
254
|
+
```sed
|
|
255
|
+
threefive udp://@235.35.3.5:3535
|
|
256
|
+
```
|
|
197
257
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
Output file [default: sys.stdout.buffer]
|
|
205
|
-
-s SECS, --secs SECS Adjustment to apply to SCTE-35 Cues. [default: 0.0]
|
|
258
|
+
### threefive cli MPEGTS outputs
|
|
259
|
+
|
|
260
|
+
* the __default output for MPEGTS is json__
|
|
261
|
+
|
|
262
|
+
* keywords can be used to specify other output formats
|
|
263
|
+
* The keywords are __base64,bytes,hex, int,json,xml, and xmlbin__
|
|
206
264
|
|
|
207
|
-
|
|
265
|
+
* An example of mpegts with a keyword
|
|
208
266
|
```
|
|
267
|
+
threefive https://iodisco.com/longb2.ts xml
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
|
|
209
271
|
___
|
|
210
272
|
|
|
211
|
-
|
|
273
|
+
#### [⇧](#-documentation-)
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
##### Other tools
|
|
277
|
+
|
|
278
|
+
threefive also comes with:
|
|
212
279
|
|
|
213
|
-
|
|
280
|
+
##### gums
|
|
214
281
|
* the Grande Udp Multicast Server
|
|
215
282
|
|
|
216
283
|
```js
|
|
@@ -230,7 +297,7 @@ options:
|
|
|
230
297
|
gums is part of threefive.
|
|
231
298
|
```
|
|
232
299
|
|
|
233
|
-
|
|
300
|
+
#### [⇧](#-documentation-)
|
|
234
301
|
|
|
235
302
|
#### HLS
|
|
236
303
|
|
|
@@ -239,27 +306,115 @@ gums is part of threefive.
|
|
|
239
306
|
```js
|
|
240
307
|
$ threefive hls help
|
|
241
308
|
```
|
|
309
|
+
```smalltalk
|
|
242
310
|
|
|
243
311
|
[ Input ]
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
312
|
+
|
|
313
|
+
A m3u8 URI as input.
|
|
314
|
+
|
|
315
|
+
[what is supported]
|
|
316
|
+
|
|
317
|
+
M3U8 formats: master, rendition
|
|
318
|
+
Segment types: AAC, AC3, MPEGTS, CMAF,fMP4
|
|
319
|
+
Video codecs: mpeg2, h.264, h.265
|
|
320
|
+
Audio codecs: mpeg2, aac, ac3, mp3
|
|
321
|
+
Protocols: File, Http(s), Multicast, SRT, Stdin, UDP
|
|
322
|
+
Encryption: AES-128 (automatic)
|
|
323
|
+
|
|
324
|
+
[ SCTE-35 ]
|
|
325
|
+
|
|
326
|
+
SCTE-35 Embedded Cues as well as all SCTE-35 HLS Tags can be parsed.
|
|
327
|
+
|
|
328
|
+
[ Supported HLS Tags ]
|
|
329
|
+
|
|
330
|
+
* #EXT-OATCLS-SCTE35
|
|
331
|
+
* #EXT-X-CUE-OUT-CONT
|
|
332
|
+
* #EXT-X-DATERANGE
|
|
333
|
+
* #EXT-X-SCTE35
|
|
334
|
+
* #EXT-X-CUE-IN
|
|
335
|
+
* #EXT-X-CUE-OUT
|
|
336
|
+
|
|
337
|
+
[ SCTE-35 Parsing Profiles ]
|
|
338
|
+
|
|
339
|
+
SCTE-35 parsing can be fine tuned by setting a parsing profile.
|
|
340
|
+
|
|
341
|
+
running the command: threefive hls profile
|
|
342
|
+
|
|
343
|
+
will generate a default profile and write a file named hls.profile
|
|
344
|
+
in the current working directory.
|
|
345
|
+
|
|
346
|
+
a@fu:~$ cat hls.profile
|
|
347
|
+
|
|
348
|
+
expand_cues = False
|
|
349
|
+
parse_segments = False
|
|
350
|
+
parse_manifests = True
|
|
351
|
+
hls_tags = #EXT-OATCLS-SCTE35,#EXT-X-CUE-OUT-CONT,
|
|
352
|
+
#EXT-X-DATERANGE,#EXT-X-SCTE35,#EXT-X-CUE-IN,#EXT-X-CUE-OUT
|
|
353
|
+
command_types = 0x6,0x5
|
|
354
|
+
descriptor_tags = 0x2
|
|
355
|
+
starts = 0x22,0x30,0x32,0x34,0x36,0x44,0x46
|
|
356
|
+
|
|
357
|
+
( Integers are show in hex (base 16),
|
|
358
|
+
base 10 unsigned integers can also be used in hls.profile )
|
|
359
|
+
|
|
360
|
+
* expand_cues: set to True to show cues fully expanded as JSON
|
|
361
|
+
* parse_segments: set to true to enable parsing SCTE-35 from MPEGTS.
|
|
362
|
+
* parse_manifests: set to true to parse the m3u8 file for SCTE-35 HLS Tags.
|
|
363
|
+
* hls_tags: set which SCTE-35 HLS Tags to parse.
|
|
364
|
+
* command_types: set which Splice Commands to parse.
|
|
365
|
+
* descriptor_tags: set which Splice Descriptor Tags to parse.
|
|
366
|
+
* starts: set which Segmentation Type IDs to use to start breaks.
|
|
367
|
+
|
|
368
|
+
Edit the file as needed and then run threefive.
|
|
369
|
+
|
|
370
|
+
[ Profile Formatting Rules ]
|
|
371
|
+
|
|
372
|
+
* Values do not need to be quoted.
|
|
373
|
+
* Multiple values are separated by a commas.
|
|
374
|
+
* No partial line comments. Comments must be on a separate lines.
|
|
375
|
+
* Comments can be started with a # or //
|
|
376
|
+
* Integers can be base 10 or base 16
|
|
377
|
+
|
|
378
|
+
[ Output Files ]
|
|
379
|
+
scte35 hls creates a few output files.
|
|
380
|
+
|
|
381
|
+
* Profile rules applied to the output:
|
|
382
|
+
|
|
383
|
+
* hls.m3u8 - live playable rewrite of the m3u8 with the profile SCTE-35 rules.
|
|
384
|
+
* hls.sidecar - list of ( pts, HLS SCTE-35 tag ) pairs
|
|
385
|
+
|
|
386
|
+
* Profile rules not applied to the output:
|
|
387
|
+
|
|
388
|
+
* hlsflat.m3u8 - hls live streams are flattened out into a vod playlist.
|
|
389
|
+
When the live m3u8 first loads, every line is written to hlsflat.m3u8
|
|
390
|
+
Wnen a live m3u8 is reloaded, everything except the headers
|
|
391
|
+
is appended to hlsflat.m3u8. This give you a VOD style m3u8
|
|
392
|
+
so you can fast forward or rewind while playing.
|
|
393
|
+
GREAT for debugging SCTE-35 live hls.
|
|
394
|
+
|
|
395
|
+
[ Cool Features ]
|
|
396
|
+
|
|
397
|
+
* threefive can resume when started in the middle of an ad break.
|
|
398
|
+
|
|
399
|
+
2023-10-13T05:59:50.24Z Resuming Ad Break
|
|
400
|
+
2023-10-13T05:59:50.34Z Setting Break Timer to 17.733
|
|
401
|
+
2023-10-13T05:59:50.44Z Setting Break Duration to 60.067
|
|
402
|
+
|
|
403
|
+
[ Example Usage ]
|
|
404
|
+
|
|
405
|
+
* Show this help: threefive hls help
|
|
406
|
+
|
|
407
|
+
* Generate a new hls.profile: threefive hls profile
|
|
408
|
+
|
|
409
|
+
* parse an m3u8: scte35hls https://example.com/out/master.m3u8
|
|
410
|
+
|
|
411
|
+
|
|
258
412
|
```
|
|
259
413
|
|
|
260
|
-
|
|
414
|
+
#### [⇧](#-documentation-)
|
|
261
415
|
|
|
262
416
|
#### __scte35fix__
|
|
417
|
+
|
|
263
418
|
* when ffmpeg changes a SCTE-35 stream to bin data stream, scte35fix changes it back.
|
|
264
419
|
|
|
265
420
|
```js
|
|
@@ -284,9 +439,9 @@ scte35fix is part of threefive.
|
|
|
284
439
|
```
|
|
285
440
|
___
|
|
286
441
|
|
|
287
|
-
|
|
442
|
+
#### [⇧](#-documentation-)
|
|
288
443
|
|
|
289
|
-
|
|
444
|
+
## [ Using the library ]
|
|
290
445
|
* Let me show you how easy threefive is to use.
|
|
291
446
|
|
|
292
447
|
* reading SCTE-35 xml from a file
|
|
@@ -523,9 +678,9 @@ Type "help", "copyright", "credits" or "license" for more information.
|
|
|
523
678
|
```
|
|
524
679
|
___
|
|
525
680
|
|
|
526
|
-
|
|
681
|
+
#### [⇧](#-documentation-)
|
|
527
682
|
|
|
528
|
-
|
|
683
|
+
#### [web]
|
|
529
684
|
* [threefive SCTE-35 __Online Parser__](https://iodisco.com/scte35) __hosted on my server iodisco.com__
|
|
530
685
|
* Parse SCTE-35 in MPEGTS over HTTP, in your browser with[ Go, Wasm and Super Karate Death Car](https://bigcorp.ltd/gowasm) __hosted om my server bigcorp.ltd__
|
|
531
686
|
* Parse SCTE-35 in MPEGTS over HTTP, in your browser with[ threefive.js,javascript, and a little sed](https://bigcorp.ltd/bread) just to keep things interesting. __hosted om my server bigcorp.ltd__
|
|
@@ -534,17 +689,17 @@ ___
|
|
|
534
689
|
__hosted on my server iodisco.com__
|
|
535
690
|
___
|
|
536
691
|
|
|
537
|
-
|
|
692
|
+
#### [⇧](#-documentation-)
|
|
538
693
|
|
|
539
|
-
|
|
694
|
+
#### [XML]
|
|
540
695
|
* [XML](https://github.com/superkabuki/SCTE-35/blob/main/xml.md) __New__! _updated 05/01/2025_
|
|
541
696
|
|
|
542
|
-
|
|
697
|
+
#### [HLS]
|
|
543
698
|
* [Advanced Parsing of SCTE-35 in HLS with threefive](https://github.com/superkabuki/threefive/blob/main/hls.md) All HLS SCTE-35 tags, Sidecar Files, AAC ID3 Header Timestamps, SCTE-35 filters... Who loves you baby?
|
|
544
699
|
|
|
545
|
-
|
|
700
|
+
#### [⇧](#-documentation-)
|
|
546
701
|
|
|
547
|
-
|
|
702
|
+
#### [Classes]
|
|
548
703
|
* The python built in help is always the most up to date docs for the library.
|
|
549
704
|
|
|
550
705
|
```py3
|
|
@@ -562,9 +717,9 @@ a@fu:~/build7/threefive$ pypy3
|
|
|
562
717
|
|
|
563
718
|
___
|
|
564
719
|
|
|
565
|
-
|
|
720
|
+
#### [⇧](#-documentation-)
|
|
566
721
|
|
|
567
|
-
|
|
722
|
+
#### [threefive now supports SRT]
|
|
568
723
|
|
|
569
724
|
* _( You have to unmute the audio )_
|
|
570
725
|
|
|
@@ -579,9 +734,9 @@ https://github.com/user-attachments/assets/a323ea90-867f-480f-a55f-e9339263e511
|
|
|
579
734
|
|
|
580
735
|
___
|
|
581
736
|
|
|
582
|
-
|
|
737
|
+
#### [⇧](#-documentation-)
|
|
583
738
|
|
|
584
|
-
|
|
739
|
+
##### [more]
|
|
585
740
|
|
|
586
741
|
* [Encode SCTE-35](https://github.com/superkabuki/threefive/blob/main/encode.md) Some encoding code examples.
|
|
587
742
|
___
|