Wowza remains committed to customer success during the COVID-19 outbreak.  Learn More

Closed Captions for Live and VOD Streaming

Learn how to configure closed captioning for live streaming and video on demand with Wowza streaming software and JW Player.


In this video we touch on captioning for both live and video-on-demand streaming.


We cover:

Discuss the federal requirements for closed captioning
What features and tools are available in JW Player and Wowza Streaming Engine to enable closed captioning
Styling options for different playback devices
The various caption data support — CEA608, 3GPP, TTML, webVTT, and SRT
Step-by-step demo of how to enable captions


Moderator: Hello everyone and welcome to today's third session in our JW Player and Wowza Masterclass series. We're gonna talk about captioning for both live and video-on-demand streaming. And joining me from JW Player is Andrew Prelusky, who is the product manager at JW. Hey, Andrew, how are you?



Andrew: Doing good. How are you?



Moderator: Doing great. And caption has become a huge issue in the last couple years since the FCC came out with some regulations around it. So Andrew, maybe give us a quick run through. I saw this article you guys have up on your site about implementing CC closed captioning. Maybe talk a little bit about the federal requirements here in the US and in other countries, and then how JW player has solved that and how you can style it and add to all these kinds of features.



Andrew: Yeah, so I mean, the FCC has started requiring a couple more captions features, especially for broadcasting video online. That's definitely something that we try very, very hard to adhere to with our player. So again, we have support for different formats and different styling options as well, just to get through configuring background colors and font choices. For example, our article right here has a choice of Comic Sans, if that's something you can read. Absolutely, it's possible to style that through our player, and yeah.



Moderator: And a great thing about the styling is you can style this for a variety of different playback devices. So in here you've got some other implementations for iOS and android. So it really gives you a range of different options across all the different devices using JW Player's kind of intelligence and functionality.



Andrew: Yeah, that's right. Certain devices actually are styled through the operating systems themselves. So for example, iOS, Android, if the captions are using native playback, in certain cases then yes, that'll be basically propagated through the operating system. And in other cases, again when HLS on desktop is being used for flash and our own captions renderings being used, it is possible to style that through our player as well through the setup.



Moderator: Perfect. So with that let's actually jump into one of the articles about adding closed captions. And we're gonna kind of address this from two different angles: one's live and one's video-on-demand. And there are different requirements for both. So in this particular one, I've pulled up this example that's on the JW player site and we'll share the URL. And if I click on play here real quick you'll see I can enable captions for multiple languages. So this is something that is supported both from Wowza and JW, and then JW will render this in different languages. You can see there's English, we can switch to Japanese, Russian, and so on, and be able to control that all inside of the player. And some of the standards that we do support, we have several articles on our Wowza site on how to enable this is here you can see the different closed-caption we support with Wowza streaming engine.



So you see with live streaming, we support CEA608 caption data, on text data, and then on-caption. And for video-on-demand, we support 3GPP, TTML, webVTT, and SRT, as well as SCC. And what Wowza does like what we do with a lot of our protocols and codecs and such is we pretty much act as that middle-ware. We can take in this data, and then we can output very popular, common output data to actually send that to JW. So here you can see the most popular for Apple HLS is webVTT for video-on-demand, CEA608 for live, Adobe HDS is on text data, RTMP is also on text data. So you can, pretty much we can translate the incoming caption data from your live-stream source or your video-on-demand source, and then send that to JW. And then JW can actually take care of rendering that to the different devices on screen and we work very well together like we do with a lot of technologies.

And Andrew, by far the most popular one we see, of course, for live and video-on-demand streaming is Apple HLS. So that's the example I think we should use today. What do you think?



Andrew: Yeah, definitely. Sounds good.



Perfect. So what I'm gonna do is actually follow the support article that's on our site that says support article 461, and in here we have different references to video-on-demand as well as live streaming and how to enable that. So if you want more information this is a great source. And these are the individual articles on how to configure closed-captioning for live streaming and then also for video-on-demand. And if you scroll down here are all the different formats that we just went over on our website as well. So what I've done is I've spun up a new version of Wowza, and in here you can see I'm using a trial license. If I come into my live application by default Wowza comes installed with one live and one video-on-demand application. And if I go into my live application, right on the home screen on this live application in Wowza streaming engine manager, you can see that there's option down here for closed-caption sources. So if I click on edit, you'll see that right down here if I scroll down, I can choose the type of live close-caption source I want this live application to handle.



So in this particular example, I would choose embedded CEA608 captions for my live stream. I'd click on save and now that gets enabled for this particular live application and I'd have to restart this live application to create that functionality. And then on the video-on-demand side, if I click on video-on-demand and I scroll down, you see here the different sources that are supported for VOD. So you can see I have embedded 3GPP and time text tracks enabled if I want to change that. Now for video-on-demand, I can enable multiple sources for one video-on-demand application just because we can can put all those sidecar files in the video-on-demand root for where the files exist and you can enable that for this particular video-on-demand application.



So that's really easy how you can enable both live and video-on-demand. And let's actually look at a real life example. What I've done is I've simulated a live stream, and I've come into my application here. I've created a kind of a loop, and you can see I've created a closed-caption loop that's a simulated live feed. So if I look at this I can see this is at 2.5 megabits per second. If I look at test players I can click on start and very easily view this live source that's coming in. Now what I've done is I've gone ahead and come into mobile over here, or I can come into Apple HLS. And this iOS URL is actually the HLS URL. What I can do is actually grab this URL, and then be able to use that inside of JW player. So very easily, for this particular demo I am only doing one rendition, but what I could easily do is transcode that and send those adapted renditions to JW. And that closed-caption file will be associated with those adapted bit-rates as well. So now that I've copied this all I need to do now is go over to JW player and enable this. So Andrew, maybe you can give me a quick overview of how I can put his URL in here and enable this for this particular URL.



Andrew: Yes, it's pretty straight forward. Right at the top of the quick publish we have an option to insert a URL of your choosing. So things like live streams. And just paste that in right there like that, and now you can click on the embed form right there as well. And then you're going to see that playlist [inaudible 00:06:54] that we just created and press play. And there you go.



Moderator: So very easily you can see that closed-caption source actually came up as soon as it detected the closed-captioning available. If I click on this you can see now that closed-caption source is being enabled. And these are CEA608 captions that we're taking in from Wowza and then delivering to JW and JW is rendering this inside the player. And for this particular player, you can see if I right click here I'm using the JW player, the newest version, the cloud-based version of that in production. What I've done is I've actually clicked on this preview page because I want to see this kind of in a full window. So if I pull this up, you can see the closed-caption is gonna appear here. And there it is, and if click on that now you can see those being rendered to the screen. Now, Andrew, you said that from a visual perspective you can actually customize what font you want to use, the coloring of this depending on what your standards are, what you want to put out inside the player.



Andrew: I think I have actually seen some customers trying to do that as well. Creating customized interfaces for choosing options again for the viewer to select captions that feel the most comfortable for them. So that is fully customize-able through the player setup. Again, just simple things like font choice, font color, and background color. That's all available.



Moderator: And like you mentioned previously, it depends...a lot of devices use kind of native closed-captioning. So you don't have the control over that with JW player. You're kind of at the mercy of what device you're playing back those captions on, right?



Andrew: That is true. So again, for iOS specifically, currently with JW player 7.3, we will be rendering those captions in iOS through the native operating system. So typically what we see is that users do have strong preference when it comes to their captions. They have that set through their operating system level, and that's just going to propagate through and display with their own options.



Moderator: So Andrew, I know that JW's been doing a lot around HTML5 video. You guys are kind of a leader in developing for that format. What are you guys doing with closed-captioning to kind of provide HTML5 support for that format?



Andrew: Yeah, so previously with our implementation of HLS with flash, we used our built-in captions renderer. But with our work that we're doing with HLS and HTML5, we're trying to sort of step away from that as a lot of browsers do have built in support for tracks, the HTML5 standard. So we are currently trying to utilize that functionality on several captions renderers. And again, it's a similar benefit as you mentioned with iOS where certain operating system settings can be propagated down to those tracks. 



Moderator: Perfect, yeah. And from the Wowza side, it's the same on our end. We're gonna deliver that to JW player and let them do their magic in kind of rendering that to either Flash or HTML5 or whatever playback device someone happens to be on. So yeah, it's good. I think there's a lot more happening with HTML5 video, I think there's a lot more happening with MPEG-DASH. And as DASH matures, our solutions are going to mature as well to match the growing need for DASH for both live and video-on-demand delivery as well.



Andrew: Absolutely



Moderator: Well, great. Well with that, let's go ahead and open it up to questions.