• How to configure closed captioning language selection for video on demand streaming

    A given video on demand (VOD) asset can have multiple closed captioning or subtitling language tracks associated with it. This article describes how to configure Wowza Media Server to make each of these caption language tracks available to various players.

    Note: Wowza Media Server™ 3.5.0 or later is required.


    Language selection
    Language track streaming
    Language codes
    Multi-language caption files
    More resources


    A given VOD asset can have multiple closed captioning or subtitling language tracks associated with it, either embedded within the asset file itself or in a separate companion file. Wowza Media Server can make each of these caption language tracks available to various players. An exception to this is when CEA-608 captions are embedded in the video track of an MP4 asset. These captions are just passed-through in Apple HLS (Cupertino) streams to iOS devices. They're not extracted and sent in any of the other supported stream formats, such as onTextData in RTMP or Adobe HDS (San Jose) streams.

    Language selection

    The caption language that's provided depends on a combination of specific client selections and Wowza Media Server configuration.

    1. Language specified in the URL opened by a player:
    2. The configured captionLanguages property (if any), as defined in the Application/TimedText/Properties section in [install-dir]/conf/Application.xml:

      1. The internal default value for the captionLanguages property (when it's not specified) is "*", which means the first caption language that's found is used, based on the order of the caption providers that are declared in the VODCaptionProviders configuration and on the order of the languages found when the captions are ingested. The first language found by the first provider that can provide captions is used, so this can be non-deterministic if there are multiple providers (MP4, TTML) and each can provide multiple languages.

      2. captionLanguages can be set to any 3-character ISO-639 code (for example, eng). captionLanguages can be defined as a prioritized list of language codes (such as eng, spa, dut) and Wowza Media Server will provide the first one that's found:
        <!-- Properties for TimedText -->

    VOD caption languages can also be specified on a per-protocol basis using the cupertinoCaptionLanguages, rtmpCaptionLanguages, and sanJoseCaptionLanguages properties:


    Defines the language to be selected/presented by default for Apple HLS (Cupertino) streaming if none is specified in the player connection URL. The semantics for this property are the same as for the captionLanguages property.


    Defines the language to be selected/presented by default for RTMP streaming if none is specified in the player connection URL. The semantics for this property are the same as for the captionLanguages property.


    Defines the language to be selected/presented by default for Adobe HDS (San Jose) streaming if none is specified in the player connection URL. The semantics for this property are the same as for the captionLanguages property.

    Language track streaming

    While Wowza Media Server can ingest multiple languages, it only provides one caption language track at a time in the streaming output.

    Language codes

    Wowza Media Server generally supports language codes specified as ISO 639-1, ISO 639-2/T, or ISO 639-2/B codes (for example, "fr", "fra", "fre"). User selection and server configuration of language codes specifically require that a 3-letter ISO 639-2/T or 639-2/B code be used; however, input caption files may specify other language code formats, including 2-letter (ISO 639-1) and 4+ letter formats. When Wowza Media Server ingests 4+ letter format caption data, it will truncate anything after the first two characters of the provided language code and treat the remainder as a 2-letter ISO 639-1 code, and then convert that to a 3-character ISO 639-2/T code for storage and playback. This is to support legacy caption files.

    For best results, we recommend using three-character ISO 639-2/T language IDS where possible.

    Multi-language caption files

    The following example shows a complete TTML caption file containing multiple sets of caption languages. For this example, the TTML caption file reader in Wowza Media Server would ingest all five language renditions (eng, fra, spa, deu, and nor) and make them available for playback.
    <?xml version="1.0" encoding="utf-8"?>
    <tt xmlns="http://www.w3.org/2006/10/ttaf1" xmlns:ttp="http://www.w3.org/2006/10/ttaf1#parameter" ttp:timeBase="media" xmlns:tts="http://www.w3.org/2006/10/ttaf1#style" xmlns:ttm="http://www.w3.org/2006/10/ttaf1#metadata">
          <style id="s0" tts:backgroundColor="black" tts:fontStyle="normal" tts:fontSize="16" tts:fontFamily="sansSerif" tts:color="white" />
      <body tts:textAlign="center" style="s0">
        <div xml:lang="eng">
          <p begin="00:00:03.680" id="p0" end="00:00:04.480">one man</p>
          <p begin="00:00:04.480" id="p1" end="00:00:05.280">on a motorcycle</p>
          <p begin="00:00:05.280" id="p2" end="00:00:06.880">around the world</p>
          <p begin="00:00:06.880" id="p3" end="00:00:08.480">in</p>
          <p begin="00:00:08.480" id="p4" end="00:00:12.480">A Quest for Gameplay</p>
          <p begin="00:00:13.000" id="p5" end="00:00:14.800">Hello I'm Tim Hull.</p>
          <p begin="00:00:15.000" id="p6" end="00:00:18.000">I believe the games we play<br />are a fundamental building block</p>
          <p begin="00:00:18.040" id="p7" end="00:00:19.600">of our civilisation.</p>
          <p begin="00:00:19.960" id="p8" end="00:00:23.160">I've set out on a global journey<br />that is my personal mission</p>
          <p begin="00:00:23.200" id="p9" end="00:00:25.920">to seek out, uncover, observe</p>
          <p begin="00:00:25.960" id="p10" end="00:00:27.280">and play games.</p>
          <p begin="00:00:27.800" id="p11" end="00:00:32.280">I'm searching for games that tell<br />us about our history culture and psyche.</p>
          <p begin="00:00:33.200" id="p12" end="00:00:38.000">During my journey I'll reveal stories<br />of the greatest games ever conceived</p>
          <p begin="00:00:38.040" id="p13" end="00:00:39.600">and why they are still with us today.</p>
          <p begin="00:00:40.200" id="p14" end="00:00:44.040">From the school playground<br />to the home console I will learn firsthand</p>
          <p begin="00:00:44.080" id="p15" end="00:00:47.200">what makes a great game,<br />why games are good for us</p>
          <p begin="00:00:47.240" id="p16" end="00:00:49.040">and what they tell us about ourselves</p>
          <p begin="00:00:49.240" id="p17" end="00:00:51.800">as well as being lots of fun.</p>
        <div xml:lang="fra">
          <p begin="00:00:03.680" id="p0" end="00:00:04.480">Un homme</p>
          <p begin="00:00:04.480" id="p1" end="00:00:05.280">sur une moto</p>
          <p begin="00:00:05.280" id="p2" end="00:00:06.880">autour du monde</p>
          <p begin="00:00:06.880" id="p3" end="00:00:08.480">en</p>
          <p begin="00:00:08.480" id="p4" end="00:00:13.000">quête de jeux</p>
          <p begin="00:00:13.000" id="p5" end="00:00:15.000">Bonjour. Je suis Tim Hull.</p>
          <p begin="00:00:15.000" id="p6" end="00:00:18.040">Je crois que les jeux auxquels<br />nous jouons sont un pilier fondamental</p>
          <p begin="00:00:18.040" id="p7" end="00:00:19.960">de notre civilisation.</p>
          <p begin="00:00:19.960" id="p8" end="00:00:23.200">Je me suis lancé dans un voyage<br />global qui est ma mission personnelle</p>
          <p begin="00:00:23.200" id="p9" end="00:00:25.960">pour rechercher, découvrir, observer</p>
          <p begin="00:00:25.960" id="p10" end="00:00:27.800">et jouer.</p>
          <p begin="00:00:27.800" id="p11" end="00:00:33.200">Je suis à la recherche de jeux qui nous<br />racontent de notre histoire, culture et psyché.</p>
          <p begin="00:00:33.200" id="p12" end="00:00:38.040">Pendant mon voyage je dévoilerai<br />les plus grands jeux que l’homme ait conçu</p>
          <p begin="00:00:38.040" id="p13" end="00:00:40.200">et de pourquoi ils perdurent jusqu’à ce jour.</p>
          <p begin="00:00:40.200" id="p14" end="00:00:44.080">De la cour de récréation à la console informatique,<br />je vais apprendre de première main</p>
          <p begin="00:00:44.080" id="p15" end="00:00:47.240">ce qui fait un grand jeu,<br />pourquoi les jeux nous font du bien</p>
          <p begin="00:00:47.240" id="p16" end="00:00:49.240">et ce qu’ils nous révèlent de nous-mêmes,</p>
          <p begin="00:00:49.240" id="p17" end="00:00:51.800">tout en étant super amusants.</p>
        <div xml:lang="spa">
          <p begin="00:00:03.680" id="p0" end="00:00:04.480">un hombre</p>
          <p begin="00:00:04.480" id="p1" end="00:00:05.280">en moto</p>
          <p begin="00:00:05.280" id="p2" end="00:00:06.880">dando la vuelta al mundo</p>
          <p begin="00:00:06.880" id="p3" end="00:00:08.480">en</p>
          <p begin="00:00:08.480" id="p4" end="00:00:13.000">búsqueda de juegos</p>
          <p begin="00:00:13.000" id="p5" end="00:00:15.000">Hola! soy Tim Hull.</p>
          <p begin="00:00:15.000" id="p6" end="00:00:18.040">Estoy convencido de que los juegos<br />son cimientos fundamentales</p>
          <p begin="00:00:18.040" id="p7" end="00:00:19.960">de nuestra civilización.</p>
          <p begin="00:00:19.960" id="p8" end="00:00:23.200">Emprendí este viaje alrededor<br />del mundo como una misión personal</p>
          <p begin="00:00:23.200" id="p9" end="00:00:25.960">para buscar, descubrir, observar</p>
          <p begin="00:00:25.960" id="p10" end="00:00:27.800">y jugar a juegos.</p>
          <p begin="00:00:27.800" id="p11" end="00:00:33.200">Estoy buscando juegos que nos hablen<br />de nuestra historia, cultura y psique.</p>
          <p begin="00:00:33.200" id="p12" end="00:00:38.040">Durante mi viaje desvelaré historias<br />de los mejores juegos jamás concebidos</p>
          <p begin="00:00:38.040" id="p13" end="00:00:40.200">y de la razón para que aún sigan con nosotros</p>
          <p begin="00:00:40.200" id="p14" end="00:00:44.080">Del patio del colegio hasta la consola,<br />aprenderé de sus protagonistas</p>
          <p begin="00:00:44.080" id="p15" end="00:00:47.240">aquello que hace que un juego sea fenomenal,<br />lo que los hace buenos para nosotros</p>
          <p begin="00:00:47.240" id="p16" end="00:00:49.240">lo que expresan sobre nosotros mismos</p>
          <p begin="00:00:49.240" id="p17" end="00:00:51.800">y también porqué son tan divertidos.</p>
        <div xml:lang="deu">
          <p begin="00:00:03.680" id="p0" end="00:00:04.480">Ein Mann</p>
          <p begin="00:00:04.480" id="p1" end="00:00:05.280">auf einem Motorrad</p>
          <p begin="00:00:05.280" id="p2" end="00:00:06.880">rund um die Welt</p>
          <p begin="00:00:06.880" id="p3" end="00:00:08.480">auf</p>
          <p begin="00:00:08.480" id="p4" end="00:00:13.000">einer Suche nach Spielen</p>
          <p begin="00:00:13.000" id="p5" end="00:00:15.000">Hallo, ich heiße Tim Hull.</p>
          <p begin="00:00:15.000" id="p6" end="00:00:18.040">Ich glaube, dass unsere Spiele<br />ein wichtiger Grundstein</p>
          <p begin="00:00:18.040" id="p7" end="00:00:19.960">unserer Zivilisation sind.</p>
          <p begin="00:00:19.960" id="p8" end="00:00:23.200">Ich reise rund um die Welt,<br />und es ist meine Mission,</p>
          <p begin="00:00:23.200" id="p9" end="00:00:25.960">Spiele zu entdecken, zu beobachten</p>
          <p begin="00:00:25.960" id="p10" end="00:00:27.800">und zu spielen.</p>
          <p begin="00:00:27.800" id="p11" end="00:00:33.200">Ich suche Spiele, die etwas über unsere<br />Geschichte, Kultur und Psyche erzählen.</p>
          <p begin="00:00:33.200" id="p12" end="00:00:38.040">Unterwegs entdecke ich Geschichten<br />über die besten Spiele, die es jemals gab</p>
          <p begin="00:00:38.040" id="p13" end="00:00:40.200">und finde heraus, warum es sie bis heute noch gibt.</p>
          <p begin="00:00:40.200" id="p14" end="00:00:44.080">Vom Spielplatz bis zur ersten<br />Heimspielkonsole lerne ich aus erster Hand,</p>
          <p begin="00:00:44.080" id="p15" end="00:00:47.240">was ein gutes Spiel auszeichnet,<br />warum Spiele für uns wichtig sind,</p>
          <p begin="00:00:47.240" id="p16" end="00:00:49.240">was sie über uns aussagen,</p>
          <p begin="00:00:49.240" id="p17" end="00:00:51.800">und warum sie so viel Spaß machen.</p>
        <div xml:lang="nor">
          <p begin="00:00:03.680" id="p0" end="00:00:04.480">en mann</p>
          <p begin="00:00:04.480" id="p1" end="00:00:05.280">på en motorsykkel</p>
          <p begin="00:00:05.280" id="p2" end="00:00:06.880">rundt i verden</p>
          <p begin="00:00:06.880" id="p3" end="00:00:08.480">på</p>
          <p begin="00:00:08.480" id="p4" end="00:00:13.000">Jakt Etter Leker</p>
          <p begin="00:00:13.000" id="p5" end="00:00:15.000">Hei, jeg er Tim Hull.</p>
          <p begin="00:00:15.000" id="p6" end="00:00:18.040">Jeg tror at lekene vi utøver<br />er fundamentale byggestener</p>
          <p begin="00:00:18.040" id="p7" end="00:00:19.960">for vår sivilisasjon.</p>
          <p begin="00:00:19.960" id="p8" end="00:00:23.200">Jeg har lagt ut på en<br />reise der mitt personlige mål er</p>
          <p begin="00:00:23.200" id="p9" end="00:00:25.960">å lete etter, avdekke, observere</p>
          <p begin="00:00:25.960" id="p10" end="00:00:27.800">og leke.</p>
          <p begin="00:00:27.800" id="p11" end="00:00:33.200">Jeg er på utkikk etter leker som forteller<br />oss om vår historie, kultur og tenkemåte.</p>
          <p begin="00:00:33.200" id="p12" end="00:00:38.040">Gjennom reisen min vil jeg avdekke<br />historier om de beste lekene som har oppstått</p>
          <p begin="00:00:38.040" id="p13" end="00:00:40.200">og hvorfor de fortsatt er med oss i dag.</p>
          <p begin="00:00:40.200" id="p14" end="00:00:44.080">Fra skolegården til hjemmets fire<br />vegger skal jeg hente førstehåndslæring</p>
          <p begin="00:00:44.080" id="p15" end="00:00:47.240">om hva som gjør en lek god,<br />hvorfor leker er bra for oss</p>
          <p begin="00:00:47.240" id="p16" end="00:00:49.240">og hva de forteller om oss selv</p>
          <p begin="00:00:49.240" id="p17" end="00:00:51.800">i tillegg til å gi oss mye glede.</p>

    Updated: For Wowza Media Server 3.6.0 on 05-28-2013

    If you're having problems or want to discuss this article, post in our forum.