Skip to content
Alban LEROUX edited this page Sep 12, 2011 · 1 revision

Media RSS Module - RSS 2.0 Module

"Media RSS" Specification Version 1.1.2

An RSS module that supplements the <enclosure> element capabilities of RSS 2.0 to allow for more robust media syndication.

Change Notes

12/01/2004 - Created

02/21/2005 - Major consolidation of all requested changes: [1.0.0]

  • Added <media:group> element for grouping <media:content> objects.
  • Added /framerate/, /height/, /width/ attributes to media:content.
  • Added additional type of /expression/ for continuous streams.
  • Added <media:adult> element to distinguish content of an adult nature.
  • Added <media:title> element.
  • Modified to have a /url/ attribute for better module consistency.
  • Added /scheme/ attribute to <media:category> to allow specifying categorization scheme.
  • Added /label/ attribute to <media:category> for a human readable label.
  • Added <media:hash> element for media binary hashing.
  • Added <media:player> element and removed /playerUrl/ attributes from <media:content>.
  • Overhaul of <media:people> to become <media:credit>.
  • Added /type/ attribute to <media:text> to distinguish formatting of text.
  • Improved descriptions of various elements and attributes.

08/22/2005 - Improved global syndication capabilities: [1.1.0]

  • Corrected spelling mistakes.
  • Add /lang/ attributes to media:text and media:content.
  • Deprecated <media:adult>, and added <media:rating> as a replacement.
  • Modified <media:credit> to give more flexibility to represent things other than people or companies.
  • Added <media:description> element.
  • Added /medium/ attribute to <media:content> to explicitly determine what type of media is expressed.
  • Added /channels/, /samplingrate/ attributes to <media:content>.
  • Added <media:restriction> element.
  • Added <media:keywords> element.
  • Added a "Best Practices" section to encourage use of the Feed History module, and Dublin Core's expiration capability.
  • Add time code information to <media:thumbnail> and <media:text>.

10/22/2005 - Minor improvements: [1.1.1]

  • Added capability for elements to appear at the <channel> level.
  • Flushed out <media:restriction> to allow explicit global relationships to be expressed.

03/12/2008 - Namespace corrections: [1.1.2]

  • Added trailing slash to namespace
Namespace declaration

The namespace for Media RSS is defined to be: http://search.yahoo.com/mrss/

For example:

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">

NOTE: There is a trailing slash in the namespace, although there has been confusion around this in earlier versions.

Description

"Media RSS" is a new RSS module that supplements the enclosure capabilities of RSS 2.0. RSS enclosures are already being used to syndicate audio files and images. Media RSS extends enclosures to handle other media types, such as short films or TV, as well as provide additional metadata with the media. Media RSS enables content publishers and bloggers to syndicate multimedia content such as TV and video clips, movies, images, and audio.

Primary Elements

<media:group>

<media:group> is a sub-element of <item>. It allows grouping of <media:content> elements that are effectively the same content, yet different representations. For instance: the same song recorded in both the WAV and MP3 format. It's an optional element that must only be used for this purpose.

<media:content>

<media:content> is a sub-element of either <item> or <media:group>. Media objects that are not the same content should not be included in the same <media:group> element. The sequence of these items implies the order of presentation. While many of the attributes appear to be audio/video specific, this element can be used to publish any type of media. It contains 14 attributes, most of which are optional.

    <media:content 
           url="http://www.foo.com/movie.mov" 
           fileSize="12216320" 
           type="video/quicktime"
           medium="video"
           isDefault="true" 
           expression="full" 
           bitrate="128" 
           framerate="25"
           samplingrate="44.1"
           channels="2"
           duration="185" 
           height="200"
           width="300" 
           lang="en" />

/url/ should specify the direct url to the media object. If not included, a <media:player> element must be specified.

/fileSize/ is the number of bytes of the media object. It is an optional attribute.

/type/ is the standard MIME type of the object. It is an optional attribute.

/medium/ is the type of object (image | audio | video | document | executable). While this attribute can at times seem redundant if /type/ is supplied, it is included because it simplifies decision making on the reader side, as well as flushes out any ambiguities between MIME type and object type. It is an optional attribute.

/isDefault/ determines if this is the default object that should be used for the <media:group>. There should only be one default object per <media:group>. It is an optional attribute.

/expression/ determines if the object is a sample or the full version of the object, or even if it is a continuous stream (sample | full | nonstop). Default value is 'full'. It is an optional attribute.

/bitrate/ is the kilobits per second rate of media. It is an optional attribute.

/framerate/ is the number of frames per second for the media object. It is an optional attribute.

/samplingrate/ is the number of samples per second taken to create the media object. It is expressed in thousands of samples per second (kHz). It is an optional attribute.

/channels/ is number of audio channels in the media object. It is an optional attribute.

/duration/ is the number of seconds the media object plays. It is an optional attribute.

/height/ is the height of the media object. It is an optional attribute.

/width/ is the width of the media object. It is an optional attribute.

/lang/ is the primary language encapsulated in the media object. Language codes possible are detailed in RFC 3066. This attribute is used similar to the /xml:lang/ attribute detailed in the XML 1.0 Specification (Third Edition). It is an optional attribute.

These optional attributes, along with the optional elements below, contain the primary metadata entries needed to index and organize media content. Additional supported attributes for describing images, audio, and video may be added in future revisions of this document.

Note: While both <media:content> and <media:group> have no limitations on the number of times they can appear, the general nature of RSS should be preserved: an <item> represents a "story". Simply stated, this is similar to the blog style of syndication. However, if one is using this module to strictly publish media, there should be one <item> element for each media object/group. This is to allow for proper attribution for the origination of the media content through the <link> element. It also allows the full benefit of the other RSS elements to be realized.

Optional Elements

The following elements are optional and may appear as sub-elements of <channel>, <item>, <media:content> and/or <media:group>.

When an element appears at a shallow level, such as <channel> or <item>, it means that the element should be applied to every media object within its scope.

Duplicated elements appearing at deeper levels of the document tree have higher priority over other levels. For example, <media:content> level elements are favored over <item> level elements. The priority level is listed from strongest to weakest: <media:content>, <media:group>, <item>, <channel>.

<media:adult>

[NOTE: This is deprecated, and has been replaced with the more flexible <media:rating>]

<media:rating>

This allows the permissible audience to be declared. If this element is not included, it assumes that no restrictions are necessary. It has one optional attribute.

           <media:rating scheme="urn:simple">adult</media:rating>
           <media:rating scheme="urn:icra">r (cz 1 lz 1 nz 1 oz 1 vz 1)</media:rating>
           <media:rating scheme="urn:mpaa">pg</media:rating>
           <media:rating scheme="urn:v-chip">tv-y7-fv</media:rating>

/scheme/ is the URI that identifies the rating scheme. It is an optional attribute. If this attribute is not included, the default scheme is urn:simple (adult | nonadult).

<media:title>

The title of the particular media object. It has 1 optional attribute.

    <media:title type="plain">The Judy's - The Moo Song</media:title>

/type/ specifies the type of text embedded. Possible values are either 'plain' or 'html'. Default value is 'plain'. All html must be entity-encoded. It is an optional attribute.

<media:description>

Short description describing the media object typically a sentence in length. It has 1 optional attribute.

    <media:description type="plain">This was some really bizarre band I listened to as a young lad.</media:description>

/type/ specifies the type of text embedded. Possible values are either 'plain' or 'html'. Default value is 'plain'. All html must be entity-encoded. It is an optional attribute.

<media:keywords>

Highly relevant keywords describing the media object with typically a maximum of ten words. The keywords and phrases should be comma delimited.

    <media:keywords>kitty, cat, big dog, yarn, fluffy</media:keywords>

<media:thumbnail>

Allows particular images to be used as representative images for the media object. If multiple thumbnails are included, and time coding is not at play, it is assumed that the images are in order of importance. It has 1 required attribute and 3 optional attributes.

    <media:thumbnail url="http://www.foo.com/keyframe.jpg" width="75" height="50" time="12:05:01.123" />

/url/ specifies the url of the thumbnail. It is a required attribute.

/height/ specifies the height of the thumbnail. It is an optional attribute.

/width/ specifies the width of the thumbnail. It is an optional attribute.

/time/ specifies the time offset in relation to the media object. Typically this is used when creating multiple keyframes within a single video. The format for this attribute should be in the DSM-CC's Normal Play Time (NTP) as used in RTSP [RFC 2326 3.6 Normal Play Time http://www.ietf.org/rfc/rfc2326.txt]. It is an optional attribute.

Notes:

NTP has a second or subsecond resolution. It is specified as H:M:S.h (npt-hhmmss) or S.h (npt-sec), where H=hours, M=minutes, S=second and h=fractions of a second.

A possible alternative to NTP would be SMPTE. It is believed that NTP is simpler and easier to use.

<media:category>

Allows a taxonomy to be set that gives an indication of the type of media content, and its particular contents. It has 2 optional attributes.

    <media:category scheme="http://search.yahoo.com/mrss/category_
    schema">music/artist/album/song</media:category>

    <media:category scheme="http://dmoz.org" label="Ace Ventura - Pet 
    Detective">Arts/Movies/Titles/A/Ace_Ventura_Series/Ace_Ventura_
    -_Pet_Detective</media:category>

    <media:category scheme="urn:flickr:tags">ycantpark 
    mobile</media:category>

/scheme/ is the URI that identifies the categorization scheme. It is an optional attribute. If this attribute is not included, the default scheme is 'http://search.yahoo.com/mrss/category_schema'.

/label/ is the human readable label that can be displayed in end user applications. It is an optional attribute.

<media:hash>

This is the hash of the binary media file. It can appear multiple times as long as each instance is a different /algo/. It has 1 optional attribute.

    <media:hash algo="md5">dfdec888b72151965a34b4b59031290a</media:hash>

/algo/ indicates the algorithm used to create the hash. Possible values are 'md5' and 'sha-1'. Default value is 'md5'. It is an optional attribute.

<media:player>

Allows the media object to be accessed through a web browser media player console. This element is required only if a direct media /url/ attribute is not specified in the <media:content> element. It has 1 required attribute, and 2 optional attributes.

    <media:player url="http://www.foo.com/player?id=1111" height="200" width="400" />

/url/ is the url of the player console that plays the media. It is a required attribute.

/height/ is the height of the browser window that the /url/ should be opened in. It is an optional attribute.

/width/ is the width of the browser window that the /url/ should be opened in. It is an optional attribute.

<media:credit>

Notable entity and the contribution to the creation of the media object. Current entities can include people, companies, locations, etc. Specific entities can have multiple roles, and several entities can have the same role. These should appear as distinct <media:credit> elements. It has 2 optional attributes.

    <media:credit role="producer" scheme="urn:ebu">entity name</media:credit>

role specifies the role the entity played. Must be lowercase. It is an optional attribute.

/scheme/ is the URI that identifies the role scheme. It is an optional attribute. If this attribute is not included, the default scheme is 'urn:ebu'. See: European Broadcasting Union Role Codes.

Example roles:

    actor
    anchor person
    author
    choreographer
    composer
    conductor
    director
    editor
    graphic designer     
    grip
    illustrator
    lyricist
    music arranger
    music group
    musician
    orchestra
    performer
    photographer
    producer
    reporter
    vocalist

Additional roles: European Broadcasting Union Role Codes http://www.ebu.ch/en/technical/metadata/specifications/role_codes.php

<media:copyright>

Copyright information for media object. It has 1 optional attribute.

    <media:copyright url="http://blah.com/additional-info.html">2005 FooBar Media</media:copyright>

/url/ is the url for a terms of use page or additional copyright information. If the media is operating under a Creative Commons license, the Creative Commons module should be used instead. It is an optional attribute.

<media:text>

Allows the inclusion of a text transcript, closed captioning, or lyrics of the media content. Many of these elements are permitted to provide a time series of text. In such cases, it is encouraged, but not required, that the elements be grouped by language and appear in time sequence order based on the /start/ time. Elements can have overlapping /start/ and /end/ times. It has 4 optional attributes.

    <media:text type="plain" lang="en" start="00:00:03.000" 
    end="00:00:10.000"> Oh, say, can you see</media:text>
    <media:text type="plain" lang="en" start="00:00:10.000" 
    end="00:00:17.000">By the dawn's early light</media:text>

/type/ specifies the type of text embedded. Possible values are either 'plain' or 'html'. Default value is 'plain'. All html must be entity-encoded. It is an optional attribute.

/lang/ is the primary language encapsulated in the media object. Language codes possible are detailed in RFC 3066. This attribute is used similar to the xml:lang attribute detailed in the XML 1.0 Specification (Third Edition). It is an optional attribute.

/start/ specifies the start time offset that the text starts being relevant to the media object. An example of this would be for closed captioning. It uses the NTP time code format (see: the time attribute used in <media:thumbnail>). It is an optional attribute.

/end/ specifies the end time that the text is relevant. If this attribute is not provided, and a /start/ time is used, it is expected that the end time is either the end of the clip or the start of the next <media:text> element.

<media:restriction>

Allows restrictions to be placed on the aggregator rendering the media in the feed. Currently, restrictions are based on distributor (uri) and country codes. This element is purely informational and no obligation can be assumed or implied. Only one <media:restriction> element of the same /type/ can be applied to a media object - all others will be ignored. Entities in this element should be space separated. To allow the producer to explicitly declare his/her intentions, two literals are reserved: 'all', 'none'. These literals can only be used once. This element has 1 required attribute, and 1 optional attribute (with strict requirements for its exclusion).

    <media:restriction relationship="allow" type="country">au us</media:restriction>

/relationship/ indicates the type of relationship that the restriction represents (allow | deny). In the example above, the media object should only be syndicated in Australia and the United States. It is a required attribute.

Note: If the "allow" element is empty and the type is relationship is "allow", it is assumed that the empty list means "allow nobody" and the media should not be syndicated.

A more explicit method would be:

    <media:restriction relationship="allow" type="country">au us</media:restriction>

/type/ specifies the type of restriction (country | uri) that the media can be syndicated. It is an optional attribute; however can only be excluded when using one of the literal values "all" or "none".

"country" allows restrictions to be placed based on country code. [ISO 3166 http://www.iso.org/iso/en/prods-services/iso3166ma/index.html]

"uri" allows restrictions based on URI. Examples: urn:apple, http://images.google.com, urn:yahoo, etc.

Best Practices

The following are encouraged "best practices" when using Media RSS:

If your feed is not an "incremental" in the traditional RSS sense, but rather an entire snapshot of all media available, please take note of the <fh:incremental> element. This element when set to "false" correctly informs the RSS reader that the current feed replaces the previously fetched feed.

If you prefer to syndicate media more along the lines of traditional RSS, this specification also allows you to daisy chain multiple feeds together to compose a history of media that is available on your site.

To the best of your ability, media that is scheduled to expire after a given time should be duly noted through Dublin Core's <dcterms:valid> element.

Examples

  1. A recently created movie, using the RSS 2.0 element and without the use of the Media RSS module.

    <title>Title of page</title> http://www.foo.com Description of page <title>Story about something</title> http://www.foo.com/item1.htm
  2. A movie review with a trailer, using a Creative Commons license.

    <title>My Movie Review Site</title> http://www.foo.com I review movies. <title>Movie Title: Is this a good movie?</title> http://www.foo.com/item1.htm http://www.creativecommons.org/licenses/by-nc/1.0 nonadult
  3. A music video with a link to a player window, and additional metadata about the video, including expiration date.

    <title>Music Videos 101</title> http://www.foo.com Discussions of great videos <title>The latest video from an artist</title> http://www.foo.com/item1.htm dfdec888b72151965a34b4b59031290a producer's name artist's name music/artist name/album/song Oh, say, can you see, by the dawn's early light nonadult start=2002-10-13T09:00+01:00; end=2002-10-17T17:00+01:00; scheme=W3C-DTF
  4. Several different songs that relate to the same topic.

    <title>Song Site</title> http://www.foo.com Discussion on different songs <title>These songs make me think about blah</title> http://www.foo.com/item1.htm member of band1 music/band1/album/song nonadult member of band2 music/band2/album/song nonadult member of band3 music/band3/album/song nonadult
  5. Same song with multiple files at different bitrates and encodings. (Bittorrent example as well)

    <title>Song Site</title> http://www.foo.com Songs galore at different bitrates <title>Cool song by an artist</title> http://www.foo.com/item1.htm band member 1 band member 2 music/artist name/album/song nonadult
Acknowledgements

Thank you to everyone who has contributed to this specification, and to all those that sent suggestions and corrections. The Yahoo! Group rss-media has been instrumental in helping transform the initial Media RSS proposal into a working specification. While there have been many helpful individuals from this community, special thanks go to Danny Ayers, Marc Canter, Lucas Gonze, Vadim Zaliva, Greg Smith, Robert Sayre, Suzan Foster, Erwin van Hunen, Greg Gershman, Jennifer Kolar, Bill Kearney, and Andreas Haugstrup Pedersen.

On the Yahoo! team: David Hall, John Thrall, Eckart Walther, Jeremy Zawodny, Andy Volk, and Bradley Horowitz.

On the Google team: David Marwood and Peter Chane.


Copyright © 2009 Yahoo! All rights reserved.


« index

Clone this wiki locally