Using the Brightcove Player for TVE

Product(s)
Video Cloud
Role(s)
Player Developer

This topic provides information on Video Cloud’s Adobe Primetime integration for TV Everywhere (TVE) solutions. The instructions below simplify data entry and management of video metadata by removing the unnecessary duplication of values and by automatically generating the XML request values needed by the Adobe Pass client based on individual custom fields.

Account configuration

Using Video Cloud with TVE requires some account configuration by Brightcove Support. If you want to use TVE, Contact Brightcove Support for details.

Required Fields

For this integration you may want to create one of more of the following custom fields in your account. The names below are the internal names for the fields - you can use whatever you like for the display names.

  • bcadobepassrequestorid
  • bcadobepasstitle
  • bcadobepassreferenceid
  • bcadobepassrating
  • bcadobepassratingscheme

In the following section, you will see how these fields are used, if present, and what values are used instead if they are not.

Auto-generation of resourceID and requestorID fields

When a user retrieves a video via the Playback API from a TVE-enabled account, the API will return a value for bcadobepassrequestorid according to the following rules:

  • If a custom field value for bcadobepassrequestorid exists on the video, the API will return the video-level value.
  • If no value is set for the bcadobepassrequestorid field, the API will return the requestor ID value stored in the account settings.

 

When a user retrieves a video via the Playback API from a TVE-enabled account, the API will return a value for bcadobepassresourceid according to the following rules:

  • If a custom field value for bcadobepassresourceid exists on the video, the API will return the field-level value
  • If no value is set for the bcadobepassresourceid field, the API will return a calculated value based on the fields and XML format noted below.

The generated bcadobepassresourceid field should follow the MRSS format specified by Adobe and used in almost all integrations with Comcast.

<rss version='2.0' xmlns:media='http://search.yahoo.com/mrss/'>
<channel>
<title>channel</title>
<item><title>item-title</title>
<guid>guid</guid>
<media:rating scheme='urn:rating-scheme'>rating</media:rating></item>
</channel>
</rss>

The values included in the MRSS should be based on the following rules.

TVE RSS Fields
RSS XML Field Video Cloud Field
channel
  • If present, use bcadobepassrequestorid
  • If not present, use the value set in the account settings
item-title
  • If present, use bcadobepasstitle
  • If not present, use name
guid
  • If present, use bcadobepassreferenceid
  • If not present, use reference_id
rating
  • If present, use bcadobepassrequestorid
  • Only send if both bcadobepassrating and bcadobepassratingscheme are present
rating-scheme
  • If present, use bcadobepassratingscheme
  • Only send if both bcadobepassrating and bcadobepassratingscheme are present

Configuring the player

The following code provides a model for configuring the Brightcove player for TVE.

<!doctype html>
<html>
<head>
  <title>TVE Example</title>
</head>
<body>
  <!-- Make sure your player doesn't have a video associated with it
  and don't use data-video-id to assign one. We'll request a video
  from the catalog by hand, detect that it's TVE content, trigger TVE
  authentication and then load the video into the player. -->
  <video-js id="tve-player"
    data-account="account1234"
    data-player="player-id"
    class="video-js"
    controls>
  </video-js>
  <script src="//players.brightcove.net/account1234/player-id_default/index.min.js"></script>
  <script>
  var player = videojs.getPlayer('tve-player');
  player.ready(function() {
    player.catalog.getVideo('ref:tve-video', function(error, video) {
      if (error) {
        // showErrorMessage() would be defined by you somewhere else
        // in the page
        return showErrorMessage(error);
      }
      // You can tell whether a video is TVE protected by checking to
      // see if the video sources contain URLs. If they don't, you need
      // to authenticate your viewer and re-request the video with their
      // TVE credentials.
      if (video.sources && video.sources[0].src) {
        // This is not a TVE video so it can be played back immediately
        return player.catalog.load(video);
      }
      // From here on, we're definitely dealing with a TVE video.
      // You need to provide an implementation for authenticateWithTVE()
      // to get a TVE token. See the documentation from your TVE provider
      // for details on how to do that.
      autenticateWithTVE(function(error, tveToken) {
        if (error) {
          return showErorMessage(error);
        }
        // Now that we have the token, we can re-request the video and get playable URLs.
        player.catalog.tveToken = tveToken;
        player.catalog.getVideo('ref:tve-video', function(error, video) {
          if (error) {
            return showErrorMessage(error);
          }
          player.catalog.load(video);
        });
      });
    });
  });
  </script>
</body>
</html>

Response for request without authentication

Below is a sample response from the Playback API when TVE Authentication has not been provided. As you will see, the video sources are not available, but other video metadata is present to allow the player to display a preview of the content.

{
  "sources": [

    ],
  "description": "The short description can be used to give more information about your video and will appear in many standard Brightcove player templates.",
  "poster_sources": [
    {
      "src": "http://f1.media.brightcove.com/8/96980657001/96980657001_207574837001_commonRedpoll-still.jpg?pubId=3840518800001&videoId=3843070012001"
    },
    {
      "src": "https://f1.media.brightcove.com/8/96980657001/96980657001_207574837001_commonRedpoll-still.jpg?pubId=3840518800001&videoId=3843070012001"
    }
  ],
  "tags": [
    "sample"
  ],
  "cue_points": [

  ],
"errors": [
      {
        "error_subcode": "TVE_AUTH",
        "error_code": "SOURCES_RESTRICTED",
        "message": "Video sources are restricted by access policy.",
        "restricted_fields": [
          "sources"
        ]
      }
    ],
    "custom_fields": {
    "bcadobepassresourceid": "anotherRefIdXXX",
    "bcadobepassrequestorid": "asdfasf",
    "bcadobepassrating": "XXX",
    "bcadobepassreferenceid": "anotherRefId",
    "bcadobepasstitle": "PassTitle",
    "bcadobepassratingscheme": "TV-14"
  },
  "account_id": "3840518800001",
  "name": "Sample Video 2",
  "reference_id": null,
  "long_description": null,
  "duration": 29960,
  "economics": "AD_SUPPORTED",
  "published_at": "2014-10-16T16:35:24.520Z",
  "text_tracks": [

  ],
  "updated_at": "2017-05-26T01:48:41.396Z",
  "thumbnail": "http://f1.media.brightcove.com/8/96980657001/96980657001_180424037001_commonRedpoll-thumbnail.jpg?pubId=3840518800001&videoId=3843070012001",
  "poster": "http://f1.media.brightcove.com/8/96980657001/96980657001_207574837001_commonRedpoll-still.jpg?pubId=3840518800001&videoId=3843070012001",
  "offline_enabled": false,
  "link": null,
  "id": "3843070012001",
  "ad_keys": null,
  "thumbnail_sources": [
    {
      "src": "http://f1.media.brightcove.com/8/96980657001/96980657001_180424037001_commonRedpoll-thumbnail.jpg?pubId=3840518800001&videoId=3843070012001"
    },
    {
      "src": "https://f1.media.brightcove.com/8/96980657001/96980657001_180424037001_commonRedpoll-thumbnail.jpg?pubId=3840518800001&videoId=3843070012001"
    }
  ],
  "created_at": "2014-10-16T16:35:24.520Z"
}