一、XML是什么?
XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language标准通用标记语言)。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据。XML与HTML的设计区别是:XML是用来存储数据的,重在数据本身。而HTML是用来定义数据的,重在数据的显示模式。XML是W3C制定的,XML的标准化工作由W3C的XML工作组负责,因为XML 是个公共格式(它不专属于任何一家公司), XML不是一个依附于特定浏览器的语言。(以上摘自“
3、Windows系统自带的“记事本”。前两种工具我还很陌生,其实大部分时候我还是用系统自带的“记事本”来完成。XML文件还可以用浏览器打开预览,我建议编写完XML播放清单之后,用浏览器打开,如果文件编写含有语法错误,浏览器会提示你第几行第几列出现什么样的错误。其次,如果播放清单中含有中文,用“记事本”编写或修改完之后请务必以UTF-8编码保存。
三、JW Player对XML播放清单文件的特别要求
要特别强调的是,提供播放清单的域名必须与提供播放器源码即player.swf的域名一致,否则播放清单无法加载,这是Adobe Flash Player包含的一项安全措施。受此影响的有以下三项:
*播放清单文件,字幕文件
*SWF文件(比如播放器源码player.swf,皮肤插件)
*原生媒体数据文件(如波形数据waveform data,位图数据bitmap data)
也就是说,你要检查提供以上所有文件的网址域名是否一致,否则无法加载。LongTail官网介绍了两种迂回的解决办法:
*在站点放置crossdomain.xml
*或者使用代理
每种格式LongTailVideo都有提供示例(example),点击它让浏览器打开,可以清楚地看到播放清单的结构。下图是浏览器打开ASX播放清单的截图:
我们还可以把它下载下来(点击右键,IE“目标另存为……”或Firefox“链接另存为……”)。
用“记事本”打开可以看到如下代码(仍以打开ASX播放清单为例):
<asx version="3.0">
<title>Example ASX playlist</title>
<entry>
<title>FLV video</title>
<author>the Peach Open Movie Project</author>
<abstract>Big Buck Bunny is a short animated film by the Blender Institute, part of the Blender Foundation.</abstract>
<moreinfo href="upload/2012/3/201203231347461706.jpg" />
</entry>
<entry>
<title>PNG Image with duration</title>
<author>the Peach Open Movie Project</author>
<abstract>Big Buck Bunny is a short animated film by the Blender Institute, part of the Blender Foundation.</abstract>
<ref href="upload/2012/3/201203231347460501.png" />
<duration value="00:00:10" />
</entry>
<entry>
<title>Youtube video with start</title>
<author>the Peach Open Movie Project</author>
<abstract>Big Buck Bunny is a short animated film by the Blender Institute, part of the Blender Foundation.</abstract>
<moreinfo href="http://j-coriolanus.blog.163.com/blog/http://www.bigbuckbunny.org/"/>
<ref href="http://j-coriolanus.blog.163.com/blog/http://youtube.com/watch?v=IBTE-RoMsvw" />
<starttime value="10" />
</entry>
</asx>
我的理解是,如果把XML比作中文,那么所谓ASX、ATOM、RSS、XSPF等格式就像各地的方言。我们这里的方言是闽南话,非闽南人听不懂,但是我们书写的还是全中国人都看得懂的中文,这就像我们是以闽南的“格式”来念中文。
1、ASX:全称Advanced Stream Redirector,是一种作为存储Windwos Media播放清单的XML文件格式。下图是ASX元素参考简表,要获得更详细的信息请参考:http://msdn.microsoft.com/en-us/library/ms910265.aspx。
2、ATOM:是IETF组织标准化程序下的一个开放的发展中标准。值得一提的是Google提供的多种服务正在使用Atom,Google Data API (GData) 亦基于Atom。可能因为如此,LongTail提供给我们关于ATOM的参考网址正是YouTube APIs and Tools的Reference Guide (v2.0)(http://code.google.com/intl/zh-CN/apis/youtube/2.0/developers_guide_protocol.html#Understanding_Video_Entries)。而JW Player支持的是带Media RSS扩展的ATOM播放清单。Media RSS则是由雅虎(yahoo)于2004年设计的。
3、XSPF:全称XML Shareable Playlist Format,是由Xiph.Org Foundation于2004年设计的格式,目前最新的版本是2006年的1.0版。特点是开源跨平台,广泛用于便携播放设备。LongTail给出的参考网址:http://xspf.org/specs。
4、RSS:
*RSS是什么?RSS[Rich Site Summary(RSS 0.9 and 1.0)/ Really Simple Syndication(RSS 2.0)]是一种描述和同步网站内容的格式,是目前使用最广泛的XML应用,它是站点用来和其他站点之间共享内容的一种简易方式。目前RSS已经分化为RSS 0.9x/2.0和RSS 1.0两个阵营,共有七种版本,其中RSS 0.9x/2.0应用最为广泛。(以上摘自“百度百科”)
我们可以看到,一个RSS文件是由带版本号的文件头及channel组成,channel又是由<channel>的子元素及若干<item>组成,而item还有自己的子元素,一层嵌套一层。
通过比较其他格式ASX、ATOM、XSPF文件我们还可以发现,它们结构大同小异:
ASX以版本号<asx version="3.0">为文件头,ATOM没有版本号,它的文件头是<feed xmlns="http://www.w3.org/2005/Atom">,RSS以版本号<rss version="2.0">为文件头,XSPF以版本号<playlist version="1">为文件头;
ASX和ATOM都是在文件头之下直接由若干曲目组成,RSS和XSPF是在版本号文件头之下再嵌套一层:RSS是<channel>,XSPF是<tractlist>;
ASX和ATOM的曲目元素叫<entry>,RSS的曲目元素叫<item>,XSPF的曲目元素叫<track>。
基于这个原因,我打算只介绍RSS格式播放清单,其他格式完全可以触类旁通。
我介绍的RSS格式参考的是RSS 2.0 at Harvard Law。
*RSS之<channel>子元素:
下表是<channel>子元素的参考,要说明的是,对于播放清单而言,子元素并非是必须的,完全可以忽视,但是channel嵌套还是必须有的。
元素 | 描述 | 必要/可选 | 示例数据 |
title | channel标题 | 必要 |
|
link | channel链接地址 | 必要 |
|
description | channel描述 | 必要 |
|
language | channel编写语言 | 可选 | en-us,zh-cn,zh-tw |
copyright | channel内容的版权人 | 可选 |
|
managingEditor | channel内容负责人邮箱 | 可选 | (George Matesky) |
webMaster | 网站管理员邮箱 | 可选 | (Betty Guernsey) |
pubDate | 发布日期 | 可选 | Sat, 07 Sep 2002 00:00:01 GMT |
lastBuildDate | 最后修订日期 | 可选 | Sat, 07 Sep 2002 09:42:31 GMT |
category | 类别,它有个可选属性domain="类别链接"。 | 可选 | <category>Grateful Dead</category> |
generator | channel生成程序 | 可选 | MightyInHouse Content System v2.3 |
docs | 一个指向RSS文件格式的文档链接。这可能是此页面的指针,以便25年后某人偶然路过这里可以知道这到底是个啥东东。 | 可选 | |
cloud | 指定一个可支持rssCloud接口的web服务器 | 可选 | <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/> |
ttl | 指定channel缓存时间,秒 | 可选 | <ttl>60</ttl> |
image | 指定与channel同时显示的GIF、JPEG或PNG图片 | 可选 | <image> |
rating | channel内容成人级别 | 可选 |
|
textInput | 设定文本输入 | 可选 |
|
skipHours | (本人尚未搞明白) | 可选 |
|
skipDays | (本人尚未搞明白) | 可选 |
|
*RSS之<channel>之<item>子元素:
对于播放清单而言,<item>才是最重要的子元素,每条<item>代表一首曲目,而<item>的子元素则记录了每一首曲目的媒体信息如:媒体标题、媒体描述、媒体附件等等。下表是<item>的子元素参考表,但是只有红色部分才是对播放清单有意义的子元素,其他尽可以无视。
元素 | 描述 | 示例数据 | |||||||||||
title | item标题 |
| |||||||||||
link | item链接地址 |
| |||||||||||
description | item摘要、描述 |
| |||||||||||
author | item作者的邮箱 | <author> (Lawyer Boyer)</author> | |||||||||||
category | 这个元素同时也是<channel>的子元素。 | <category>专辑名称</category> | |||||||||||
comments | item评论/注解的链接地址 |
| |||||||||||
enclosure | item的媒体附件,它有三个属性: | <enclosure url="http://www.scripting.com/mp3s/weatherReportSuite.mp3" length="12216320" type="audio/mpeg" /> | |||||||||||
guid | 全局唯一标识符字符串 | <guid>http://some.server.com/weblogItem3207</guid> | |||||||||||
pubDate | item的出版时间 | <pubDate>Sun, 19 May 2002 15:21:36 GMT</pubDate> | |||||||||||
source | xml文件地址 | <source url="http://www.tomalak.org/links2.xml">Tomalak&39;s Realm</source> |
尽管<author>(表示媒体作者,确切地说是作者的邮箱)是<item>的子元素,但是JW Player并不会读取这个元素当作媒体作者,除了<author>另外还有一些媒体信息如:<duration>、<image>等,在RSS格式下是无法体现的,这个问题要在RSS的扩展来解决。JW Player支持的RSS扩展有两种:itunes和media:
*itunes RSS:我想将重点放在media RSS,因此对itunes RSS有兴趣的朋友可以自己去Apple网站查阅相关资料。
*media RSS:这是由Yahoo公司于2004年设计的格式,它极大地扩展了RSS 2.0的内容附件及其附加元数据(metadata)。media RSS播放清单的文件头如下:
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
主要元素
(1)<media:group>:
是<item>的子元素,可以将有相同内容的<media:content>分为一组。(对播放清单而言,每条item对应一首曲目,我认为可以分组的可能性或必要性几乎没有。)
(2)<media:content>:
是<item>或<media:group>的子元素,含有14项属性参数,示例如下:
<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" /> |
下表是<media:content>属性参数表,大部分参数是可选的(红色为必选):
元素 | 描述 |
url | 指定媒体文件的直链地址 |
fileSize | 媒体文件大小的字节(byte)数 |
type | 媒体文件的标准MIME类型 |
medium | 对象属性,有5个选项: |
isDefault | 是否为<media:group>默认对象 |
expression | 表现方式,有3个选项: |
bitrate | 每秒千比特率 |
framerate | 每秒帧率 |
samplingrate | 取样率,单位:kHz/秒 |
channels | 音频声道数 |
duration | 媒体播放时长,单位:秒 |
height | 高度,单位:像素 |
width | 宽度,单位:像素 |
lang | 语言 |
可选元素
以下元素是可选的,且可能作为<channel>、<item>、<media:content>、<media:group>的子元素。越接近对象优先级别越高,比如作为<channel>的子元素时,定义将适用于<channel>内所有的对象,但是如果<item>另有同样子元素的不同定义,则<item>内的对象将忽略<channel>的定义。按优先权由强到弱的排列是:<media:content>、<media:group>、<item>、<channel>。
另外, XML播放清单的所有元素并非都会出现在播放器的播放清单里,还要看皮肤skin而定,比如官方默认的皮肤就不显示<media:category>和<media:credit>元素,即便你编写的XML播放清单含有它们。
元素 | 描述 | 示例数据 |
<media:adult> | 成人内容级别限制。该元素已被更具灵活性的<media:rating>取代。 |
|
<media:rating> | 成人内容级别限制。这个与JW Player无太大关系,略。 |
|
<media:title> | 媒体标题。它有个type可选属性,属性可选值是“plain”或“html”,默认是“plain”即纯文本。注意html必须是实体编码(entity-encoded)。 | <media:title type="plain">媒体标题</media:title> |
<media:description> | 媒体的简短描述。它也有个type可选属性,见<media:title>。 | <media:description type="plain">媒体简短描述</media:description> |
<media:keywords> | 媒体关键字(tags)。有多个字时,以英文逗号隔开 | <media:keywords>kitty,cat,big dog,yarn,fluffy</media:keywords> |
<media:thumbnail> | 媒体缩略图。它有1个必选属性“url”和3个可选属性“height”、“width”、“time”。经我的实验,那3个可选属性对JW FLV Player没有作用。 | <media:thumbnail url="http://www.foo.com/keyframe.jpg" width="75" height="50" time="12:05:01.123" /> |
<media:category> | 媒体类别。在JW FLV Player的某些皮肤,会显示为专辑名称。它有2个可选属性“scheme”和“lable”,但是可选属性对JW FLV Player同样没有意义。示例数据不带可选属性。 | <media:category>专辑名称</media:category> |
<media:hash> | 媒体hash值。这个与JW Player无太大关系,略。 |
|
<media:player> | 如果在<media:content>没有指定媒体地址,那么就要在此指定(通常<media:content>用的是直链地址)。它有1个必选属性“url”和2个可选属性“height”、“width”(可选属性我估计对JW Player也没有作用)。 | <media:player url="http://www.foo.com/player?id=1111" height="200" width="400" /> |
<media:credit> | 这个元素可包含参与媒体创作的多个角色(role),如作曲、演唱、导演、指挥、演员……等等。它有两个可选属性“scheme”、“role”。“scheme”属性值默认是“urn:ebu”,而更多“role”的值可参阅:European Broadcasting Union Role Codes。 | <media:credit role="author " scheme="urn:ebu">作者名字</media:credit> |
<media:copyright> | 版权信息。这个与JW Player无太大关系,略。 |
|
<media:text> | 媒体的文字副本、隐藏字幕、歌词等文本。这个与JW Player无太大关系,略。(如果要在JW FLV Player运用字幕,我建议还是用另外的字幕插件“Captions”更合适且方便) |
|
<media:restriction> | 媒体限制。这个与JW Player无太大关系,略。 |
|
<media:community> | 媒体社区。这个与JW Player无太大关系,略。 |
|
<media:comments> | 媒体评论。这个与JW Player无太大关系,略。 |
|
<media:embed> | 媒体嵌入代码。这个与JW Player无太大关系,略。(JW FLAV Player提供有Viral插件) |
|
<media:responses> | 媒体回应。这个与JW Player无太大关系,略。 |
|
<media:backLinks> | 媒体的反向链接。这个与JW Player无太大关系,略。 |
|
<media:status> | 媒体状态。这个与JW Player无太大关系,略。 |
|
<media:price> | 媒体价格。这个与JW Player无太大关系,略。 |
|
<media:license> | 媒体许可。这个与JW Player无太大关系,略。 |
|
<media:subTitle> | 媒体字幕链接。这个与JW Player无太大关系,略。(建议还是用另外的字幕插件“Captions”更合适且方便) |
|
<media:peerLink> | 媒体的P2P链接。这个与JW Player无太大关系,略。 |
|
<media:location> | 媒体内容获取的地理信息。这个与JW Player无太大关系,略。 |
|
<media:rights> | 原创或官方版权。这个与JW Player无太大关系,略。 |
|
<media:scenes> | 媒体场景。这个与JW Player无太大关系,略。 |
|
前面我提供了一个不带Media扩展的RSS示例截图,下图则是将前例改写为带Media扩展的RSS示例截图。
要特别注意文件头:
不带Media扩展的文件头是:<rss version="2.0">
带Media扩展的文件头是:<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">。
五、补充说明:
播放清单的元素并非都会体现在播放器,还会受到皮肤的限制,比如默认皮肤就不出现<category>和<media:category>元素,而Modieus (aka: Stylish)皮肤就可以。因此如果用户有特别的需要,而官方的皮肤又不能满足,我想那只好自己设计皮肤了。
来源:http://j-coriolanus.blog.163.com/blog/static/64211038200910213830999/