threefive 3.0.87__tar.gz → 3.0.89__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.
Files changed (45) hide show
  1. {threefive-3.0.87 → threefive-3.0.89}/PKG-INFO +315 -272
  2. {threefive-3.0.87 → threefive-3.0.89}/README.md +314 -271
  3. {threefive-3.0.87 → threefive-3.0.89}/pyproject.toml +1 -1
  4. {threefive-3.0.87 → threefive-3.0.89}/threefive/bump.py +3 -3
  5. {threefive-3.0.87 → threefive-3.0.89}/threefive/cli.py +17 -95
  6. {threefive-3.0.87 → threefive-3.0.89}/threefive/cue.py +0 -1
  7. {threefive-3.0.87 → threefive-3.0.89}/threefive/descriptors.py +67 -40
  8. {threefive-3.0.87 → threefive-3.0.89}/threefive/encode.py +1 -1
  9. {threefive-3.0.87 → threefive-3.0.89}/threefive/gums.py +2 -3
  10. {threefive-3.0.87 → threefive-3.0.89}/threefive/hls.py +7 -7
  11. {threefive-3.0.87 → threefive-3.0.89}/threefive/new_reader.py +8 -6
  12. {threefive-3.0.87 → threefive-3.0.89}/threefive/segment.py +3 -3
  13. {threefive-3.0.87 → threefive-3.0.89}/threefive/sixfix.py +11 -10
  14. {threefive-3.0.87 → threefive-3.0.89}/threefive/stream.py +81 -67
  15. {threefive-3.0.87 → threefive-3.0.89}/threefive/stuff.py +1 -1
  16. {threefive-3.0.87 → threefive-3.0.89}/threefive/superkabuki.py +3 -1
  17. {threefive-3.0.87 → threefive-3.0.89}/threefive/throttle.py +31 -11
  18. {threefive-3.0.87 → threefive-3.0.89}/threefive/upids.py +1 -1
  19. {threefive-3.0.87 → threefive-3.0.89}/threefive/version.py +1 -1
  20. {threefive-3.0.87 → threefive-3.0.89}/threefive.egg-info/PKG-INFO +315 -272
  21. {threefive-3.0.87 → threefive-3.0.89}/LICENSE +0 -0
  22. {threefive-3.0.87 → threefive-3.0.89}/setup.cfg +0 -0
  23. {threefive-3.0.87 → threefive-3.0.89}/threefive/__init__.py +0 -0
  24. {threefive-3.0.87 → threefive-3.0.89}/threefive/aac.py +0 -0
  25. {threefive-3.0.87 → threefive-3.0.89}/threefive/base.py +0 -0
  26. {threefive-3.0.87 → threefive-3.0.89}/threefive/bitn.py +0 -0
  27. {threefive-3.0.87 → threefive-3.0.89}/threefive/commands.py +0 -0
  28. {threefive-3.0.87 → threefive-3.0.89}/threefive/crc.py +0 -0
  29. {threefive-3.0.87 → threefive-3.0.89}/threefive/crctable.py +0 -0
  30. {threefive-3.0.87 → threefive-3.0.89}/threefive/hlsprofile.py +0 -0
  31. {threefive-3.0.87 → threefive-3.0.89}/threefive/hlstags.py +0 -0
  32. {threefive-3.0.87 → threefive-3.0.89}/threefive/iframes.py +0 -0
  33. {threefive-3.0.87 → threefive-3.0.89}/threefive/packetdata.py +0 -0
  34. {threefive-3.0.87 → threefive-3.0.89}/threefive/pmt.py +0 -0
  35. {threefive-3.0.87 → threefive-3.0.89}/threefive/section.py +0 -0
  36. {threefive-3.0.87 → threefive-3.0.89}/threefive/segmentation.py +0 -0
  37. {threefive-3.0.87 → threefive-3.0.89}/threefive/speedo.py +0 -0
  38. {threefive-3.0.87 → threefive-3.0.89}/threefive/streamtypes.py +0 -0
  39. {threefive-3.0.87 → threefive-3.0.89}/threefive/udp.py +0 -0
  40. {threefive-3.0.87 → threefive-3.0.89}/threefive/uxp.py +0 -0
  41. {threefive-3.0.87 → threefive-3.0.89}/threefive/xml.py +0 -0
  42. {threefive-3.0.87 → threefive-3.0.89}/threefive.egg-info/SOURCES.txt +0 -0
  43. {threefive-3.0.87 → threefive-3.0.89}/threefive.egg-info/dependency_links.txt +0 -0
  44. {threefive-3.0.87 → threefive-3.0.89}/threefive.egg-info/entry_points.txt +0 -0
  45. {threefive-3.0.87 → threefive-3.0.89}/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.87
3
+ Version: 3.0.89
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
@@ -19,95 +19,48 @@ Dynamic: license-file
19
19
 
20
20
  # [ threefive ]
21
21
 
22
- ## https://github.com/superkabuki/threefive
23
- ### threefive is the industry leading SCTE-35 tool.
24
-
25
- * In case you were wondering ....
26
-
27
- <img width="672" height="586" alt="image" src="https://github.com/user-attachments/assets/0c327200-e1f0-4055-825f-349fe89c32d6" />
28
22
 
23
+ <img width="1000" height="748" alt="100_0033" src="https://github.com/user-attachments/assets/dc967211-35d4-4aa5-af75-ce6099207946" />
29
24
 
25
+ ## https://github.com/superkabuki/threefive
30
26
 
31
- #### Need to inject SCTE-35 into HLS? [X9k3.](https://github.com/superkabuki/x9k3)
27
+ ## threefive is the only tool that supports SCTE-35-1 and SCTE-35-2
32
28
 
33
- * __Decodes SCTE-35__ from `MPEGTS`✔ `Base64`✔ `Bytes`✔ `DASH`✔ `Hex` ✔ `HLS`✔ `Integers`✔ `JSON`✔ `XML`✔ `XML+Binary`✔
34
-
29
+ * __Decodes SCTE-35__ from `MPEGTS`✔ `Base64`✔ `Bytes`✔ `DASH`✔ `Hex` ✔ `HLS`✔ `Integers`✔ `JSON`✔ `XML`✔ `XML+Binary`✔
35
30
  * __Encodes SCTE-35__ to `MPEGTS`✔ `Base64`✔ `Bytes`✔ `Hex`✔ `Integers`✔ `JSON`✔ `XML`✔ `XML+Binary`✔
36
31
  ___
37
32
 
38
-
39
33
  ## [ News ]
40
- * __threefive.Stream.decode()__ now does __interpreter detection__ and uses __multiprocessing__ for __python3.11__ and __python3.14__ for a __serious speedup__.
41
- * __Event Descriptors__ and __Property__ types from __the recently published 2026 SCTE-35 Specification part 2__ have been added.
42
- * __threefive no longer uses setuptools for packaging__ and I know you don't care.
43
- * __threefive now supports__ [__Secure Reliable Transport__](https://github.com/superkabuki/threefive_is_scte35/blob/main/README.md#threefive-now-supports-srt) (watch the cool video)
44
- ___
45
-
46
- ## [ Latest version is v3.0.87 ]
47
-
48
- * threefive cyclomatic complexity score is 1.9337094499294782 _( that's better than the Python standard library)_ .
49
- * __threefive now has NO External Dependencies__
50
- * SRT and AES support is now optional
51
- * __threefive is fully python v3.14 compliant__
52
- * __No more setup tools!__ threefive now uses a __toml file and a Makefile__ to generate packages,
53
- * I'm just trying to fit in with the cool python kids.
54
- * __New__ the threefive cli tool has spun off several new cli tools. I had to split the cli up, the help was just way too long.
55
- * In addition to the __threefive__ cli you also get:
56
- * __scte35bump__ _adjust scte-35 pts in mpegts streams_
57
- * __scte35fix__ _change bin data streams back to scte-35_
58
- * __scte35hls__ _parse scte-35 from hls tags and segments_
59
- * __scte35inject__ _inject scte-35 packets into mpegts streams_
60
- * __gums__ _(the Grande Unified unicast and Multicast Server)_
61
- ___
62
-
63
- ### If you parse the output from the threefive cli....
64
- * Comments, errors, and warnings, even printed comments, errors, and warnings, that are not the output, start with an octothorpe '#' and can be stripped, if needed, with sed.
65
- ```sed
66
- threefive video.ts 2>&1 | sed -n '/^\#/!p' -
67
- ```
68
-
69
- ### [ Speed Test ]
70
- #### pypy3 vs. python3.11 vs. python3.14 running threefive 3.0.0x840c (_pre-release_)
71
-
72
- * Using multiprocessing cuts parsing time in half for python 3.11 even more for python3.14
73
-
74
- * single process pypy3 is still faster though.
75
-
76
- * The test is to parse a 3.7 GB file for 286 SCTE-35 Cues.
77
-
78
- * Results
79
-
80
- | interpreter| time |
81
- |------------|----------|
82
- |__pypy3__ |__3.532 secs__|
83
- |python3.11 |5.520 secs|
84
- |python3.14 |5.521 secs|
85
-
86
- * When I did the same test for threefive v3.0.83, pypy3 was 4.1 seconds, python3.11 was 10 seconds, and python3.14 was over 14 secs
87
-
88
-
89
- ## [ Try these in your browser ]
90
- #### Parse SCTE-35 in MPEGTS over HTTP, in your browser with[ Go, Wasm and Super Karate Death Car](https://bigcorp.ltd/gowasm)
91
-
92
- #### Parse, edit, and convert SCTE-35 Cues in your browser with [fastcgi, python3, threefive, and nstuff](https://iodisco.com/scte35)
93
-
94
- #### 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.
95
-
96
- #### Decode SCTE-35 data via Http request in a browser, with curl, or whatever with [Sassy](https://github.com/superkabuki/threefive_is_scte35/blob/main/sassy.md) , SCTE-35 as a Service.
97
34
 
35
+ * threefive now has support for SCTE-35-2. __Event Descriptors__ and __Property__ types from __the recently published 2026 SCTE-35 Specification can be decoded, modified, and encoded with threefive.
98
36
  ___
99
- # [__[ Examples ]__](https://github.com/superkabuki/threefive/tree/main/examples)
100
37
 
38
+ ## [ Latest version is v3.0.89 ]
39
+ ___
40
+ ## [ Examples ]
41
+ * [aac_id3header.py](aac_id3header.py) - use the __threefive.aac.AacParser__ class to parse __HLS AAC__ segments for __PTS__ in __ID3 header tags__. _(__Updated__ 01/07/2026)_
42
+ * [id3.aac](id3.aac) test file for __aac_id3header.py__ _(__New!__ 01/12/2026)_
43
+ * [base64toxmlbin.py](base64toxmlbin.py) - __convert__ __base64__ encoded __SCTE-35__ to __xml+binary__ encoded SCTE-35 and back.
44
+ * [cue2vtt.py](cue2vtt.py) - display __SCTE-35__ in __WebVTT__ subtitles to __verify__ __SCTE-35__ __splice points__.
45
+ * [decodenext.py](decodenext.py) - parse __MPEGTS__ streams for __SCTE-35__ using __Stream.decode_next()__. _(__Updated__ 01/12/2026)_
46
+ * [dtmf.py](dtmf.py) - parse __base64__ __SCTE-35__ with a __DTMF__ descriptor and __re-encode__ to __SCTE-35__ in __Hex__ format.
47
+ * [edit_break_duration.py](edit_break_duration.py) - change the __SCTE-35__ __break duration__ and __re-encode__ __SCTE-35__.
48
+ * [event_descriptors.py](event_descriptors.py) - The __Event Descriptor__ examples from the __2026 SCTE-35 part 2 specification__. _(__New!__ 05/10/2026)_
49
+ * [encode_time_signal.py](encode_time_signal.py) - __encode__ a __SCTE-35__ __Cue__ with a __TimeSignal__ from scratch.
50
+ * [parsehlstags.py](parsehlstags.py) - use the __TagParser__ class to parse __HLS tags__ from a __m3u8__ file and group the tags by segment.
51
+ * [proxy.py](proxy.py) - how to use the __Stream.proxy()__ method for parsing __SCTE-35__ and __piping__ video.
52
+ * [quickstream.py](quickstream.py) - how to __add SCTE-35 parsing__ for __MPEGTS__ streams to __your application__.
53
+ * [spliceinsert.py](spliceinsert.py) - a __SCTE-35__ __Splice Insert__ example.
54
+ * [upid_custom_output.py](upid_custom_output.py) - __customizing Upid data output__ for a variety of __Upids__. _(__New!__ 01/11/2026)_
55
+ * [custom_upid_handling.py](custom_upid_handling.py) - Custom __user defined UPID__ handling example. _(__New!__ 01/11/2026)_
56
+ ___
101
57
 
102
58
 
103
59
  # [ Documentation ]
104
-
105
- * __use threefive on the web__
106
- * [threefive SCTE-35 __Online Parser__](https://iodisco.com/scte35) hosted on my server_
107
- * [ SCTE-35 __Online Parser__ powered by threefive](http://www.domus1938.com/scte35parser) _another online parser powered by threefive_
108
- * [SCTE-35 __As a Service__](sassy.md) _if you can make an http request, you can parse SCTE-35, no install needed._
109
-
110
- * [__install__](#install)
60
+ #### Need to inject SCTE-35 into HLS? [X9k3.](https://github.com/superkabuki/x9k3)
61
+ * [__web based SCTE-35 tools__](#web) - threefive and friends over http.
62
+ * [__install__](#install)
63
+ * [__quick start__](https://github.com/superkabuki/threefive_is_scte35/blob/main/README.md#quick-start)
111
64
  * __command line tools__
112
65
  * [ __threefive__](#cli) _decode SCTE-35 on the command line_
113
66
  * [__scte35bump__](#scte35bump) _adjust SCTE-35 PTS in MPEGTS streams_
@@ -121,7 +74,6 @@ ___
121
74
  * * [threefive __Classes__](#classes) _threefive is OO, made to subclass_
122
75
  * [__Cue__ Class](https://github.com/superkabuki/threefive/blob/main/cue.md) _this class you'll use often_
123
76
  * [__Stream__ Class](https://github.com/superkabuki/threefive/blob/main/stream.md) _this is the class for parsing MPEGTS_
124
-
125
77
  * [SCTE-35 __Sidecar Files__](https://github.com/superkabuki/SCTE-35_Sidecar_Files) _threefive supports SCTE-35 sidecar files_
126
78
  * [SCTE-35 __HLS__](https://github.com/superkabuki/threefive/blob/main/hls.md) _parse SCTE-35 in HLS__
127
79
  * [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_
@@ -168,17 +120,230 @@ make install py3=python3.14
168
120
  # works for any python in your path or use a full path if needed.
169
121
 
170
122
  ```
171
-
123
+ # [⇧](#-documentation-)
172
124
  ___
173
125
 
126
+ # [⇧](#-documentation-)
174
127
 
175
128
  ## [Quick Start]
176
- ## [CLI]
177
- * The default action is to read a SCTE-35 input and write a SCTE-35 output.
178
- ---
129
+ <i>These examples show how to parse SCTE-35<BR>
130
+ from various SCTE-35 data formats, with both the cli and with the library.</i>
131
+ <details><summary>MPEGTS</summary>
132
+
133
+ * MPEGTS streams can be Files, Http(s), Multicast,SRT, UDP Unicast, or stdin.
134
+ * __cli__
135
+
136
+ ```js
137
+ threefive https://example.com/video.ts
138
+ ```
139
+ * wildcards work too.
140
+ ```js
141
+ threefive /mpegts/*.ts
142
+ ```
143
+
144
+ * __lib__
145
+ ```py3
146
+
147
+ from threefive import Stream
148
+ stream = Stream('https://example.com/video.ts')
149
+ stream.decode()
150
+
151
+ ```
152
+ </details>
153
+ <details><summary>Base64</summary>
154
+
155
+ * __cli__
156
+ ```js
157
+ threefive '/DAsAAAAAyiYAP/wCgUAAAABf1+ZmQEBABECD0NVRUkAAAAAf4ABADUAAC2XQZU='
158
+ ```
159
+ * __lib__
160
+ ```py3
161
+
162
+ from threefive import Cue
163
+ data = '/DAsAAAAAyiYAP/wCgUAAAABf1+ZmQEBABECD0NVRUkAAAAAf4ABADUAAC2XQZU='
164
+ cue=Cue(data)
165
+ cue.show()
166
+ ```
167
+
168
+ </details>
169
+
170
+
171
+ <details><summary>Bytes</summary>
172
+
173
+ * __cli__
174
+ * Bytes don't work on the cli
175
+
176
+ * __lib__
177
+ ```py3
178
+
179
+ from threefive import Cue
180
+ data = b'\xfc0\x16\x00\x00\x00\x00\x00\x00\x00\xff\xf0\x05\x06\xfe\x00\xc0D\xa0\x00\x00\x00\xb5k\x88'
181
+ cue=Cue(data)
182
+ cue.show()
183
+ ```
184
+
185
+ </details>
186
+
187
+ <details><summary>Hex</summary>
188
+
189
+ * Can be a hex literal or hex string or bytes.
190
+
191
+ * __cli__
192
+ ```js
193
+ threefive 0xfc301600000000000000fff00506fed605225b0000b0b65f3b
194
+ ```
195
+ * __lib__
196
+ ```py3
197
+
198
+ from threefive import Cue
199
+ data = 0xfc301600000000000000fff00506fed605225b0000b0b65f3b
200
+ cue=Cue(data)
201
+ cue.show()
202
+ ```
203
+
204
+ </details>
205
+
206
+
207
+ <details><summary>Int</summary>
208
+
209
+ * Can be a literal integer or string or bytes.
210
+
211
+ * __cli__
212
+ ```js
213
+ threefive 1583008701074197245727019716796221243043855984942057168199483
214
+ ```
215
+ * __lib__
216
+ ```py3
217
+
218
+ from threefive import Cue
219
+ data = 1583008701074197245727019716796221243043855984942057168199483
220
+ cue=Cue(data)
221
+ cue.show()
222
+ ```
223
+
224
+
225
+ </details>
226
+
227
+
228
+ <details><summary>JSON</summary>
229
+
230
+ * __cli__
231
+ * put JSON SCTE-35 in a file and redirect it into threefive
232
+ * cat files to threefive works too.
233
+ * echo JSON or type JSON on the command line.
234
+
235
+ ```js
236
+ threefive < json.json
237
+ ```
238
+ * __lib__
239
+
240
+ ```py3
241
+
242
+ from threefive import Cue
243
+ data = '''{
244
+ "info_section": {
245
+ "table_id": "0xfc",
246
+ "section_syntax_indicator": false,
247
+ "private": false,
248
+ "sap_type": "0x03",
249
+ "sap_details": "No Sap Type",
250
+ "section_length": 22,
251
+ "protocol_version": 0,
252
+ "encrypted_packet": false,
253
+ "encryption_algorithm": 0,
254
+ "pts_adjustment": 0.0,
255
+ "cw_index": "0x00",
256
+ "tier": "0x0fff",
257
+ "splice_command_length": 5,
258
+ "splice_command_type": 6,
259
+ "descriptor_loop_length": 0,
260
+ "crc": "0xb56b88"
261
+ },
262
+ "command": {
263
+ "command_length": 5,
264
+ "command_type": 6,
265
+ "name": "Time Signal",
266
+ "time_specified_flag": true,
267
+ "pts_time": 140.005333
268
+ },
269
+ "descriptors": []
270
+ }
271
+ '''
272
+ cue=Cue(data)
273
+ cue.show()
274
+ ```
275
+
276
+ </details>
277
+
278
+
279
+ <details><summary><u>Xml</u></summary>
280
+
281
+ * __cli__
282
+ * put xml SCTE-35 in a [file](xml.xml) and redirect it into threefive
283
+ * cat files to threefive works too.
284
+ * echo xml or type xml on the command line.
285
+
286
+ ```js
287
+ threefive < xml.xml
288
+ ```
289
+ * __lib__
290
+ ```py3
291
+ from threefive import Cue
292
+ data = '''
293
+ <scte35:SpliceInfoSection xmlns:scte35="https://scte.org/schemas/35"
294
+ ptsAdjustment="0" protocolVersion="0" sapType="3" tier="4095">
295
+ <scte35:TimeSignal>
296
+ <scte35:SpliceTime ptsTime="12600480"/>
297
+ </scte35:TimeSignal>
298
+ </scte35:SpliceInfoSection>
299
+ '''
300
+ cue=Cue(data)
301
+
302
+ cue.show()
303
+ ```
304
+
305
+
306
+ </details>
307
+
308
+
309
+
310
+ <details><summary>Xml+binary</summary>
311
+
312
+ * __cli__
313
+ * write xml+binary to a [file](xmlbin.xml) and redirect it to threefive
314
+ * cat files to threefive works too.
315
+ * echo xml+binary or type xml+binary on the command line.
316
+ ```js
317
+ threefive < xmlbin.xml
318
+ ```
319
+ * __lib__
320
+ ```py3
321
+
322
+ from threefive import Cue
323
+ data = '''<scte35:Signal xmlns:scte35="https://scte.org/schemas/35">
324
+ <scte35:Binary>/DAWAAAAAAAAAP/wBQb+AMBEoAAAALVriA==</scte35:Binary>
325
+ </scte35:Signal>
326
+ '''
327
+ cue=Cue(data)
328
+ cue.show()
329
+ ```
330
+
331
+ </details>
332
+
333
+ </samp>
334
+
335
+ ___
336
+
337
+ # [⇧](#-documentation-)
179
338
 
180
- ## [ Parse SCTE-35 from MPEGTS ]
181
-
339
+ ### [CLI]
340
+ The threefive cli tool is able to parse SCTE-35 from MPEGTS Streams,Base64,Hex,Integers,JSON XML,and XMLBinary.
341
+ The format is auto-detected.
342
+
343
+ # [⇧](#-documentation-)
344
+
345
+ #### [ Parse SCTE-35 from MPEGTS ]
346
+ SCTE-35 can be parsed from MPEGTS over a variety of protocols.
182
347
  * __SCTE-35 Input__: MPEGTS
183
348
  * __Protocols__: pipes, files, stdin, http(s), multicast,SRT and UDP.
184
349
  * __SCTE-35 Output__: JSON _(default)_ base64, bytes, hex, int, xml, and xmlbin.
@@ -192,8 +357,12 @@ ___
192
357
  |__.__|UDP|__int__ | __threefive__ udp://10.10.10.10:1011 __int__ |
193
358
  |__.__|Pipe|__xml__| cat video.ts \| __threefive__ __xml__ |
194
359
  |__.__|stdin|__xml+bin__| __threefive__ __xmlbin__ < video.ts|
360
+
195
361
  ___
196
- ## [ Parse SCTE-35 Cues ]
362
+
363
+ # [⇧](#-documentation-)
364
+
365
+ #### [ Parse SCTE-35 Cues ]
197
366
 
198
367
  * The __default output__ is JSON
199
368
  * __SCTE-35 Inputs:__ base64, hex, int, JSON,int,xml,and xmlbin.
@@ -221,8 +390,11 @@ ___
221
390
  |__xml__ |__JSON__ | __threefive__ < xml.xml |
222
391
  |__xmlbin__|__int__ | __threefive__ < xmlbin.xml __int__ |
223
392
 
224
- ---
225
- ## [__Additional functionality__]
393
+ ___
394
+
395
+ # [⇧](#-documentation-)
396
+
397
+ #### [__Additional functionality__]
226
398
  * threefive has several additional features, mostly related to MPEGTS streams.
227
399
  * threefive has built in help, just type `threefive help`
228
400
  * This table shows how to use them.
@@ -239,11 +411,15 @@ ___
239
411
  |__Proxy__ the __mpegts__ stream to stdout |threefive __proxy__ https://wexample.com/video.ts |
240
412
  | | |
241
413
  | | |
242
- ---
243
414
 
244
- ## Other tools
415
+ ___
416
+
417
+ # [⇧](#-documentation-)
418
+
419
+
420
+ ### Other tools
245
421
  threefive also comes with:
246
- ### scte35bump
422
+ #### scte35bump
247
423
 
248
424
  * bump adjusts SCTE-35 PTS in an MPEGTS stream
249
425
 
@@ -262,10 +438,11 @@ options:
262
438
 
263
439
  scte35bump is part of threefive.
264
440
  ```
441
+ ___
265
442
 
266
- ---
443
+ # [⇧](#-documentation-)
267
444
 
268
- ### gums
445
+ #### gums
269
446
  * the Grande Udp Multicast Server
270
447
 
271
448
  ```js
@@ -284,7 +461,10 @@ options:
284
461
 
285
462
  gums is part of threefive.
286
463
  ```
287
- ### scte35hls
464
+
465
+ # [⇧](#-documentation-)
466
+
467
+ #### scte35hls
288
468
 
289
469
  * parse HLS for SCTE-35. Supports all HLS SCTE-35 tags.
290
470
 
@@ -315,7 +495,9 @@ $ scte35hls -h
315
495
  * mpeg2, aac, ac3, mp3
316
496
  ```
317
497
 
318
- ### __scte35fix__
498
+ # [⇧](#-documentation-)
499
+
500
+ #### __scte35fix__
319
501
  * when ffmpeg changes a SCTE-35 stream to bin data stream, scte35fix changes it back.
320
502
 
321
503
  ```js
@@ -338,66 +520,11 @@ $ scte35fix -h
338
520
  scte35fix srt://10.10.10.13:4201
339
521
  scte35fix is part of threefive.
340
522
  ```
341
-
342
- ## [XML]
343
- * [XML](https://github.com/superkabuki/SCTE-35/blob/main/xml.md) __New__! _updated 05/01/2025_
344
-
345
- ## [HLS]
346
- * [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?
347
- ## [SCTE-35 As a Service]
348
- * Decode SCTE-35 without installing anything. If you can make an https request, you can use [__Sassy__](sassy.md) to decode SCTE-35. .
349
- ## [Classes]
350
- * The python built in help is always the most up to date docs for the library.
351
-
352
- ```py3
353
-
354
- a@fu:~/build7/threefive$ pypy3
355
-
356
- >>>> from threefive import Stream
357
- >>>> help(Stream)
358
-
359
- ```
360
-
361
- * [Class Structure](https://github.com/superkabuki/threefive/blob/main/classes.md)
362
- * [Cue Class](https://github.com/superkabuki/threefive/blob/main/cue.md) Cue is the main SCTE-35 class to use.
363
- * [Stream Class](https://github.com/superkabuki/threefive/blob/main/stream.md) The Stream class handles MPEGTS SCTE-35 streams local, Http(s), UDP, and Multicast.
364
-
365
523
  ___
366
524
 
367
- ### [threefive now supports SRT]
368
-
369
- * _( You have to unmute the audio )_
370
-
371
- https://github.com/user-attachments/assets/a323ea90-867f-480f-a55f-e9339263e511
372
-
373
- <BR>
374
-
375
- * [more SRT and threefive info](srt.md)
376
-
377
-
378
- * _checkout [SRTfu](https://github.com/superkabuki/srtfu)_
379
-
380
- ___
381
-
382
- ## [more]
383
-
384
- * [Online SCTE-35 Parser](https://iodisco.com/scte35) Supporte Base64, Bytes,Hex,Int, Json, Xml, and Xml+binary.
385
-
386
- * [Encode SCTE-35](https://github.com/superkabuki/threefive/blob/main/encode.md) Some encoding code examples.
387
- ___
388
-
389
-
390
- ## __Python3 vs Pypy3 running threefive__
391
-
392
- * __( You have to unmute the audio )__
393
-
394
- https://github.com/user-attachments/assets/9e88fb38-6ad0-487a-a801-90faba9d72c6
395
-
525
+ # [](#-documentation-)
396
526
 
397
-
398
- ___
399
-
400
- # Using the library
527
+ ### [Using the library]
401
528
  * Let me show you how easy threefive is to use.
402
529
 
403
530
  * reading SCTE-35 xml from a file
@@ -632,153 +759,69 @@ Type "help", "copyright", "credits" or "license" for more information.
632
759
  <scte35:AvailDescriptor providerAvailId="16"/>
633
760
  </scte35:SpliceInfoSection>
634
761
  ```
762
+ ___
635
763
 
764
+ # [⇧](#-documentation-)
636
765
 
637
- ## [ The Cli tool ]
638
-
639
- #### The cli tool installs automatically with pip or the Makefile.
640
-
641
- * [__SCTE-35 Inputs__](#inputs)
642
- * [__SCTE-35 Outputs__](#outputs)
643
- * [Parse __MPEGTS__ streams for __SCTE-35__](#streams)
644
- * [Display __MPEGTS__ __iframes__](#iframes)
645
- * [Display raw __SCTE-35 packets__ from __video streams__](#packets)
766
+ ### [web]
767
+ * [threefive SCTE-35 __Online Parser__](https://iodisco.com/scte35) __hosted on my server iodisco.com__
768
+ * 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__
769
+ * 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__
770
+ * [ SCTE-35 __Online Parser__ powered by threefive](http://www.domus1938.com/scte35parser) _another online parser powered by threefive_ not hosted on my servers.
771
+ * [SCTE-35 __As a Service__](sassy.md) _if you can make an http request, you can parse SCTE-35, no install needed._
772
+ __hosted on my server iodisco.com__
773
+ ___
646
774
 
647
- #### `Inputs`
775
+ # [⇧](#-documentation-)
648
776
 
649
- * Most __inputs__ are __auto-detected.__
650
- * __stdin__ is __auto selected__ and __auto detected.__
651
- * __SCTE-35 data is printed to stderr__
652
- * __stdout is used when piping video__
653
- * mpegts can be specified by file name or URI.
654
- ```rebol
655
- threefive udp://@235.2.5.35:3535
656
- ```
657
- * If a file comtains a SCTE-35 cue as a string( base64,hex,int,json,or xml+bin), redirect the file contents.
658
- ```rebol
777
+ ### [XML]
778
+ * [XML](https://github.com/superkabuki/SCTE-35/blob/main/xml.md) __New__! _updated 05/01/2025_
659
779
 
660
- threefive < json.json
780
+ ### [HLS]
781
+ * [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?
661
782
 
662
- ```
783
+ # [⇧](#-documentation-)
784
+
785
+ ### [Classes]
786
+ * The python built in help is always the most up to date docs for the library.
663
787
 
664
- * quoted strings(( base64,hex,int,json or xml+bin), can be passed directly on the command line as well.
788
+ ```py3
665
789
 
666
- ```awk
790
+ a@fu:~/build7/threefive$ pypy3
667
791
 
668
- threefive '/DAWAAAAAAAAAP/wBQb+ztd7owAAdIbbmw=='
792
+ >>>> from threefive import Stream
793
+ >>>> help(Stream)
669
794
 
670
795
  ```
671
796
 
797
+ * [Class Structure](https://github.com/superkabuki/threefive/blob/main/classes.md)
798
+ * [Cue Class](https://github.com/superkabuki/threefive/blob/main/cue.md) Cue is the main SCTE-35 class to use.
799
+ * [Stream Class](https://github.com/superkabuki/threefive/blob/main/stream.md) The Stream class handles MPEGTS SCTE-35 streams local, Http(s), UDP, and Multicast.
672
800
 
673
- | Input Type | Cli Example |
674
- |------------|-------------------------------------------------------------------------------------------------------------|
675
- | __Base64__ | `threefive '/DAsAAAAAyiYAP/wCgUAAAABf1+ZmQEBABECD0NVRUkAAAAAf4ABADUAAC2XQZU='`
676
- | __Hex__ |`threefive 0xfc301600000000000000fff00506fed605225b0000b0b65f3b`|
677
- | __HLS__ |`threefive hls https://example.com/master.m3u8` |
678
- | __JSON__ |`threefive < json.json` |
679
- | __Xmlbin__ | `js threefive < xmlbin.xml` |
680
-
681
- # `Streams`
682
-
683
- |Protocol | Cli Example |
684
- |---------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
685
- | __File__ | `threefive video.ts` |
686
- | __Http(s)__ | `threefive https://example.com/video.ts` |
687
- | __Stdin__ | `threefive < video.ts` |
688
- | __UDP Multicast__| `threefive udp://@235.35.3.5:9999` |
689
- | __UDP Unicast__ | `threefive udp://10.0.0.7:5555` |
690
-
691
-
692
- #### Outputs
693
- * output type is determined by the key words __base64, bytes, hex, int, json, and xmlbin__.
694
- * __json is the default__.
695
- * __Any input can be returned as any output__
696
- * examples __Base64 to Hex__ etc...)
697
-
698
-
699
- | Output Type | Cli Example |
700
- |-------------|----------------------------------------------------------|
701
- |__Base 64__ | `threefive 0xfc301600000000000000fff00506fed605225b0000b0b65f3b base64 ` |
702
- | __Bytes__ | `threefive 0xfc301600000000000000fff00506fed605225b0000b0b65f3b bytes` |
703
- | __Hex__ | `threefive '/DAsAAAAAyiYAP/wCgUAAAABf1+ZmQEBABECD0NVRUkAAAAAf4ABADUAAC2XQZU=' hex` |
704
- | __Integer__ | `threefive '/DAsAAAAAyiYAP/wCgUAAAABf1+ZmQEBABECD0NVRUkAAAAAf4ABADUAAC2XQZU=' int` |
705
- | __JSON__ | `threefive 0xfc301600000000000000fff00506fed605225b0000b0b65f3b json ` |
706
- | __Xml+bin__ | `threefive 0xfc301600000000000000fff00506fed605225b0000b0b65f3b xmlbin ` |`
707
- ___
708
- #### `Iframes`
709
- * Show iframes PTS in an MPEGTS video
710
-
711
- ```smalltalk
712
- threefive iframes https://example.com/video.ts
713
- ```
714
801
  ___
715
802
 
716
- #### `packets`
717
- * Print raw SCTE-35 packets from multicast mpegts video
803
+ # [⇧](#-documentation-)
718
804
 
719
- ```smalltalk
720
- threefive packets udp://@235.35.3.5:3535
721
- ```
722
- ___
723
- #### `proxy`
724
- * Parse a https stream and write raw video to stdout
805
+ ### [threefive now supports SRT]
725
806
 
726
- ```smalltalk
727
- threefive proxy video.ts
728
- ```
729
- ___
730
- #### `pts`
731
- * Print PTS from mpegts video
807
+ * _( You have to unmute the audio )_
732
808
 
733
- ```smalltalk
734
- threefive pts video.ts
735
- ```
736
- ___
737
- #### `sidecar`
738
- * Parse a stream, write pts,write SCTE-35 Cues to sidecar.txt
809
+ https://github.com/user-attachments/assets/a323ea90-867f-480f-a55f-e9339263e511
739
810
 
740
- ```smalltalk
741
- threefive sidecar video.ts
742
- ```
743
- ___
811
+ <BR>
744
812
 
745
- #### `show`
813
+ * [more SRT and threefive info](srt.md)
746
814
 
747
- * Probe mpegts video _( kind of like ffprobe )_
748
815
 
749
- ```smalltalk
750
- threefive show video.ts
751
- ```
752
- ___
753
- #### `version`
754
- * Show version
816
+ * _checkout [SRTfu](https://github.com/superkabuki/srtfu)_
755
817
 
756
- ```smalltalk
757
- threefive version
758
- ```
759
- ___
760
- #### `help`
761
- * Help
762
- ```rebol
763
- threefive help
764
- ```
765
818
  ___
766
819
 
820
+ # [⇧](#-documentation-)
767
821
 
822
+ ### [more]
768
823
 
769
-
770
- ## [iodisco.com/scte35](https://iodisco.com/scte35)
771
-
772
-
773
-
774
-
775
-
776
- <svg width="100" height="100">
777
- <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
778
- </svg>
779
-
780
- <img width="258" height="256" alt="image" src="https://github.com/user-attachments/assets/642cb803-9465-408e-bb6e-03549eb22d78" />
781
-
824
+ * [Encode SCTE-35](https://github.com/superkabuki/threefive/blob/main/encode.md) Some encoding code examples.
782
825
  ___
783
- [__Install__](#install) |[__SCTE-35 Cli__](#the-cli-tool) | [__Cue__ Class](https://github.com/superkabuki/threefive/blob/main/cue.md) | [__Stream__ Class](https://github.com/superkabuki/threefive/blob/main/stream.md) | [__Online SCTE-35 Parser__](https://iodisco.com/scte35) | [__SCTE-35 Examples__](https://github.com/superkabuki/threefive/tree/main/examples)
784
- | [__SCTE-35 XML__ ](https://github.com/superkabuki/SCTE-35/blob/main/xml.md) and [More __XML__](node.md) | [__threefive runs Four Times Faster on pypy3__](https://pypy.org/)
826
+
827
+ # [](#-documentation-)