futzu / scte-35_hls_x9k3 Goto Github PK
View Code? Open in Web Editor NEWHLS and SCTE-35 x9k3 is a HLS Segmenter with SCTE 35, and Live Streaming from Non-Live Soures and Looping.
HLS and SCTE-35 x9k3 is a HLS Segmenter with SCTE 35, and Live Streaming from Non-Live Soures and Looping.
"How do I insert every 10 or 15 minutes?"
Hello.
Uses latest x9k3 and threefive. H264 working ok, but Mpeg2 splits with different segments duration(not 2 default seconds). It happened on file or live UDP streams. Looks like it cannot found i-frames in stream.
H264 file https://www.dropbox.com/s/5qswgdnt22ykp6d/test1.ts?dl=0
C:\Python>python.exe x9k3.py -i test1.ts
./seg0.ts start: 45.693333 duration: 2.160000 stream diff: 2.1
28998
./seg1.ts start: 47.853333 duration: 2.160000 stream diff: 4.2
58997
./seg2.ts start: 50.013333 duration: 2.160000 stream diff: 6.3
91995
./seg3.ts start: 52.173333 duration: 2.160000 stream diff: 8.5
25993
./seg4.ts start: 54.333333 duration: 2.160000 stream diff: 10.
658992
./seg5.ts start: 56.493333 duration: 2.160000 stream diff: 12.
79299
./seg6.ts start: 58.653333 duration: 2.160000 stream diff: 14.
925989
./seg7.ts start: 60.813333 duration: 2.160000 stream diff: 17.
059987
./seg8.ts start: 62.973333 duration: 2.160000 stream diff: 19.
192986
./seg9.ts start: 65.133333 duration: 2.160000 stream diff: 21.
325984
./seg10.ts start: 67.293333 duration: 2.160000 stream diff: 23.
459983
./seg11.ts start: 69.453333 duration: 2.160000 stream diff: 25.
592981
./seg12.ts start: 71.613333 duration: 2.160000 stream diff: 27.
72698
./seg13.ts start: 73.773333 duration: 2.160000 stream diff: 29.
860978
./seg14.ts start: 75.933333 duration: 2.160000 stream diff: 31.
993977
./seg15.ts start: 78.093333 duration: 2.160000 stream diff: 34.
124975
./seg16.ts start: 80.253333 duration: 2.160000 stream diff: 36.
257974
./seg17.ts start: 82.413333 duration: 2.160000 stream diff: 38.
390972
./seg18.ts start: 84.573333 duration: 2.160000 stream diff: 40.
52197
./seg19.ts start: 86.733333 duration: 2.160000 stream diff: 42.
653969
./seg20.ts start: 88.893333 duration: 2.160000 stream diff: 44.
784967
./seg21.ts start: 91.053333 duration: 2.160000 stream diff: 46.
913965
./seg22.ts start: 93.213333 duration: 2.160000 stream diff: 49.
045963
./seg23.ts start: 95.373333 duration: 2.160000 stream diff: 51.
175962
./seg24.ts start: 97.533333 duration: 2.160000 stream diff: 53.
30796
./seg25.ts start: 99.693333 duration: 2.160000 stream diff: 55.
437959
./seg26.ts start: 101.853333 duration: 2.160000 stream diff: 57.
569957
./seg27.ts start: 104.013333 duration: 2.160000 stream diff: 59.
701955
./seg28.ts start: 106.173333 duration: 2.160000 stream diff: 61.
831954
MPEG2 file https://www.dropbox.com/s/v5vrnlbqpqsc7xn/test2_mp2.ts?dl=0
C:\Python>python.exe x9k3.py -i test2_mp2.ts
./seg0.ts start: 170.317311 duration: 24.480000 stream diff: 23.
890966
when Udp stream contains scte35 stream, hls shows some jerks and glitches. whereas when udp stream without scte35 is used it run smoothly. @futzu please help.
When x9k3 is restarted it could keep media-sequence going on - it would reread last index.m3u8. If developer want's to reset mediaseq it could just delete index.m3u8 before start.
Reason: if we run x9k3 on LIVE and sidecar.txt gets big, we can't delete sidecar.txt without breaking clients. (when sidecar.txt is deleted x9k3 crashes).
Alternative could be to allow to receive sidecar txt lines using TCP/UDP just to leave sidecar.txt out.
I'm new to the stream business, I still don't understand it very well, I have a hls stream http://localhost:8787/live/stream-1080p.m3u8 and I want to send a commercial ad signal inside it, what would that be like? this would be for the person to overlap this stream with their commercial
I'm using tsduck to inject SCTE35 Markers with
...
<splice_insert splice_event_id="0x00000001" out_of_network="true" splice_immediate="true" unique_program_id="0x0001">
<break_duration auto_return="true" duration="2,150,000"/>
</splice_insert>
...
However, the ad breaks runs forever:
#EXT-X-CUE-OUT-CONT:825.560/23.888889
#EXTINF:3.840,
seg1796.ts
#EXT-X-CUE-OUT-CONT:829.400/23.888889
#EXTINF:3.840,
seg1797.ts
#EXT-X-CUE-OUT-CONT:833.240/23.888889
#EXTINF:3.840,
I'm a total python newbie, but looking at the code, the _auto_return is never called / tested. Where should I insert the auto-return test?
Great tool, btw! Adds the last missing piece to the ffmpeg / tsduck eco system.
hi my brother.
you have PayPal account? or BTC/ETH ?
I need to sent some Christmas gift
I am new to the field of video production, and I was attempting to use x9k3 to solve a problem, but I am not certain if it is the correct tool. I was hoping I might be able to contact you via email or even jump on a phone call.
I am working with a company that produces live streamed events. We save the video stream from those events, and then also make them available as VOD on different platforms. I would like to integrate with google ad manager, but google requires "preconditioning" the videos. In particular, I would like to do server-side ad injection (SSAI, also often called DAI) using a stitcher. I see that google ad manager can accept an MRSS feed (which has a google-specific namespace to identify cue-points) or they can accept files from BrightCove.
My goal is to allow my content editors to create a new piece of content (maybe an edited live stream or even a highlight reel pieced together from many streams). I would then like the editors to be able to place ad breaks (maybe cue-points, maybe SCTE 35 markers, I'm not sure) into the video at any points they choose. I attempted to do this with your x9k3 tool and adbreak tool, but it seemed as if the resultant m3u8 file was not re-encoded (but rather just split on the nearest I-Frame) - I say this because it appeared that the cue-out was not at the offset I had configured, but somewhat close.
I would like my users to be able to place ad breaks at specific locations and then have google ad manager respect those locations - possibly by having an MRSS feed that google ad manager can ingest. I am somewhat shaky on the details since it seems redundant to me that I should need cue-points in the MRSS feed but then also need the m3u8 file to reflect those same cue points.
In short, I would be very grateful for any assistance you might be able to provide to help me solve this problem. If you know how to add ad breaks to existing videos so they work with google ad manager server-side ad injection, I would love to learn how. I am also happy to compensate you for any assistance, or I would be grateful if you could refer me to another person if you are not familiar with this particular situation.
Thank you.
Hello
I'm testing x9k3 to obtain a live signal with multiple scte35 cues. I've installed using the instructions, and tried to run the replay mode with a ts file to generate a live content.
I run as follows and added a LOOP trace to validate:
python3 x9k3.py -i ../sample.ts -r -o ../out
phosy@DESKTOP-FHL6Q1U:~/DEVEL/x9k3/x9k3-main$ python3 x9k3.py -i ../sample.ts -r -o ../out
LOOP
../out/seg0.ts: start: 1.480000 end: 4.520000 duration: 3.040000
../out/seg1.ts: start: 4.520000 end: 7.560000 duration: 3.040000
../out/seg2.ts: start: 7.560000 end: 10.600000 duration: 3.040000
../out/seg3.ts: start: 10.600000 end: 13.640000 duration: 3.040000
../out/seg4.ts: start: 13.640000 end: 16.680000 duration: 3.040000
deleting ../out/seg0.ts
...
...
../out/seg14.ts: start: 44.040000 end: 47.080000 duration: 3.040000
deleting ../out/seg10.ts
../out/seg15.ts: start: 47.080000 end: 50.120000 duration: 3.040000
deleting ../out/seg11.ts
../out/seg16.ts: start: 50.120000 end: 53.160000 duration: 3.040000
deleting ../out/seg12.ts
LOOP
LOOP
LOOP
LOOP
The problem is that the segments end when the sample video ends and I don´t see that it starts again. I've observed in the code that the while true loop is working but it seems the threefive decode stops
The sample I used is the following: https://www.dwsamplefiles.com/?dl_id=396
Any ideas? Thank you
As I mentioned on other issues, I open a new one clarifying the behavior I get when trying to use the tool to play on a native player (IOS 15) and the replay mode.
I have an input file that is an MPEG.TS generated with ffmpeg with the following characteristics:
Input #0, mpegts, from '../live.ts':
Duration: 00:00:48.02, start: 1.458667, bitrate: 1790 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1280x720, 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 4 kb/s
I execute x9k3 with the following arguments:
x9k3 -i live.ts -o out -t 6 --replay -c
In a first pass, the playlist is generated correctly, segmenting the file and adding them into the playlist. The number of segments for this input file is 8 (with t=6 seconds, from 0 to 7). The throttling is working correctly. The playlist for the last segment is this:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:3
#EXT-X-DISCONTINUITY-SEQUENCE:4
#EXT-X-X9K3-VERSION:0.2.01
#EXTINF:6.000000,
seg3.ts
#EXTINF:6.000000,
seg4.ts
#EXTINF:7.000000,
seg5.ts
#EXTINF:6.000000,
seg6.ts
#EXTINF:4.960000,
seg7.ts
After the duration of the input file has passed, the tool re-decode the input file to start over again for the replay functionality. Now, current segment will be 8. The generated playlist file is the following:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:8
#EXT-X-DISCONTINUITY-SEQUENCE:4
#EXT-X-X9K3-VERSION:0.2.01
#EXT-X-DISCONTINUITY
#EXTINF:6.000000,
seg8.ts
As you can see, all the previous segments are removed from the playlists, and only the new "first" segment is present in it. This breaks the play of this m3u8 in an HLS player (tested with hls.js and native player). This breaks the buffer status in the player. For this to work safely for players, the playlist for the segment #8 should be like this:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:3
#EXT-X-DISCONTINUITY-SEQUENCE:4
#EXT-X-X9K3-VERSION:0.2.01
#EXTINF:6.000000,
seg4.ts
#EXTINF:7.000000,
seg5.ts
#EXTINF:6.000000,
seg6.ts
#EXTINF:4.960000,
seg7.ts
#EXT-X-DISCONTINUITY
#EXTINF:6.000000,
seg8.ts
It should remove remove seg3.ts from the playlist, and should add a Discontinuity tag (as the PTS in the input file restart to 0 and the player needs to be aware of) and continue the live flow with the segment. This change has been tested to play correctly in hls.js and native IOS 15 player.
Hope it helps.
Hi futzu
FIrst i want to say is Merry christmas and happy new year! and scte35-threefive is amazing projects
i am working on splicing segments to insert cue points.
i use simple example from readme file
x9k3 -i segment11.ts -s sidecar.txt
the segment11.ts is a 6 seconds segment with 25fps and GOP of 25 and ffprobe output for the segment with iframe information
Input #0, mpegts, from segment11.ts
:
Duration: 00:00:06.07, start: 66.116444, bitrate: 3159 kb/s
Program 1
Stream #0:0[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 99 kb/s
Stream #0:1[0x102]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1
DAR 16:9], 25 fps, 25 tbr, 90k tbn`
1:frame,I
26:frame,I
51:frame,I
76:frame,I
101:frame,I
126:frame,I
and inside my sidecar file i have this
68.191111, /DAWAAAAAAAAAP/wBQb+AF2lcAAAYGVbDg==
i want x9k3 to splice this segement into 2 segments with first one 2 seconds and second one 4 seconds
but it always give me 3 segements in 2 seconds duration. any ideas it is possible with x9k3 or am i using tool wrong.
here is the segments and sidecar file
https://github.com/cisiwen/x9k3_help_needed/tree/main
thanks
Winston
When running x9k3 with "replay" x9k3 stops on last segment and does not anymore update index file, or write new segment .ts files.
If I fully understand --replay it should keep "faking" continous live stream with updated index.m3u8 and (?maybe) new created .ts files. Everything seems OK until last segment.
x9k3 started with:
x9k3 -i longb.ts --replay
No sidecar / scte35 injection or anything similar was used.
Used version:
x9k3 --version
0.1.57
After some time (approxy 150 seconds) last index.m3u8 was created:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:3
#EXT-X-MEDIA-SEQUENCE:27
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXTINF:5.338,
seg27.ts
#EXTINF:5.339,
seg28.ts
#EXTINF:5.339,
seg29.ts
#EXTINF:5.338,
seg30.ts
#EXTINF:5.339,
seg31.ts
This fill remained static after that - no further changes occured to index.m3u8.
This are last moments of x9k3 (I waited until index.m3u8 stopped changing, then after a few seconds I pressed CTRL-C)
deleting ./seg22.ts
./seg28.ts start: 140.238000 duration: 5.339000 stream diff: 3.712951
deleting ./seg23.ts
./seg29.ts start: 145.577000 duration: 5.339000 stream diff: 3.65278
deleting ./seg24.ts
./seg30.ts start: 150.916000 duration: 5.338000 stream diff: 3.595596
deleting ./seg25.ts
./seg31.ts start: 156.254000 duration: 5.339000 stream diff: 3.549967
deleting ./seg26.ts
^CTraceback (most recent call last):
File "/home/uporabnik/.local/bin/x9k3", line 5, in <module>
cli()
File "/home/uporabnik/.local/lib/python3.8/site-packages/x9k3.py", line 811, in cli
stuff.run()
File "/home/uporabnik/.local/lib/python3.8/site-packages/x9k3.py", line 795, in run
self.loop()
File "/home/uporabnik/.local/lib/python3.8/site-packages/x9k3.py", line 778, in loop
if not self._find_start():
File "/home/uporabnik/.local/lib/python3.8/site-packages/threefive/stream.py", line 154, in _find_start
one = self._tsdata.read(1)
KeyboardInterrupt
input stream file used was taken from slo.me....
wget https://so.slo.me/longb.ts
ls -l longb.ts
-rw-rw-r-- 1 uporabnik uporabnik 59287492 Oct 4 2021 longb.ts
Hello. I try to use x9k3 segmenter but have no success.
First problem - its not create .m3u manifest file.
OS enviroment - Win7. I try to use Pypy3 or Python3, with admin rights - no success. Any suggestion?
Also its possible to select target directory for m3u and ts segments?
Second - it crash after some time with the same error.
Thank you.
Say something.
I am open to suggestions.
./seg29.ts start: 89731.181667 duration: 2.120000
./seg30.ts start: 89733.301667 duration: 2.120000
./seg31.ts start: 89735.421667 duration: 2.120000
./seg32.ts start: 89737.541667 duration: 2.120000
#EXT-X-CUE-OUT:242.0
./seg33.ts start: 89739.661667 duration: 2.520000
#EXT-X-CUE-OUT-CONT:2.520/242.0
./seg34.ts start: 89742.181667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:4.640/242.0
./seg35.ts start: 89744.301667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:6.760/242.0
./seg36.ts start: 89746.421667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:8.880/242.0
./seg37.ts start: 89748.541667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:11.000/242.0
./seg38.ts start: 89750.661667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:13.120/242.0
./seg39.ts start: 89752.781667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:15.240/242.0
./seg40.ts start: 89754.901667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:17.360/242.0
./seg41.ts start: 89757.021667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:19.480/242.0
./seg42.ts start: 89759.141667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:21.600/242.0
./seg43.ts start: 89761.261667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:23.720/242.0
./seg44.ts start: 89763.381667 duration: 2.120000
#EXT-X-CUE-OUT-CONT:25.840/242.0
./seg45.ts start: 89765.501667 duration: 2.120000
./seg27.ts start: 89726.941667 duration: 2.120000
./seg28.ts start: 89729.061667 duration: 2.120000
./seg29.ts start: 89731.181667 duration: 2.120000
./seg30.ts start: 89733.301667 duration: 2.120000
./seg31.ts start: 89735.421667 duration: 2.120000
./seg32.ts start: 89737.541667 duration: 2.120000
#EXT-X-DATERANGE:ID="1",START-DATE="2022-12-26T21:35:41.398909Z",PLANNED-DURATION=242.0,SCTE35-OUT=0xfc302f00000000000000fff01405000002967fefffe16a1ab87e014c562000010000000a00084355454900000000ebf5a2a7
./seg33.ts start: 89739.661667 duration: 2.520000
./seg34.ts start: 89742.181667 duration: 2.120000
./seg35.ts start: 89744.301667 duration: 2.120000
./seg36.ts start: 89746.421667 duration: 2.120000
./seg37.ts start: 89748.541667 duration: 2.120000
./seg38.ts start: 89750.661667 duration: 2.120000
./seg39.ts start: 89752.781667 duration: 2.120000
Is supported to make HLS with SCTE-35 from TS with audio only (radio station) with x9k3?
I am not sure if the below command is correct or not. My requirement is to insert SCTE35 marker to multi-bitrate livestream content generated from ffmpeg.
ffmpeg -i source.mp4 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -c:v libx264 -crf 22 -c:a aac -ar 48000 -filter:v:0 scale=w=480:h=360 -maxrate:v:0 600k -b:a:0 64k -filter:v:1 scale=w=640:h=480 -maxrate:v:1 900k -b:a:1 128k -filter:v:2 scale=w=1280:h=720 -maxrate:v:2 900k -b:a:2 128k -var_stream_map "v:0,a:0,name:360p v:1,a:1,name:480p v:2,a:2,name:720p" -preset slow -hls_list_size 0 -threads 0 -f hls -hls_playlist_type event -hls_time 3 -hls_flags independent_segments -master_pl_name "master.m3u8" "stream-%v.m3u8" -f mpegts - | x9k3 -s sidecar.txt -l
When I tried with this x9k3 always generating a index.m3u8 file with single bitrate. I want a master file and that should linked to resolution specific child manifest. Example,
master.m3u8
media-1
segment-1.ts
segment-2.ts
segment-n.ts
stream.m3u8
media-2
segment-1.ts
segment-2.ts
segment-n.ts
stream.m3u8
media-3
segment-1.ts
segment-2.ts
segment-n.ts
stream.m3u8
Appreciate your quick response.
Thank you
Hi Mate,
Looking for your latest development release.
Regard
Gaurav
I tried generate m3u8 from test xaa.ts video with scte35 stream inside, but found no x_cue tags in result:
#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.002000,
seg0.ts
#EXTINF:2.002011,
seg1.ts
#EXTINF:2.002000,
...
seg27.ts
#EXTINF:2.002011,
seg28.ts
#EXT-X-ENDLIST
I used bin from Dockerfile with cmd: x9k3 -i /src/xaa.ts --output_dir /results
Also it sometimes inserts wrong negative EXTINF values
#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:-0.000011,
seg0.ts
#EXTINF:1.001000,
seg1.ts
#EXTINF:1.001000,
seg2.ts
...
The hls standard states that:
An SCTE-35 splice out/in pair signaled by a pair of splice_insert()
commands SHOULD be represented by one or more EXT-X-DATERANGE tags
carrying the same ID attribute, which MUST be unique to that splice
out/in pair.
https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-4.4.5.1.1
This tool generates that pair with different ids for each scte command.
I'm using x9K3 to insert SCTE 35 data and I'm using index.m3u8 to transmit but it suddenly stops and doesn't continue transmission
OS: Debian 12
Comand: sudo x9k3 -i /usr/share/ffplayout/public/live/stream.m3u8 -s sidecar.txt -l
Hey @futzu I cant tell you how useful your tools are specially this one X9K3.
recently I tried to use standard input stream as input to x9k3 and It is not working,
here is my command :
TS file i downloaded from https://so.slo.me/longb.ts
cat longb.ts | x9k3 -l
output:
No Stream Found.
however with
x9k3 -i longb.ts --live
it is working fine.
I appreciate your response.
Thanks
I've found that the current implementation is always inserting EXT-X-DISCONTINUITY tags in the m3u8 file with the segments when a CUE occurs. When you try to playout the generated playlist, this makes the play to freeze or halt at those points, as the player is trying to resync the play because it is expecting a change in the stream. (this is a guess). I've tested it with hls.js, VLC and native iPhone player with similar results
But if you remove the tags from the playlist, the playout works like a charm with the same segments.
I've not found any documentation that requires that EXT-X-DISCONTINUITY is needed when inserting the CUEs in the playlist. This is needed only when, in the Ad Insertion scenario, the original segments are replaced with a new content that requires to be signalled to the player with the EXT-X-DISCONTINUITY.
I wonder if the usage of EXT-X-DISCONTINUITY could require that the segments generated in those points by the segmenter includes some information that permits to play out that correctly, or just to remove te EXT-X-DISCONTINUITY tags by default.
I have tried below command
import x9k3
x9 = x9k3.X9K3('media-1/segment-0.ts')
x9.run()
Its stuck and I could not find any reason behind this.
Could you please suggest if I am doing this in correct way or not?
Thank You
I am new to SCTE and need help on creating SCTE messages like below. I need to understand what does these string means and how I can create and use with this package.
Note: I have copied these messages from your examples.
I am able to insert them my livestream output using this package piping with ffmpeg.
Any help is highly appriciated.
Thank You
I have 5 ts file such as
test_1.ts
test_2.ts
test_3.ts
test_4.ts
I want to pragmatically parse each ts file but my output should be in one directory and one index.m3u8 should created. It like appending to one file.
Below is the sample code but its not working as currently I don't know how to do this.
import x9k3 for ts in multiple_ts: x9 = x9k3.X9K3(ts) x9.args.output_dir="output/" x9.run()
Thank you
After adding the -c option to being able to continue a previously generated m3u8, the replay option included this option by default.
IMHO replay is an option that implies the usage of one file to produce a live feed. Not necesarily that means the previous content in the output directory is meaningful.
I would suggest to decouple --replay and -c, so if someone needs it for replay, can add it explicitely
Hi Adrian,
I think because of latest changes there is a bug where If I try to add Cue marker immediately with
below sidecar data it is not working.
printf '0,/DAhAAAAAAAAAP/wEAUAAAAJf78A/gASZvAACQAAAACokv3z\n' > sidecar.txt
Where as if replace 0 with Time that is less than next_start it is working.
I think bug is somewhere here if I am not wrong.
https://github.com/futzu/x9k3/blob/8ed2b65b3d667e0ec47e22ef8fd98917ef619160/x9k3.py#L375
est_scte/seg56.ts: start: 1572.740000 end: 1578.740000 duration: 6.000000
deleting test_scte/seg51.ts
test_scte/seg57.ts: start: 1578.740000 end: 1584.740000 duration: 6.000000
deleting test_scte/seg52.ts
test_scte/seg58.ts: start: 1584.740000 end: 1590.740000 duration: 6.000000
deleting test_scte/seg53.ts
test_scte/seg59.ts: start: 1590.740000 end: 1596.740000 duration: 6.000000
deleting test_scte/seg54.ts
test_scte/seg60.ts: start: 1596.740000 end: 1602.740000 duration: 6.000000
deleting test_scte/seg55.ts
test_scte/seg61.ts: start: 1602.740000 end: 1608.740000 duration: 6.000000
deleting test_scte/seg56.ts
test_scte/seg62.ts: start: 1608.740000 end: 1614.740000 duration: 6.000000
deleting test_scte/seg57.ts
Traceback (most recent call last):
File "/usr/local/bin/x9k3", line 5, in
cli()
File "/usr/local/lib/python3.6/site-packages/x9k3.py", line 821, in cli
stuff.run()
File "/usr/local/lib/python3.6/site-packages/x9k3.py", line 383, in run
self.decode()
File "/usr/local/lib/python3.6/site-packages/x9k3.py", line 358, in decode
super().decode()
File "/usr/local/lib/python3.6/site-packages/threefive/stream.py", line 225, in decode
cue = self._parse(pkt)
File "/usr/local/lib/python3.6/site-packages/x9k3.py", line 335, in _parse
super()._parse(pkt)
File "/usr/local/lib/python3.6/site-packages/threefive/stream.py", line 454, in _parse
self._parse_pts(pkt, pid)
File "/usr/local/lib/python3.6/site-packages/threefive/stream.py", line 402, in _parse_pts
if self._pts_flag(payload):
File "/usr/local/lib/python3.6/site-packages/threefive/stream.py", line 345, in _pts_flag
return pay[7] & 0x80
IndexError: index out of range
[root@localhost ~]#
Hello.
x9k3 not show CUE-OUT=YES/CUE-IN=YES messages, only binary decoded SCTE messages.
In version 1.21 we get string like that -
#EXT-X-SCTE35:CUE="/DAgAAAAAAAAAP/wDwUAAAAAf/9+AAAAAAAAAAAAAD4xJP8=",CUE-OUT=YES
In version 1.23 and latest string always show as
#EXT-X-SCTE35:CUE="/DAgAAAAAAAAAP/wDwUAAAAAf/9+AAAAAAAAAAAAAD4xJP8="
I think its related to discontinuity control in your script.
Hi Adrain,
We are using udp feed from playout Engine. i would like to check the if that udp is vaild and can be used with x9k3 for hls creation.
We have tested x9k3 solution for stream coming via elemental and it works fine.whereas udp from playout creates problem while playing.
I am very sure there is problem in udp only. But i tried to meet same parameter tested by ffprobe but issue remains the same.
Any help is Great.
Gaurav
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.