HLS live streaming subtitle?

ywj7931 picture ywj7931 · Sep 22, 2016 · Viewed 7.8k times · Source

I am using rtmp to broadcast streams to the server and using HLS to stream the video to my device. Is there a subtitle protocol that I can update the subtitle on real time, for example, there is a subtitle file in server, I can keep write into that file and my player also can keep read from that file.

I know WebVTT works for recorded streaming video, but will it work for live streaming video? Can I link my player to the webVTT file and I can just update the subtitle by keeping writing to it?

Answer

Simon picture Simon · Sep 22, 2016

You can use WebVTT to add subtitles to a live HLS stream. You do this by using a live subtitle playlist. It works just like a live playlist - you add and remove entries from it as time progresses.

First create a master playlist and add a reference to your subtitle playlist (subtitles.m3u8) to it. Here’s a (simplified) example:

#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",URI="subtitles.m3u8",LANGUAGE="en"
#EXT-X-STREAM-INF:BANDWIDTH=500000,RESOLUTION=1920x1080,SUBTITLES="subs"
prog_index.m3u8

The next step is updating the subtitle playlist during the live broadcast. Let’s say your subtitle playlist looks like this initially:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:10,
1.webvtt
#EXTINF:10,
2.webvtt
#EXTINF:10,
3.webvtt

Notice that the #EXT-X-ENDLIST tag is missing from the playlist. This will cause the player to keep retrieving the playlist.

Then some time later (segment duration) it will look like this:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:2
#EXTINF:10,
2.webvtt
#EXTINF:10,
3.webvtt
#EXTINF:10,
4.webvtt

And so on. You’ll probably have to write some custom code to update the subtitle playlist.