Spec: Media RSS - simplepie/simplepie-ng GitHub Wiki

Editor's Note: This is version 1.5.1 of the Media RSS specification, a namespace for RSS 2.0 published on Dec. 11, 2009. The current version always will be available at this link.

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

Table of Contents

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.

Change Notes

2004-12-01: Created

  • Draft specification.

2005-02-21: 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 <media:thumbnail> 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.

2005-08-22: 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>.

2005-10-22: 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.

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

  • Added trailing slash to namespace.

2009-09-09: Added a few more elements: [1.5.0]

  • Added <media:community> element for adding community content like ratings, tags, etc.
  • Added <media:comments> element for adding user comments.
  • Added <media:embed> element for adding player-specific embed code.
  • Added <media:responses> element for adding media responses to a particular media object.
  • Added <media:backLinks> element for adding links pointing to a media object.
  • Added <media:status> element for maintaining the state of a feed -- whether the feed is still active, or it has been removed/blocked by the publisher.
  • Added <media:license> element for specifying the licensing information of a media object.
  • Added <media:price> element for specifying the pricing information of a media object.
  • Added <media:subTitle> element for specifying the subtitles of a media object.
  • Added <media:peerLink> element for specifying the P2P link to a media object.
  • Added <media:location> element for specifying various locations conforming to geoRSS.
  • Added <media:rights> element for specifying the rights information about a media object.
  • Added <media:scenes> element for including scene specific information from a media object.
  • Added option for allowing/denying sharing of a media object in <media:restriction> element.

2009-12-11: Moved to the RSS Advisory Board: [1.5.1]

  • Updated copyright.

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.

Editor's Note: Yahoo! wasn't always the best caretaker of the Media RSS specification. Over its history, the XML Namespace URI has been http://search.yahoo.com/mrss/, http://search.yahoo.com/mrss, and http://video.search.yahoo.com/mrss. Because of this, different feeds refer to different variations of the namespace. This caused a lot of issues with SimplePie “OG” because the parsing of different feed types was so tightly-coupled with their XML Namespace URIs.

Primary Elements

<media:group>

media:group is a sub-element of . 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"
    hannels="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 one 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 one 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 10 words. The keywords and phrases should be comma-delimited.

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

<media:thumbnails>

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 one required attribute and three 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]. 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 two 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 one 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 one required attribute and two 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 two optional attributes.

<media:credit role="producer" scheme="urn:ebu">entity name</media:credit>
<media:credit role="owner" scheme="urn:yvs">copyright holder of the entity</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 and possible values for this attribute are: urn:ebu, urn:yvs. The default scheme is urn:ebu. The list of roles supported under urn:ebu scheme can be found at European Broadcasting Union Role Codes. The roles supported under urn:yvs scheme are: uploader, owner.

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.

<media:copyright>

Copyright information for the media object. It has one 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 four 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), country codes and sharing of a media object. 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 one required attribute and one 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 of 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, sharing) 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]

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

sharing allows restriction on sharing.

deny means content cannot be shared -- for example via <embed> tags. If the sharing type is not present, the default functionality is to allow sharing. For example:

<media:restriction type="sharing" relationship="deny" />

<media:community>

This element stands for the community related content. This allows inclusion of the user perception about a media object in the form of view count, ratings and tags.

<media:community>
    <media:starRating average="3.5" count="20" min="1" max="10" />
    <media:statistics views="5" favorites="5" />
    <media:tags>news: 5, abc:3, reuters</media:tags>
</media:community>

<starRating> This element specifies the rating-related information about a media object. Valid attributes are average, count, min and max.

<statistics> This element specifies various statistics about a media object like the view count and the favorite count. Valid attributes are views and favorites.

<tags> This element contains user-generated tags separated by commas in the decreasing order of each tag's weight. Each tag can be assigned an integer weight in tag_name:weight format. It's up to the provider to choose the way weight is determined for a tag; for example, number of occurences can be one way to decide weight of a particular tag. Default weight is 1.

<media:comments>

Allows inclusion of all the comments a media object has received.

<media:comments>
    <media:comment>comment1</media:comment>
    <media:comment>comment2</media:comment>
    <media:comment>comment3</media:comment>
</media:comments>

<media:embed>

Sometimes player-specific embed code is needed for a player to play any video. <media:embed> allows inclusion of such information in the form of key-value pairs.

<media:embed url="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.2" width="512" height="323">
    <media:param name="type">application/x-shockwave-flash</media:param>
    <media:param name="width">512</media:param>
    <media:param name="height">323</media:param>
    <media:param name="allowFullScreen">true</media:param>
    <media:param name="flashVars">
        id=7809705&amp;vid=2666306&amp;lang=en-us&amp;intl=us&amp;thumbUrl=http%3A//us.i1.yimg.com/us.yimg.com/i/us/sch/cn/video06/2666306_rndf1e4205b_19.jpg
    </media:param>
</media:embed>

<media:responses>

Allows inclusion of a list of all media responses a media object has received.

<media:responses>
    <media:response>response1</media:response>
    <media:response>response2</media:response>
    <media:response>response3</media:response>
</media:responses>

<media:backLinks>

Allows inclusion of all the URLs pointing to a media object.

<media:backLinks>
    <media:backLink>http://www.backlink1.com</media:backLink>
    <media:backLink>http://www.backlink2.com</media:backLink>
    <media:backLink>http://www.backlink3.com</media:backLink>
</media:backLinks>

<media:status>

Optional tag to specify the status of a media object -- whether it's still active or it has been blocked/deleted.

<media:status state="blocked" reason="http://www.reasonforblocking.com" />

state can have values active, blocked or deleted. active means a media object is active in the system, blocked means a media object is blocked by the publisher, deleted means a media object has been deleted by the publisher.

reason is a reason explaining why a media object has been blocked/deleted. It can be plain text or a URL.

<media:price>

Optional tag to include pricing information about a media object. If this tag is not present, the media object is supposed to be free. One media object can have multiple instances of this tag for including different pricing structures. The presence of this tag would mean that media object is not free.

<media:price type="rent" price="19.99" currency="EUR" />
<media:price type="package" info="http://www.dummy.jp/package_info.html" price="19.99" currency="EUR" />
<media:price type="subscription" info="http://www.dummy.jp/subscription_info" price="19.99" currency="EUR" />

type Valid values are rent, purchase, package, or subscription. If nothing is specified, then the media is free.

info if the type is package or subscription, then info is a URL pointing to package or subscription information. This is an optional attribute.

price is the price of the media object. This is an optional attribute.

currency -- use ISO 4217 for currency codes. This is an optional attribute.

<media:license>

Optional link to specify the machine-readable license associated with the content.

<media:license type="text/html" href="http://creativecommons.org/licenses/by/3.0/us/">Creative Commons Attribution 3.0 United States License</media:license>

<media:subTitle>

Optional element for subtitle/CC link. It contains type and language attributes. Language is based on RFC 3066. There can be more than one such tag per media element, for example one per language. Please refer to Timed Text spec - W3C for more information on Timed Text and Real Time Subtitling.

<media:subTitle type="application/smil" lang="en-us" href="http://www.example.org/subtitle.smil" />

<media:peerLink>

Optional element for P2P link.

<media:peerLink type="application/x-bittorrent" href="http://www.example.org/sampleFile.torrent" />

For a valid Media RSS item, at least one of the following links is required:

  • <media:content>
  • <media:player>
  • <media:peerLink>
  • <media:location>

Optional element to specify geographical information about various locations captured in the content of a media object. The format conforms to GeoRSS.

<media:location description="My house" start="00:01" end="01:00">
    <georss:where>
        <gml:Point>
            <gml:pos>35.669998 139.770004</gml:pos>
        </gml:Point>
    </georss:where>
</media:location>

description description of the place whose location is being specified.

start time at which the reference to a particular location starts in the media object.

end time at which the reference to a particular location ends in the media object.

<media:rights>

Optional element to specify the rights information of a media object.

<media:rights status="userCreated" />
<media:rights status="official" />

status is the status of the media object saying whether a media object has been created by the publisher or they have rights to circulate it. Supported values are userCreated and official.

<media:scenes>

Optional element to specify various scenes within a media object. It can have multiple child <media:scene> elements, where each <media:scene> element contains information about a particular scene. <media:scene> has the optional sub-elements <sceneTitle>, <sceneDescription>, <sceneStartTime>, and <sceneEndTime>, which contains title, description, start and end time of a particular scene in the media, respectively.

<media:scenes>
    <media:scene>
        <sceneTitle>sceneTitle1</sceneTitle>
        <sceneDescription>sceneDesc1</sceneDescription>
        <sceneStartTime>00:15</sceneStartTime>
        <sceneEndTime>00:45</sceneEndTime>
    </media:scene>
    <media:scene>
        <sceneTitle>sceneTitle2</sceneTitle>
        <sceneDescription>sceneDesc2</sceneDescription>
        <sceneStartTime>00:57</sceneStartTime>
        <sceneEndTime>01:45</sceneEndTime>
    </media:scene>
</media:scenes>

Best Practices

The following are encouraged best practices when using Media RSS:

Feed History Specification

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.

Dublin Core

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

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

<rss version="2.0">
    <channel>
        <title>Title of page</title>
        <link>http://www.foo.com</link>
        <description>Description of page</description>
        <item>
            <title>Story about something</title>
            <link>http://www.foo.com/item1.htm</link>
            <enclosure url="http://www.foo.com/file.mov" length="320000" type="video/quicktime" />
        </item>
    </channel>
</rss>

A movie review with a trailer, using a Creative Commons license.

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"
    xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
  
    <channel>
        <title>My Movie Review Site</title>
        <link>http://www.foo.com</link>
        <description>I review movies.</description>
        <item>
            <title>Movie Title: Is this a good movie?</title>
            <link>http://www.foo.com/item1.htm</link>
            <media:content url="http://www.foo.com/trailer.mov" fileSize="12216320" type="video/quicktime" expression="sample" />
            <creativeCommons:license>
                http://www.creativecommons.org/licenses/by-nc/1.0
            </creativeCommons:license>
            <media:rating>nonadult</media:rating>
        </item>
    </channel>
</rss>

A music video with a link to a player window, and additional metadata about the video, including expiration date.

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"
    xmlns:dcterms="http://purl.org/dc/terms/">
  
    <channel>
        <title>Music Videos 101</title>
        <link>http://www.foo.com</link>
        <description>Discussions of great videos</description>
        <item>
            <title>The latest video from an artist</title>
            <link>http://www.foo.com/item1.htm</link>
            <media:content url="http://www.foo.com/movie.mov" fileSize="12216320" type="video/quicktime" expression="full">
                <media:player url="http://www.foo.com/player?id=1111" height="200" width="400" />
                <media:hash algo="md5">dfdec888b72151965a34b4b59031290a</media:hash>
                <media:credit role="producer">producer's name</media:credit>
                <media:credit role="artist">artist's name</media:credit>
                <media:category scheme="http://blah.com/scheme">
                    music/artistname/album/song
                </media:category>
                <media:text type="plain">
                    Oh, say, can you see, by the dawn's early light
                </media:text>
                <media:rating>nonadult</media:rating>
                <dcterms:valid>
                    start=2002-10-13T09:00+01:00;
                    end=2002-10-17T17:00+01:00;
                    scheme=W3C-DTF
                </dcterms:valid>
            </media:content>
        </item>
    </channel>
</rss>

Several different songs that relate to the same topic.

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title>Song Site</title>
        <link>http://www.foo.com</link>
        <description>Discussion on different songs</description>
        <item>
            <title>These songs make me think about blah</title>
            <link>http://www.foo.com/item1.htm</link>
            <media:content url="http://www.foo.com/band1-song1.mp3" fileSize="1000" type="audio/mpeg" expression="full">
                <media:credit role="musician">member of band1</media:credit>
                <media:category>music/band1/album/song</media:category>
                <media:rating>nonadult</media:rating>
            </media:content>
            <media:content url="http://www.foo.com/band2-song1.mp3" fileSize="2000" type="audio/mpeg" expression="full">
                <media:credit role="musician">member of band2</media:credit>
                <media:category>music/band2/album/song</media:category>
                <media:rating>nonadult</media:rating>
            </media:content>
            <media:content url="http://www.foo.com/band3-song1.mp3" fileSize="1500" type="audio/mpeg" expression="full">
                <media:credit role="musician">member of band3</media:credit>
                <media:category>music/band3/album/song</media:category>
                <media:rating>nonadult</media:rating>
            </media:content>
        </item>
    </channel>
</rss>

Same song with multiple files at different bitrates and encodings. (Bittorrent example as well)

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title>Song Site</title>
        <link>http://www.foo.com</link>
        <description>Songs galore at different bitrates</description>
        <item>
            <title>Cool song by an artist</title>
            <link>http://www.foo.com/item1.htm</link>
            <media:group>
                <media:content url="http://www.foo.com/song64kbps.mp3"
                    fileSize="1000" bitrate="64" type="audio/mpeg"
                    isDefault="true" expression="full" />
  
                <media:content url="http://www.foo.com/song128kbps.mp3"
                    fileSize="2000" bitrate="128" type="audio/mpeg"
                    expression="full" />
  
                <media:content url="http://www.foo.com/song256kbps.mp3"
                    fileSize="4000" bitrate="256" type="audio/mpeg"
                    expression="full" />
  
                <media:content url="http://www.foo.com/song512kbps.mp3.torrent"
                    fileSize="8000" type="application/x-bittorrent;enclosed=audio/mpeg"
                    expression="full" />
  
                <media:content url="http://www.foo.com/song.wav"
                    fileSize="16000" type="audio/x-wav" expression="full" />
  
                <media:credit role="musician">band member 1</media:credit>
                <media:credit role="musician">band member 2</media:credit>
                <media:category>music/artist name/album/song</media:category>
                <media:rating>nonadult</media:rating>
            </media:group>
        </item>
    </channel>
</rss>

Example using all the new elements added in Media RSS version 1.5.0.

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"
    xmlns:georss="http://www.georss.org/georss"
    xmlns:gml="http://www.opengis.net/gml">
  
    <channel>
        <title>Song Site</title>
        <description>Media RSS example with new fields added in v1.5.0</description>
        <item>
            <link>http://www.foo.com</link>
            <pubDate>Mon, 27 Aug 2001 16:08:56 PST</pubDate>
            <media:content url="http://www.foo.com/video.mov" fileSize="2000" bitrate="128" type="video/quicktime" expression="full" />
            <media:community>
                <media:starRating average="3.5" count="20" min="1" max="10" />
                <media:statistics views="5" favorites="5" />
                <media:tags>news: 5, abc:3</media:tags>
            </media:community>
            <media:comments>
                <media:comment>comment1</media:comment>
                <media:comment>comment2</media:comment>
            </media:comments>
            <media:embed url="http://www.foo.com/player.swf" width="512" height="323">
                <media:param name="type">application/x-shockwave-flash</media:param>
                <media:param name="width">512</media:param>
                <media:param name="height">323</media:param>
                <media:param name="allowFullScreen">true</media:param>
                <media:param name="flashVars">
                    id=12345&amp;vid=678912i&amp;lang=en-us&amp;intl=us&amp;thumbUrl=http://www.foo.com/thumbnail.jpg
                </media:param>
            </media:embed>
            <media:responses>
                <media:response>http://www.response1.com</media:response>
                <media:response>http://www.response2.com</media:response>
            </media:responses>
            <media:backLinks>
                <media:backLink>http://www.backlink1.com</media:backLink>
                <media:backLink>http://www.backlink2.com</media:backLink>
            </media:backLinks>
            <media:status state="active" />
            <media:price type="rent" price="19.99" currency="EUR" />
            <media:license type="text/html" href="http://www.licensehost.com/license"> Sample license for a video</media:license>
            <media:subTitle type="application/smil" lang="en-us" href="http://www.foo.org/subtitle.smil" />
            <media:peerLink type="application/x-bittorrent " href="http://www.foo.org/sampleFile.torrent" />
            <media:location description="My house" start="00:01" end="01:00">
                <georss:where>
                    <gml:Point>
                        <gml:pos>35.669998 139.770004</gml:pos>
                    </gml:Point>
                </georss:where>
            </media:location>
            <media:restriction type="sharing" relationship="deny" />
            <media:scenes>
                <media:scene>
                    <sceneTitle>sceneTitle1</sceneTitle>
                    <sceneDescription>sceneDesc1</sceneDescription>
                    <sceneStartTime>00:15</sceneStartTime>
                    <sceneEndTime>00:45</sceneEndTime>
                </media:scene>
            </media:scenes>
        </item>
    </channel>
</rss>

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, Bradley Horowitz, Akash Pai, Manish Sharma, Sapna Chandiramani, Bernard Lamers and Nilesh Gattani.

On the Google team: David Marwood and Peter Chane.

License

Copyright 2009 RSS Advisory Board. This Specification is available under the Open Web Foundation Agreement Version 0.9.

You can review the signed copies of the Open Web Foundation Agreement Version 0.9 for this Specification at [Insert Group Agreement Store URI], which may also include additional parties to those listed above.

Your use of this Specification may be subject to other third party rights. THIS SPECIFICATION IS PROVIDED "AS IS." The contributors expressly disclaim any warranties (express, implied, or otherwise), including implied warranties of merchantability, non-infringement, fitness for a particular purpose, or title, related to the Specification. The entire risk as to implementing or otherwise using the Specification is assumed by the Specification implementer and user. IN NO EVENT WILL ANY PARTY BE LIABLE TO ANY OTHER PARTY FOR LOST PROFITS OR ANY FORM OF INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER FROM ANY CAUSES OF ACTION OF ANY KIND WITH RESPECT TO THIS SPECIFICATION OR ITS GOVERNING AGREEMENT, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), OR OTHERWISE, AND WHETHER OR NOT THE OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

⚠️ **GitHub.com Fallback** ⚠️