This is a reference document for the FTP Batch Provisioning XML manifest file that you must create to use the Video Cloud FTP Batch Provisioning system. This document gives detailed specifications and code samples of the required XML elements and attributes that you must include in your XML manifest file. Also included are the specifications for performing various actions with the XML manifest file, such as uploading assets, creating or updating videos, re-encoding videos, and many other options.
Before using batch provisioning, be sure to read Best Practices for Using Batch Provisioning.
This topic includes the following sections:
Batch provisioning enables you to upload and provision multiple videos and playlists at once using an XML manifest file and the Video Cloud FTP server. Often, publishers use FTP Batch Provisioning to integrate their Content Management System (CMS) with video publishing in Video Cloud, or to perform initial ingestion of videos into the Video Cloud publishing services.
Ensure that you have fulfilled the following prerequisites before proceeding:
You can validate your XML manifest file against the FTP Batch Provisioning Document Type Definition (DTD). Download the Batch provisioning Document Type Definition (DTD).
Before validating your XML manifest file, it is very important to ensure that it is free of invalid or illegal characters, which need to be escaped. If left unfixed, these characters could cause failures in your upload process and lead to stranded or unavailable assets. A utility that checks for well-formed XML should catch these errors should they exist. The following shows how illegal characters in XML should be represented correctly in your XML manifest:
These restrictions apply to the values of XML attributes in the manifest; in the body of XML elements that permit CDATA, you can represent these characters directly. For example, compare how the phrase "Réné & moi" is represented in the <title name > attribute and in the CDATA within the <short-description> element:
<title name="Réné & Moi" refid="myVideo" active="TRUE" video-full-refid="asset2"> <short-description> <![CDATA[ Réné et moi remarquons qu'il est tellement romantique, de manière énigmatique, de se tenir debout sur la terrasse à Chichen Itza et d'observer la montée de la lune gibbeuse! ]]> </short-description> </title>
The following sections describe the structure of the XML manifest file, explaining required syntax and optional actions you can perform with the file and the FTP Batch Provisioning system.
Required. This first tag identifies the XML document type and always looks exactly like the following:
<?xml version="1.0" encoding="utf-8"?>
Required. This Video Cloud-specific tag marks the beginning of the upload manifest.
<publisher-upload-manifest publisher-id="101" preparer="3rd Street Video" report-success="true">
The publisher-upload-manifest tag uses the following attributes.
| Name | Required? | Description |
|---|---|---|
| publisher-id | Required | Identifies which publisher the described files are for. This makes sure that your videos end up in the correct account. You can find your publisher ID in the Video Cloud Studio by clicking Account Info > Profile. |
| preparer | Required | This attribute should contain identifying information about who submitted the manifest. This is especially helpful when a third party is preparing assets for a publisher and provisioning them directly to Video Cloud . |
| report-success | Optional | TRUE or FALSE. This setting specifies whether Brightcove should send an e-mail notification when the upload succeeds. The default is FALSE; unless you include this attribute and set it to TRUE, you will not receive any notification when your upload succeeds. |
The publisher-upload-manifest tag can include one or more of the following tags, each of which is described in detail in this document:
| Name | Description |
|---|---|
| notify | Address for notification e-mail [Optional] |
| callback | URL to post status callback by HTTP [Optional] |
| asset | Identify assets for upload [Optional] |
| title | Creating or updating videos [Optional] |
| manual-lineup | Creating or updating manual playlists [Optional] |
| automatic-lineup | Creating or updating smart playlists [Optional] |
Optional. The notify tag identifies where Brightcove will send the e-mail notification of success or failure. While this tag is not required, it is best practice to ensure that someone in your organization is notified if there are errors. You will receive notification only of failures, not successes, unless you have set the attribute report-success="true" in the publisher-upload-manifest tag. To send notification to multiple addresses, use a separate instance of this tag for each e-mail address. The e-mail notification will come from the address donotreply@brightcove.com; make sure that e-mails from that address can make it through your spam filter.
<notify email="you@example.com"/> <notify email="me@example.com"/>
The notify tag uses the following attribute:
| Name | Required? | Description |
|---|---|---|
| Required | Identifies one e-mail address to send upload notifications to. |
In addition to receiving notifications by e-mail, you can also use the callback tag to send upload notifications to a web page. The notification is sent in a POST to the URL you provide in the entity-url attribute of the callback tag. The POST includes:
referenceId=<the reference id provided in the manifest> id=<the id of the title, playlist, or asset in the database> entity=<VIDEO, LINEUP, or ASSET> action=<CREATE, DELETE, or UPDATE> status=<FAILED,SUCCESS> error=<an error message>
The status is always included in the callback post. In the event of a FAILED status, the other information may or may not be included in the callback post, depending on whether the information is available at the point of failure. See this example of how to use the HTTP callback feature in the FTP batch provisioning system, using PHP to create a log file from the data generated by FTP batch provisioning.
<callback entity-url="http://example.com/batch-callback.php"/>
| name | required? | description |
|---|---|---|
| entity-url | Required | Identifies one URL to post upload status notifications to. |
The following sections describe various actions that you might perform with your FTP Batch Provisioning XML manifest file. Within a single XML manifest file, you might perform several of the actions or simply one of the actions, depending on your content needs.
Optional. The asset tag describes a file that is being uploaded via the XML manifest file. Include a separate asset tag for each file being uploaded.
<asset filename="MyVideo.flv"
refid="asset1"
size="188812"
hash-code="a4ade1e2b09d517ff7360f91527639b3"
display-name="My Video (FLV)"
type="VIDEO_FULL"/>
The asset tag uses the following attributes:
| Name | Required? | Description |
|---|---|---|
| filename | Required | The name of the file as it appears on disk. Maximum length 125 characters. See Preparing Your Assets in Using FTP Batch Provisioning for details about valid file names. |
| refid | Required | A unique identifier so that a title can reference this asset from within the manifest file. This can be an ID used by your content management system. Use alphanumeric characters only. Maximum length 150 characters. |
| size | Optional | The numeric size of the file in bytes. You may need to convert from kilobytes or megabytes to get this number in bytes. Including the file size is optional (except for remote assets), but may help you detect and troubleshoot upload problems. The file size is required for remote assets. |
| encoding-rate | Optional | For multi-bitrate streaming renditions that you upload, the encoding rate in bits per second. For example, 150 kbps is specified as 150000. |
| frame-width | Optional | For multi-bitrate streaming renditions that you upload, the frame width of the video. |
| frame-height | Optional | For multi-bitrate streaming renditions that you upload, the frame height of the video. |
| hash-code | Optional | The MD5 checksum (hash code) of the file. Note that using an MD5 checksum is optional, but recommended. Checksums allow Video Cloud to validate that the file was transferred successfully. Therefore, using a checksum may help you detect and troubleshoot upload problems. For information about how to create a checksum for your files, see Creating Checksums for FTP Batch Provisioning. |
| display-name | Optional | A name for the file suitable for showing to the publisher in the Video Cloud Media module. If you don't set this attribute, the filename will be used for the display name. Not more than 100 characters. |
| encode-to | Optional | FLV or MP4. If present, encode this video file to the specified encoding. FLV will use the VP6 codec, while MP4 will use the H.264 codec. Brightcove recommends using MP4 (H.264). If this attribute is absent, the video file will not be transcoded. If you are using the reencode-from-new-source element to re-encode the video, this attribute is required in the asset element that provides the new source file. |
| encode-multiple | Optional | TRUE or FALSE. If TRUE, encode multiple renditions of this video file for multi-bitrate streaming. The default is FALSE, so unless this is set we will transcode to a single video asset. This attribute must be used in combination with encode-to. If you are using the reencode-from-new-source element to re-encode the video, this attribute is required in the asset element that provides the new source file. |
| h264-preserve-as-rendition | Optional | TRUE or FALSE. If TRUE, Video Cloud stores a copy of the original H.264 video file as a video asset. The H.264 file will be preserved as an additional rendition for multi-bitrate streaming. The default is FALSE. The source file must be a valid H.264 video. If TRUE, Video Cloud will create multiple renditions of the original file, and will preserve the original and use it as an additional rendition. This option can be useful for providing the highest possible video quality. This attribute must be used in combination with encode-to and encode-multiple="true". The source file must be a valid H.264 video. |
| h264-no-processing | Optional | TRUE or FALSE. If TRUE, allows an H.264 file to be uploaded and not transcoded. The H.264 file will be preserved as an additional rendition for multi-bitrate streaming. The default is FALSE. It cannot be used in combination with encode-to or any of the other transcode options. The source file must be a valid H.264 video. |
| type | Required | Identifies the type of asset for upload. The value must be one of the following uppercase strings: VIDEO_FULL - A VP6 Flash Video (FLV) or H.264 (MP4) encoded full length video. The FLV_FULL value is deprecated for the type attribute; use VIDEO_FULL instead. FLV_BUMPER - A VP6 Flash Video (FLV) or H.264 (MP4) encoded bumper video (maximum 15-sec. clip). THUMBNAIL - An image file used as a thumbnail in listings. VIDEO_STILL - A still image from the video (or a representative image from another source). BACKGROUND - A background image to use in video players. LOGO - A publisher logo image. LOGO_OVERLAY - An image used for branding over video. OTHER_IMAGE - Miscellaneous image type. |
If you are using remote assets, use the remote-asset tag instead of the asset tag to identify your assets. See Creating videos with remote video files for details about using remote assets and the remote-asset tag's attributes.
Optional. The title tag describes the videos you want to create or update. Use a separate title tag for each video that you want to include in your upload in your XML manifest.
<title name="My Title"
refid="title1"
active="TRUE"
start-date="01/01/2007 12:00 AM"
end-date="01/01/2007 12:00 AM"
video-full-refid="asset2"
thumbnail-refid="asset4"
video-still-refid="asset5"
flash-prebumper-refid="asset6"
shared="true"
economic-type="AD"
ad-keys=";key=value;key=value" >
<short-description>My short description.</short-description>
<long-description>My long description.</long-description>
<related-link-url>http://your-company.com/</related-link-url>
<related-link-text>Come learn about us!</related-link-text>
<tag>funny</tag>
<tag>entertaining</tag>
<logo-overlay
asset-refid="12345"
click-thru="http://www.example.com"
tooltip="Go to Example" alignment="bottom right" />
</title>
Title tags include a mix of attributes and child tags, which map closely to the fields found in the Media module's Edit Video dialog. Note, however, that you can set a video to always make an ad request by editing a video in the Video Cloud Studio, but you cannot do so using FTP batch provisioning.
| Name | Required? | Description |
|---|---|---|
| name | Required | The name of the video as it should appear in a player. Viewers will see this video name when browsing or searching. The name can be no more than 255 characters long. |
| refid | Required | A unique identifier so that lineups can reference this title element from within the manifest file. Maximum length 150 characters. |
| active | Optional | TRUE or FALSE. Specifies whether this video should be active as soon as it is created. If you do not set this attribute, its value will be the default: FALSE. |
| start-date | Optional | The primary scheduling start date and time for the video. The required format is MM/DD/YYYY HH:MM AM. For example: start-date="01/01/2008 12:00 AM". Note: The input in the upload manifest for the start date is Pacific time. However, once you have completed your upload, the start date displayed in the Media module will be Eastern time. |
| end-date | Optional | The primary scheduling end date and time for the video. The required format is MM/DD/YYYY HH:MM AM. For example: start-date="12/31/2008 12:00 AM". Note: The input in the upload manifest for the start date is Pacific time. However, once you have completed your upload, the end date displayed in the Media module will be Eastern time. |
| video-full-refid | Optional | The reference ID attribute of a full-length video file to include in this video. This reference ID could be either one previously entered into the system or one specified in an asset tag within the same manifest file. |
| thumbnail-refid | Optional | The reference ID parameter of a thumbnail asset. This reference ID could be either one previously entered into the system or one specified in an asset tag within the same manifest file. Do not use this attribute if you are also using the encode-to attribute for the corresponding video asset. When Video Cloud transcodes a video, a thumbnail image is automatically created. |
| video-still-refid | Optional | The reference ID parameter of a video still asset. This reference ID could be either one previously entered into the system or one specified in an asset tag within the same manifest file. Do not use this attribute if you are also using the encode-to attribute for the corresponding video asset. When Video Cloud transcodes a video, a video still image is automatically created. |
| flash-prebumper-refid | Optional | The reference ID parameter of a bumper video asset. This reference ID could be either one previously entered into the system or one specified in an asset tag within the same manifest file. |
| allow-viral-syndication | Optional | TRUE or FALSE. If FALSE, then viral distribution is not permitted for this video, and the "get code" and "share" buttons will be disabled in the player. The default is TRUE. |
| shared | Optional | TRUE or FALSE. Should this video be shared with affiliate accounts? If TRUE, you must also include one or more share-to-id child elements in the title element to specify the account IDs of the affiliates you are sharing with. Read about media sharing. |
| auto-accept-shared | Optional | TRUE or FALSE. If this video is to be shared with affiliate accounts, can the affiliates automatically accept it into their Video Cloud media library, rather than explicitly accepting it in the Video Cloud Studio Media module? This attribute has no effect unless both shared="TRUE" for this video and the affiliate has enabled automatic acceptance for the account that's the source of the shared video. Read about media sharing. |
| economic-type | Optional | One of the following values: FREE or AD. If no economic type value is specified, the video will default to AD; if the value is FREE, no ad requests will be made for this video. |
| ad-keys | Optional | A semi-colon separated string of key/value pairs, starting with a semi-colon. For example: ad-keys=";key=value;key=value;key=value" |
| overlay-update | Optional | TRUE or FALSE. If true, and if this video already exists, only the attributes and child elements of this title that you explicitly set will be modified. If false (the default), any attributes or child elements of this title that you do not explicitly set will be set to null. |
A title tag can contain the following child element tags.
| Name | Required? | Description |
|---|---|---|
| short-description | Required | A brief description of the video, up to 250 characters. Depending on the player template, viewers may see this description. The short description is also typically displayed in RSS feeds that include the video. |
| long-description | Optional | A longer description of the video, up to 5,000 characters. Viewers may see this description when browsing or searching in public search engines or web sites. |
| related-link-url | Optional | A related URL for the video. Maximum length 255 characters. |
| related-link-text | Optional | Text for the optional related link URL. Maximum length 255 characters. |
| custom-string-value | Optional | A String type custom metadata field. Use the name attribute for the field's name and the value attribute for the field's string value. Maximum length 1,024 characters. |
| custom-enum-value | Optional | An Enum type custom metadata field. Use the name attribute for the field's name and the value attribute for the field's string value. Maximum length 100 characters. |
| tag | Optional | One or more tags to assist in filtering and searching for the video, not more than 128 characters each. You can have no more than 1,200 tags per video. Tags can also help publishers filter videos in a smart playlist. You can use multiple instances of this element to associate several tags with a single video. Each tag must be contained in its own <tag> element. For example:
<tag>travel</tag> |
| rendition-refid | Optional | A reference ID for one rendition of this video for multi-bitrate streaming. This tag should only be used when assigning assets that do not require transcoding by Video Cloud. |
| share-to-id | Optional | If you are sharing this video and have set <title shared="true" >, you must include one or more share-to-id child elements in the title element to specify the Video Cloud account IDs of the accounts with which you are sharing the video. Read about media sharing. |
| logo-overlay | Optional | The collection of metadata for defining an image that will be positioned over the video window for branding and to drive traffic to a specified location. This tag uses the logo-overlay attributes. Read about logo overlays. |
Optional. You can use the XML manifest file to specify an image that will be positioned over the video window for branding and to drive traffic to a specified location, through the logo-overlay tag. Read more about logo overlays. The logo-overlay tag uses the following attributes:
| Name | Required? | Description |
|---|---|---|
| asset-refid | Required | The reference ID parameter of the logo overlay asset. This reference ID could be either one previously entered into the system or one specified in an asset tag within the same manifest file. |
| click-thru | Optional | The URL of the browser window to be opened when the logo overlay image is clicked. Maximum length 128 characters. |
| tooltip | Optional | The tooltip or alt tag to appear over the logo overlay image on rollover. Maximum length 128 characters. |
| alignment | Optional | The alignment of the logo overlay image within the video window. The valid values are one of "top left", "top right", "bottom left" or "bottom right". For example:
<alignment="top right"/> |
Optional. You can use the XML manifest file to direct Video Cloud to re-encode the video files for a video, while retaining all of the video's metadata. Use the reencode-from-existing-source element as a child of the top level publisher-upload-manifest element if you want to use the existing source file in your Video Cloud Media Library as the source for re-encoding; use the reencode-from-new-source element if you are supplying a new (possibly higher quality) source file with the XML manifest. Read complete information about re-encoding existing videos.
| Name | Description |
|---|---|
| reencode-from-existing-source | Identify a video to be re-encoded from its current source asset. |
| reencode-from-new-source | Identify a video to be re-encoded from a newly provided source, or from a source already in our system but not currently associated with this video |
| Name | Required? | Description |
|---|---|---|
| title-refid | Required | The reference ID of the video to be re-encoded |
| encode-to | Optional | FLV or MP4. If present, encode this video file to the specified encoding. FLV represents VP6, while MP4 represents H.264. If this attribute is absent, the publisher's default codec will be used. |
| encode-multiple | Optional | TRUE or FALSE. If TRUE, multiple renditions will be created for the video. If FALSE, only a single rendition will be created. If this attribute is absent, its value defaults to TRUE. |
| overwrite-images | Optional | TRUE or FALSE. If TRUE, the images for the re-encoded video (thumbnail and still) will be replaced by the new image captured during re-encoding. If FALSE, the video's existing images will remain. If this attribute is absent, its value defaults to FALSE. If the video does not have a thumbnail or a still associated with it, they will be created during the re-encode regardless of the value of this attribute. |
| preserve-source-as-rendition | Optional | TRUE or FALSE. If TRUE, Video Cloud will create multiple renditions of the original file, and will preserve the original to use as an additional rendition. If this attribute is absent, its value defaults to FALSE. |
| Name | Required? | Description |
|---|---|---|
| title-refid | Required | The reference ID of the video to be re-encoded |
| new-source-refid | Required | the reference ID of the asset to be used as the new source for the video to be re-encoded. This asset may appear in the same manifest as this reencode-from-existing-source element, or be an existing asset already in the Video Cloud system. |
| overwrite-images | Optional | TRUE or FALSE. If TRUE, the images for the re-encoded video (thumbnail and still) will be replaced by the new image captured during re-encoding. If FALSE, the video's existing images will remain. If this attribute is absent, its value defaults to FALSE. If the video does not have a thumbnail or a still associated with it, they will be created during the re-encode regardless of the value of this attribute. |
Optional. There are two types of playlist: manual and smart. Read more about Using Playlists.
You do not need to create any playlists using the XML manifest file; you can instead use the XML manifest file to simply upload assets, or assets and videos, and create your playlists using the Media module.
For a manual playlist, use the manual-lineup tag. Within the manual-lineup tag, use a series of title-refid tags to list each video that is to be included in the playlist.
<manual-lineup
name="My Manual Lineup"
refid="lineup1"
thumbnail-refid="asset4"> <title-refid>title1</title-refid>
<title-refid>title3</title-refid>
<title-refid>title137</title-refid>
</manual-lineup>
The manual-lineup tag uses a mix of attributes and child element tags which map closely to the fields found in the Media module's playlist creation form.
| Name | Required? | Description |
|---|---|---|
| name | Required | The name of the playlist as it should appear in players. Viewers will see this playlist name when browsing or searching. Maximum length 50 characters. |
| refid | Required | A unique identifier so that the playlist can be referenced later. Maximum length 150 characters. |
| thumbnail-refid | Optional | The refid attribute of a Thumbnail asset to include in this manual lineup. This reference ID could be either one previously entered into the system or one specified in an asset tag within the same manifest file. |
| overlay-update | Optional | TRUE or FALSE. If TRUE, and if this playlist already exists, only the attributes of this playlist that you explicitly set will be modified. If FALSE (the default), any attributes of this playlist that you do not explicitly set will be set to null. Note that you can't use overlay-update to append new videos to an existing playlist. If you want to add videos to an existing playlist, you need to include the entire list of videos, each in its own title-refid element. |
| Name | Required? | Description |
|---|---|---|
| title-refid | Required | The refid parameter of a video to include in this manual playlist. This reference ID could be either one previously entered into the system or one specified in an asset tag within the same manifest file. |
| description | Optional | A brief description of this playlist, not more than 250 characters. |
For smart playlists, use the automatic-lineup tag. You do not explicitly reference videos, but instead specify how to order the videos, using the type attribute. You can also filter videos using the tag-filter attribute and the title-tag child element.
<automatic-lineup name="My Automatic Lineup"
refid="lineup2"
type="NEWEST_TO_OLDEST"
tag-filter="AND"
title-limit="50"
thumbnail-refid="asset4">
<title-tag>sporty</title-tag>
</automatic-lineup>
The automatic-lineup element has a mix of attributes and sub-element tags which map closely to the fields found in the Media module's playlist creation form.
| Name | Required? | Description |
|---|---|---|
| title-tag | Optional | You can use this element to filter the videos to be included in this automatic lineup. Use a separate title-tag element for each tag you want to use for filtering titles. See tag-filter for information about how to handle filtering with more than one tag. For example:
<automatic-lineup name="My Automatic Lineup" |
| description | Optional | A brief description of this playlist, not more than 250 characters. |
Optional. You can add cue points to a video using the cuepoint XML element in your FTP Batch Provisioning XML manifest file. A cue point is a marker at a precise time point in the duration of a video. You can use cue points to trigger mid-roll ads or to separate chapters or scenes in a long-form video. Read more about Adding Cue Points to Videos.
The cuepoint tag is a top-level tag that you use to set a cue point for a video. It has an optional child tag, metadata. The metadata child tag can contain CDATA or a string to provide information about the cue point.
<cuepoint name="My Cue" type="CODE" time="500000" video-refid="video001" />
<cuepoint name="My Other Cue" type="AD" time="50000" video-refid="video001" />
<cuepoint name="My Third Cue" type="AD" time="120000" video-refid="video001">
<metadata>Something interesting about this cue point.</metadata>
</cuepoint>
<cuepoint name="My Fourth Cue" type="AD" time="270000" video-refid="video055">
<metadata>
<![CDATA[
This is a multi-line
Set of metadata
]]>
</metadata>
</cuepoint>
| Name | Required? | Description |
|---|---|---|
| name | Required | A name for the cue point, so that you can refer to it. Maximum length 128 characters. |
| video-refid | Required | The reference ID of the video to which this cue point applies. |
| time | Required | The time of the cue point, measured in milliseconds from the beginning of the video. |
| type | Required | The type of cue point: one of AD or CODE. An AD cue point is used to trigger mid-roll ad requests. A CODE cue point causes an event that you can listen for and respond to and can indicate a chapter or scene break in the video. |
| metadata | Optional | A string that can be passed along with a CODE cue point. Maximum length 512 characters. |
A cuepoint tag can optionally include a single metadata child element. The metadata element encloses a string that can be passed along with the cue point.
Optional. You can also use the FTP batch provisioning system to delete assets, videos, playlists, or cue points from your account. Warning: An asset cannot be deleted if it is referenced by a video, and a video can not be deleted if it is referenced by a playlist.
<delete-asset refid="RandomAssetsRefID"/> <delete-title refid="RandomTitlesRefID"/> <delete-lineup refid="RandomLineupsRefID"/> <delete-cuepoint video-refid="video0001" id="0123456789"/>
Use the following tags, setting the refid attribute to the refid of the asset, video, or playlist, or the id of the cue point, that you want to delete.
| Name | Required? | Description |
|---|---|---|
| delete-asset | Optional | Deletes the asset with the refid specified by the refid attribute. |
| delete-title | Optional | Deletes the video with the refid specified by the refid attribute. |
| delete-lineup | Optional | Deletes the playlist with the refid specified by the refid attribute. |
| delete-cuepoint | Optional | Deletes the cue point with the id specified by the id attribute. |
Required. The last tag marks the end of the XML manifest file, indicating that the entire manifest is present.
</publisher-upload-manifest>
In addition to this document, Brightcove provides the following documentation to help you understand and use the Video Cloud FTP batch provisioning feature: