The text of the WebVTT captions are being remuxed into the MPEG-TS directly to work with the rest of our infrastructure.
Oh okay.
So webvtt recordings will work (display subs) within channels clients - but not outside? I assumed you meant for m3u export it wouldn't be visible - but are you meaning recordings?
Correct. The way they're muxing them into the MPEG-TS is using a private data PES of type xVTT that is not going to be used by anything other than their client players to extract them.
No other players or cc/sub rip utilities will work.


Pluto Recording > View Details
@slampman yes, comskip will see the captions and that will be able to help Enhanced Commercial Detection.
@eric will MPEG-TS ever support Webvtt? Most of the sources im doing some dev work on are MPEG-TS. I am looking at moving them to hls but if mpeg support is coming i will hold off.
Seriously thank you so much for this.
@eric I'm playing around with this. converted my source to hls and have been playing around trying to get the WebVTT captions to work. I keep hitting a panic recovered error whenever there's a subtitle track in the master playlist. It works fine without it. Am I missing something in how the subtitle playlist needs to be formatted?
2026/04/01 19:11:42 [Recovery] 2026/04/01 - 19:11:42 panic recovered:
runtime error: invalid memory address or nil pointer dereference
runtime/panic.go:262 (0x486718)
runtime/signal_unix.go:925 (0x4866e8)
github.com/fancybits/channels-server/hls/remuxer.go:174 (0x1324943)
github.com/fancybits/channels-server/hls/reader.go:305 (0x131bab8)
github.com/fancybits/channels-server/hls/reader.go:509 (0x131cd84)
github.com/fancybits/channels-server/tuner/stream.go:582 (0x13492b9)
github.com/fancybits/channels-server/tuner/stream.go:446 (0x1348424)
io/io.go:429 (0x49d2cf)
io/io.go:388 (0x28865ec)
github.com/fancybits/channels-server/http_device.go:800 (0x2886178)
github.com/fancybits/channels-server/http_device.go:809 (0x28846b9)
github.com/gin-gonic/[email protected]/context.go:192 (0x18ab56d)
github.com/fancybits/channels-server/http_device.go:112 (0x2804584)
github.com/gin-gonic/[email protected]/context.go:192 (0x18ab56d)
github.com/fancybits/channels-server/http.go:420 (0x27f38b2)
github.com/gin-gonic/[email protected]/context.go:192 (0x18ab56d)
github.com/fancybits/channels-server/http.go:397 (0x27f356f)
github.com/gin-gonic/[email protected]/context.go:192 (0x18ab56d)
github.com/fancybits/channels-server/http.go:372 (0x27f3227)
github.com/gin-gonic/[email protected]/context.go:192 (0x18ab56d)
github.com/fancybits/channels-server/http.go:334 (0x27f25b0)
github.com/gin-gonic/[email protected]/context.go:192 (0x18ab56d)
github.com/gin-gonic/[email protected]/recovery.go:101 (0x18ba2b0)
github.com/gin-gonic/[email protected]/context.go:192 (0x18ab56d)
github.com/gin-gonic/[email protected]/logger.go:249 (0x18b93c9)
github.com/gin-gonic/[email protected]/context.go:192 (0x18ab56d)
github.com/gin-contrib/[email protected]/sessions.go:54 (0x27f6964)
github.com/gin-gonic/[email protected]/context.go:192 (0x18ab56d)
github.com/fancybits/channels-server/http.go:596 (0x2894d2e)
github.com/gin-gonic/[email protected]/context.go:192 (0x18ab56d)
github.com/gin-gonic/[email protected]/gin.go:689 (0x18b83f4)
github.com/gin-gonic/[email protected]/gin.go:643 (0x18b7d8c)
net/http/server.go:3340 (0x76cf6d)
net/http/server.go:2109 (0x74b764)
runtime/asm_amd64.s:1693 (0x48c740)
sure thing e3f6f6bf-2592-4769-b91e-db926e7d484d
I'm using AI to try and work with this so if you have example of a working WebVTT subtitle playlist format that Channels likes I could try and replicate that 
This should fix your panic.
Can webvtt now be passed through if outputting via hls instead of format=ts for M3U export?
Eg with something like scodec=vtt?
No, it's not something that we'll likely be able to do in the near term.
hey @eric
Got another panic error yesterday fyi
026/04/19 12:34:48 [Recovery] 2026/04/19 - 12:34:48 panic recovered:
runtime error: index out of range [0] with length 0
runtime/panic.go:236 (0x454016)
runtime/asm_amd64.s:2129 (0x499227)
github.com/asticode/[email protected]/webvtt.go:280 (0x12a890e)
github.com/fancybits/channels-server/hls/remuxer.go:181 (0x12ee2e9)
github.com/fancybits/channels-server/hls/reader.go:323 (0x12e54be)
github.com/fancybits/channels-server/hls/reader.go:527 (0x12e6848)
github.com/fancybits/channels-server/tuner/stream.go:582 (0x13143f9)
github.com/fancybits/channels-server/tuner/stream.go:446 (0x13135a4)
io/io.go:429 (0x4a8d0f)
io/io.go:388 (0x27ef764)
github.com/fancybits/channels-server/http_device.go:800 (0x27ef2c5)
github.com/fancybits/channels-server/http_device.go:809 (0x27ed888)
github.com/gin-gonic/[email protected]/context.go:192 (0x185012d)
github.com/fancybits/channels-server/http_device.go:112 (0x277118e)
github.com/gin-gonic/[email protected]/context.go:192 (0x185012d)
github.com/fancybits/channels-server/http.go:420 (0x27607b3)
github.com/gin-gonic/[email protected]/context.go:192 (0x185012d)
github.com/fancybits/channels-server/http.go:397 (0x276046f)
github.com/gin-gonic/[email protected]/context.go:192 (0x185012d)
github.com/fancybits/channels-server/http.go:372 (0x2760147)
github.com/gin-gonic/[email protected]/context.go:192 (0x185012d)
github.com/fancybits/channels-server/http.go:334 (0x275f4e8)
github.com/gin-gonic/[email protected]/context.go:192 (0x185012d)
github.com/gin-gonic/[email protected]/recovery.go:101 (0x185edd0)
github.com/gin-gonic/[email protected]/context.go:192 (0x185012d)
github.com/gin-gonic/[email protected]/logger.go:249 (0x185dee9)
github.com/gin-gonic/[email protected]/context.go:192 (0x185012d)
github.com/gin-contrib/[email protected]/sessions.go:54 (0x2763764)
github.com/gin-gonic/[email protected]/context.go:192 (0x185012d)
github.com/fancybits/channels-server/http.go:596 (0x27fe06e)
github.com/gin-gonic/[email protected]/context.go:192 (0x185012d)
github.com/gin-gonic/[email protected]/gin.go:689 (0x185cf1d)
github.com/gin-gonic/[email protected]/gin.go:643 (0x185c8cc)
net/http/server.go:3311 (0x77f2ed)
net/http/server.go:2073 (0x75dc6f)
runtime/asm_amd64.s:1771 (0x498dc0)
Looks like a malformed WebVTT segment that we aren’t handling properly. I’ll have to investigate more.
This pre-release should no longer panic and should report a useful error.
Tnx. The channel that crashed it was Plex24 (from Plex). I upgraded and it didn’t crash this time, but I’m getting Spanish subtitles now.
It totally could be upstream error- just thought I’d report.
No bueno
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.


