HbbTV - Hybrid brodcast-broadband TV

Index


General

Estàndards / Standards

  • Specification (HbbTV.org)
  • Based on:
  • TS 102 796: "Hybrid Broadcast Broadband TV"
    • HbbTV 2.0: TS 102 796 v1.3.1 (pdf) (October 2015)
      • DASH talks 2014 Tullemans EBU (pdf)
      • HbbTV roadmap (9th October 2014)
      • Technology
        • DVB-CI+ 1.4
        • companion screens: second screen sync using work done in DVB-CSS
        • HTML5 profile replacing CE-HTML
      • Annex E
    • HbbTV 1.5: TS 102 796 v1.2.1 (pdf) (November 2012)
      • Referenced documents
      • 7. Formats and protocols
      • 8. Browser application environment
      • Annex A (normative): OIPF DAE Speccification Profile
      • Annex B (normative): Support for protected content delivery via broadband
      • Annex C (informative): Support for analogue broadcasting networks
      • Annex D (informative): Server root certificate selection policy
      • Annex E (normative): Profiles of MPEG DASH
        • E.1 Introduction (informative)
          • based on "ISO Base media file format live profile": "[...] supports both live and on-demand steaming of ISOBMFF content."
        • E.2 Requirements relating to the MPD
          • E.2.1 Profile definition
            • urn:hbbtv:dash:profile:isoff-live:2012
          • E.2.2 Numerical requirements
            • periods Nper: 32
            • adaptation sets Nadset: 16
            • representations Nrep: 16
          • E.2.3 Metadata requirements
          • E.2.4 Role related requirements
            • urn:mpeg:dash:role:2011
          • E.2.5 Audio channel configuration requirements
            • HE-AAC: urn:mpeg:dash:23003:3:audio_channel_configuration:2011
            • E-AC-3: urn:dolby:dash:audio_channel_configuration:2011
          • E.2.6 Content protection signalling
        • E.3 Restrictions on content
          • E.3.1 Restrictions on file format
            • "The movie fragment box ('moof') shall contain only one track fragment box ('traf'). "
          • E.3.2 Restrictions on adaptation sets
            • "Each Representation shall contain only one media component, i.e. a single audio or video track. Other non-media components (e.g. encryption keys) may be present if applicable."
            • "All ISO BMFF Representations shall have the same track_ID in the track header box and track fragment header box. "
            • "Initialization Segment shall be common for all Representations [...]"
            • "Segments shall be at least 1s long, except for the last segment in an MPD which may be shorter."
            • "Each video Segment shall have a duration of not more than fifteen seconds."
            • "Each audio Segment shall have a duration of not more than fifteen seconds."
        • E.4 Requirements on terminals
          • E.4.1 DASH profile support
          • E.4.2 Transitions between representations
          • E.4.3 Buffering
          • E.4.4 ISO File Format support
      • Annex F (informative): DRM integration
    • Old documents
      • Version 1.5 (March 2012, August 2012)
        • Figure 1: Specification overview
        • Nou / New:
        • 5.2 User input: remote, game controller...
        • 7.2 Broadcast-specific formats and protocols
          • 7.2.2 (broadcast) Protocol for application transport -> DSM-CC
          • 7.2.5 DSM-CC
        • 7.3 Broadband-specific formats and protocols
          • 7.3.2.2 (broadband) Protocols for download -> OIPF vol 4 Protocols: 5.2.3
        • 9.1.2 Unicast content download -> OIPF vol 5 DAE: 8.1.1.1
        • 11 Security
          • 11.1 Protected Content via Broadband
            • ISO base FF
              • Annex C: Common Encryption for ISOBMFF
        • Annex A:  OIPF DAE Specification Profile
          • A.1 Access to EIT Schedule Information (OIPF DAE)
        • Annex B: Profiles of MPEG-DASH
          • B.2 Requirements relating to the MPD
            • B.2.1 Profile definition
              • only one profile is available:
                • urn:hbbtv:dash:profile:isoff-live:2012
            • B.2.2 Numerical requirements
              • periods Nper: 32
              • adaptation sets Nadset: 16
              • representations Nrep: 16
            • B2.3 Metadata requirements
              • urn:mpeg:dash:role:2011
            • B2.5 Audio channel configuration requirements
              • multichannel
              • dolby
          • B.3 Restrictions on content
            • B.3.1 Restrictions on file format
              • "The movie fragment box ('moof') shall contain only one track fragment box ('traf')"
            • B.3.2 Restrictions on Adaptation Sets
              • "Each Representation shall contain only one media component, i.e. a single audio or video track"
              • "Each video Segment shall have a duration of not more than fifteen seconds"
              • "Initialization Segment shall be common for all Representations [...]"
              • "Each Segment shall consists of a whole, self-contained movie fragment."
              • "Segments shall be at least 1s long, except for the last segment in an MPD which may be shorter."
              • "Each video Segment shall have a duration of not more than fifteen seconds."
              • "Each audio Segment shall have a duration of not more than fifteen seconds."
        • Annex C: Common Encryption for ISOBMFF
          • C.2 Key Management for Live Content
            • "Periods are typically used for separate programs in a live broadcast"
          • C.3 Encryption mode
            • AES 128-bit in CTR mode (AES-CTR)
        • Annex D: DRM Integration (informative)
      • Errata
  • AIT
  • Formats and protocols (TS 102 796: 7.2 Broadcast-specific formats and protocols, 7.3 Broadband-specific formats and protocols):

    TS 102 796 formats
    protocols signalling synchronisation
    content application broadcast broadcast-independent application
    streaming download transport
    Broadcast
    7.2
    -
    -
    -
    TS 102 809 / cl. 7 ->  DSM-CC TS 102 809 / s. 5
    optional: TS 102 809 / cl. 5.4 -> XML enc of AIT
    TS 102 809 / cl. 8: "do-it-now" (DSM-CC stream events)
    Broadband
    7.3

    systems
    video
    audio
    TS
    AVC_SD_25
    AVC_HD_25
    HEAAC
    E-AC3
    MP4
    -
    -
    MPEG1_L3
    HEAAC

    OIPF vol4: Protocols / V1: cl. 5.2.3 / V2: 5.3.4 -> HTTP
    • HTTP (RFC 2616)
    • HTTP/TLS (RFC 2818, RFC 5246)



    ISMA Internet Streaming Media Alliance: "Implementation Specification Version 2.0, April 2005".
  • HbbTV and analogue TV (TS 102 796: Annex C)
    • http://[AIT_server]/service?CNI=xxx
      • CNI from TS 101 231 ""Television systems; Register of Country and Network Identification (CNI), Video Programming System (VPS) codes and Application codes for Teletext based systems" (pdf at EBU) (codes register pdf at EBU)
    • http://[AIT_server]/service?name=xxx
    • AIT in XML format:
      • as specified by TS 102 809 clause 5.4 "XML-based syntax"
...

Proves /Tests

Exemples / Examples

Programari / Software

Receptors / Receivers

Desenvolupament / Development

  • 8. Browser application environment
    • 8.1 OIPF
      • Annex A: OIPF DAE specification profile


        reference in DAE
        embedded object / classes
        methods
        HTML
        OIPF vol5: DAE
        7.2 Application management APIs
        7.2.1 The application/oipfApplicationManager embedded object
        • getApplicationVisualizationMode()
        • getOwnerApplication() (returns an application)
        • getChildApplicationsgetChildApplications
        • installWidget
        • uninstallWidget
        <object type="application/oipfApplicationManager" id="oipfAppMan"></object>
        7.2.2 The Application class
        • show()
        • hide()
        • activateInput()
        • deactivateInput()
        • createApplication()
        • destroyApplication()
        • startWidget()
        • stopWidget()

        7.2.5 The Keyset class
        • setValue(value, otherKeys)

        7.3 Configuration and settings APIs
        7.3 The application/oipfConfiguration embedded object

        <object type="application/oipfConfiguration" id="oipfConfig"></object>

        7.3.2 The Configuration class


        ...



        7.13 Scheduled content and hybrid tuner APIs
        7.13.1 The video/broadcast embedded object
        • getChannelConfig()
        • bindToCurrentChannel()
        • createChannelObject()
        • setChannel()
        • prevChannel()
        • nextChannel()
        • stop()
        • setFullScreen()
        • setVolume()
        • getVolume()
        • release()
        • added by HbbTV:
          • addStreamEventListener(...)
          • removeStreamEventListener(...)
          • StreamEvent
        <object type="video/broadcast" id="broadcast"></object>
        7.14 Media playback APIs
        7.14.1 The CEA 2014 A/V Control embedded object (CEA-2014-A, sec.5.7.1)
        • play(speed)
        • stop()
        • setSource()
        <object type="video/mpeg" id="video_mpeg"></object>
        <object type="video/mp4" id="video_mp4"></object>
        <object type="application/dash+xml" id="video_dash"></object>
    • 8.2 Defined Javascript APIs (additional methods for video/broadcast)
      • 8.2.1 Acquisition of DSM-CC stream events
      • 8.2.2 Carousel objects access with XMLHttpRequest
...


MitXperts (mitxp)
IRT
sunglim
HbbTV-Testsuite

HbbTV_Application_Template HbbTV_Demo_App

Basic
Advanced
Samples / redbutton_app
base.js hbbtvlib.js -
hbbtvlib.js hbbtvlib.js
base.js video_base.js
var app = document.getElementById('appmgr').getOwnerApplication(document);
app.show();

initApp() hbbtvlib_show() (html)
hbbtvlib_red_initialize() hbbtvlib_red_initialize() initApp()
  (call to setKeyset(0x1...))

initApp() 
  (call to setKeyset(0x1...))
app.activate();


var app = document.getElementById('appmgr').getOwnerApplication(document);
app.privateData.keyset.setValue(mask);
app.privateData.keyset.value = mask;

setKeyset(mask) hbbtvlib_setKeysets()
hbbtvlib_red_initialize() hbbtvlib_red_initialize() setKeyset(mask) setKeyset(mask)
document.addEventListener("keydown", function(e) {
  if (handleKeyCode(e.keyCode)) {
    e.preventDefault();
  }
}, false);

registerKeyEventListener()



registerKeyEventListener() registerKeyEventListener()
document.getElementById('video').bindToCurrentChannel(); initVideo()



initVideo() initVideo()







...

...


Ohana-Revuelta IRT MIT-Experts

RTVE
common
js files
hbbtvlib.js
hbbtvlib.js
  • hbbtvlib_initialize
    • int_createOipfObjs()
    • appMgr = int_objs[int_objTypes.appMan];
    • int_app = appMgr.getOwnerApplication(document);
  • hbbtvlib_show
    • int_app.show()
    • int_app.activate()
    • int_app.activateInput()
  • hbbtvlib_hide
  • hbbtvlib_setKeysets
  • hbbtvlib_createApp
    • int_app.createApplication(...)
  • hbbtvlib_closeApp
  • hbbtvlib_init_broadcast
    • int_bc_video.bindToCurrentChannel()
  • int_vb_onError
  • hbbtvlib_release_broadcast
  • hbbtvlib_current_service
  • hbbtvlib_tuneTo
  • int_createOipfObjs
  • int_initKeysetObj
    • int_ksHidden = int_keyset.RED;
    • int_ksVisible = 0x33F; // color + nav + vcr + numeric + alpha
base.js
  • initVideo
    • .bindToCurrentChannel()
  • initApp
    • app = document.getElementById('appmgr').getOwnerApplication(document);
    • app.show()
    • app.activate()
    • setKeyset(0x1+0x2+0x4+0x8+0x10)
  • setKeyset(mask)
    • appmgr.privateData.keyset.setValue(mask);
    • appmgr.privateData.keyset.value = mask;
  • registerKeyEventListener
  • menuInit
  • menuSelect
  • showStatus
  • setInstr
hbbtvlib.js (IRT)
hbbtv.js / hbbtv_prueba.js
  • window.hbbtv_init
  • window.hbbtv_show
    • int_app.show()
    • int_app.activate();
    • int_app.activateInput();
    • int_keyset.setValue(int_ksVisible);
  • window.hbbtv_hide
    • int_app.hide();
    • int_keyset.setValue(int_ksHidden);
  • window.int_createOipfObjs
  • window.int_KeysetObj
    • int_ksHidden = int_keyset.RED;
    • int_ksVisible = 0x33F; // color + nav + vcr + numeric + alpha
keycodes.js
keycodes.js
keycodes.js
constants.js
application specific
js
base.js main.js
  • window.onload = function ...
    • hbbtvlib_initialise()
      • hbbtblib_show()
  • startFromAIT(url)
    • hbbtvlib_createApp(url);
  • eventHandler
  • start
  • html_entity_encode
settings.js
main.js
  • initApp()
    • hbbtvlib_initialize
      • hbbtv_show()
    • initMenu
    • videoContainer.innerHTML = "<object id='video' type='video/mpeg'></object>";
    • vPlayer = document.getElementById("video");
  • playVideo(id)
    • ...
    • vPlayer.play(1)
  • doPlayStateChange
  • initMenu()
  • handleKeyCode()
  • ...
  • finalApp()

css

global.css
  • body {
    height: 720px;
    width: 1280px;
    color: #aaaaaa;
    background-color: #07417D;
    margin: 0;
    padding: 0;
    font-size: 24px;
    }

    #safe_area {
    width: 1024px;
    height: 648px;
    padding: 36px 128px;
    margin: 0;
    top: 0;
    left: 0;
    }

    a:focus {
    background-color: yellow;
    }



index.html
doctype


  • <!DOCTYPE html PUBLIC "-//HbbTV//1.1.1//EN" "http://www.hbbtv.org/dtd/HbbTV-1.1.1.dtd">
  • <!DOCTYPE html PUBLIC "-//HbbTV//1.2.1//EN" "http://www.hbbtv.org/dtd/HbbTV-1.2.1.dtd">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//HbbTV//1.1.1//EN" "http://www.hbbtv.org/dtd/HbbTV-1.1.1.dtd">
html



<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
head
<meta http-equiv="content-type" content="application/vnd.hbbtv.xhtml+xml;charset=UTF-8"/>

tests.php
  • <script
    type="text/javascript"
    src="/hbbtv/common/js/hbbtvlib.js"></script>
  • <script
    type="text/javascript" src="main.js"></script>


base.php
  • sendContentType()
    • header('Content-Type: application/vnd.hbbtv.xhtml+xml; charset=UTF-8');
  • videoObject(...)
    • return '<object id="video" type="video/broadcast" ...></object>';
  • appmgrObject()
    • return
      '<object id="appmgr" type="application/oipfApplicationManager" ...></object>
      <object id="oipfcfg" type="application/oipfConfiguration" ...></object>';
  • openDocument()
    • echo "<script type=\"text/javascript\" src=\"$ROOTDIR/settings.js\"></script>\n";   
    • echo "<script type=\"text/javascript\" src=\"$ROOTDIR/keycodes.js\"></script>\n";   
    • echo "<script type=\"text/javascript\" src=\"$ROOTDIR/base.js\"></script>\n";
index.php
  • window.onload
    • menuInit()
    • initVideo()
    • registerKeyEventListener()
    • setDescr()
    • initApp()
  • ...
  • closeApp()
index.php
  • <meta http-equiv="content-type" content="application/ce-html+xml; charset=uft-8"/>
    ...
    <link rel="stylesheet" type="text/css" href="css/layout.css" />
    <script type="text/javascript" src="js/hbbtvlib.js"></script>
    <script type="text/javascript" src="js/constants.js"></script>
    <script type="text/javascript" src="js/main.js"></script>
index.html
  • ...

  • <script type="text/javascript" src="/hbbtv/common/js/hbbtvlib.js"></script>
  • <script type="text/javascript" src="main.js"></script>

<script type="text/javascript">
...
</script>
<script type="text/javascript">
   function init() {
     try {              
       hbbtv_init();
       hbbtv_show();
       ...
     }
</script>

<link rel="stylesheet" type="text/css" href="hbbtv.css"/>

  • <style>
    ...
    </style>

body
tests/index.php
  • <body onload="hbbtvlib_initialize(); hbbtvlib_show(); document.getElementsByTagName('a')[0].focus();">
  • <div id="safe_area">
    </div>
base.php
index.php
  • echo videoObject();
    echo appmgrObject();
index.php
  • <body onload="initApp()" onunload="finalApp();">

  • <div style="visibility: hidden; height: 0; width: 0; position: absolute;">
    <object type="application/oipfApplicationManager" id="oipfAppMan"></object>
    <object type="application/oipfConfiguration" id="oipfConfig"></object>
    </div>
  • <div style="visibility: hidden; display: none;">
    <object type="application/oipfApplicationManager" id="oipfAppMan"></object>
    <object type="application/oipfConfiguration" id="oipfConfig"></object>
    </div>

  • Programming for HbbTV [closed]
  • TAL (TV Application Layer) (BBC)
  • Exemples / Examples
  • Simple HbbTV HTML
    • ...
    • <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE html PUBLIC "-//HbbTV//1.2.1//EN" "http://www.hbbtv.org/dtd/HbbTV-1.2.1.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

        <head>
          <title>HbbTV DASH</title>
          <meta http-equiv="content-type" content="application/vnd.hbbtv.xhtml+xml;charset=UTF-8"/>
          <link rel="stylesheet" type="text/css" href="css/hbbtv.css"/>
          <script type="text/javascript" src="js/hbbtv.js"></script>
          <script type="text/javascript">
            function init() {
              try {
                ...
              }
            }
          </script>
        </head>

        <body onload="init();">
          <div style="visibility: hidden; display: none;">
            <object type="application/oipfApplicationManager" id="oipfAppMan"></object>
            <object type="application/oipfConfiguration" id="oipfConfig"></object>
          </div>
         
          <div id="safe_area">
            <object id="video_dash" type ="application/dash+xml" style="width:640px; height: 360px;"></object>

            <ul>
          <li>Primer element</li>
          <li>Segon element</li>
            </ul>
          </div>

        </body>

      </html>


  • Client behaviour:
    • href focus highlight:
      • Samsung: not shown
      • Engel: shown
    • host vs hostname in Javascript
  • Video
    • function reprodueix(adreca_absoluta)
        {
          var videoElem = document.getElementById("video");
          videoElem.stop();
          videoElem.data = adreca_absoluta;
          videoElem.play(1);
        }

    • <object id="broadcast" type="video/broadcast" style="position: absolute; top: 100px; left: 400px; width: 600px; height: 300px;"></object>
    • <object id="video" type="video/mp4" style="position: absolute; top: 100px; left: 400px; width: 600px; height: 300px;"></object>
    • <object id="video" type="video/mpeg" style="position: absolute; top: 100px; left: 400px; width: 600px; height: 300px;"></object>
    • <object id="video" type="application/dash+xml" style="position: absolute; top: 100px; left: 400px; width: 600px; height: 300px;"></object>
    • <a href="javascript:reprodueix(location.protocol+'//'+location.host+'/path/to/toto.mp4')">toto sequence</a>
    • PIP
      • Standard TS 102 796 v1.2.1, page 72
        • "Terminals shall only support one active instance of a video/broadcast object at any time."
  • Llançadora / Launcher
    • <head>
        <script type='text/javascript' language='javascript'>
          function init() {
          ...
          window.setTimeout (function(){
            hbbtv_hide();
            document.getElementById("splash_image").style.visibility = "hidden";
          }, 5000);
          ...
          }
        </script>
      </head>

      <body>
        <div id="splash_image">
          <img src="imatge.png"/>
        </div>
      </body>

  • Focus
    • document.getElementById("primer").focus();
  • DVB signalling:
    • "Single appliaction location descriptor" (TS 102 809: 5.3.7) cannot be empty: at least "/" (for root documents)
  • KeySet values (OIPF vol5 7.2.5):
    constant name
    numeric value
    use
    RED
    0x1
    • VK_RED
    GREEN
    0x2
    • VK_GREEN
    YELLOW
    0x4
    • VK_YELLOW
    BLUE
    0x8
    • VK_BLUE
    NAVIGATION
    0x10
    • VK_UP
    • VK_DOWN
    • VK_LEFT
    • VK_RIGHT
    • VK_ENTER
    • VK_BACK
    VCR
    0x20
    • VK_PLAY
    • VK_PAUSE
    • VK_STOP
    • VK_NEXT
    • VK_PREV
    • VK_FAST_FWD
    • VK_REWIND
    • VK_PLAY_PAUSE
    SCROLL
    0x40
    • VK_PAGE_UP
    • VK_PAGE_DOWN
    INFO
    0x80
    • VK_INFO
    NUMERIC
    0x100
    • 0..9
    ALPHA
    0x200
    • alphabetic
    OTHER
    0x400

CE-HTML


  • Simple CE-HTML (wp)
    • <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "ce-html-1.0-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
          <title>CE-HTML</title>
        </head>
        <body onload="document.getElementById('myvid').play(1);">
          CE-HTML a/v object:<br/>
          <object type="video/mp4" id="myvid" data="myvideo.mp4" width="640" height="360"></object>
        </body>
      </html>


http://www.francescpinyol.cat/hbbtv.html
Primera versió: / First version: 17.III.2012
Darrera modificació: 24 d'octubre de 2014 / Last update: 24th October 2014

Valid HTML 4.01!

Cap a casa / Back home.