源地址url参数详解
zwplayer
是一款功能强大的播放器,可以支持多种协议自适应与多码流自适应,要支持这么多功能,单纯用传统的字符串形式的url来作为媒体源地址输入已经无法满足要求了,用url这个名称来作为输入地址变量仅仅是为了兼顾约定俗成,应该把它理解为源输入地址。下面分应用场景来说明url参数的输入形式,以便于充分发挥zwplayer
的功能。
1. 简单媒体地址配置
1.1 基本格式
支持标准的 URL 字符串格式,播放器通过文件扩展名自动识别媒体协议类型。
1.2 支持的协议示例
http://example.com/move1.mp4 http://example.com:8080/move1.flv http://example.com:8080/live/stream.flv http://example.com:8080/live/stream.m3u8 http://example.com:8080/live/stream.mpd http://example.com:8080/live/stream.rtc http://example.com:8080/live/stream.ts http://example.com:8080/live/stream.mp3
在以上url中包含扩展名,zwplayer
会根据扩展名自动识别媒体协议类型,调用相应的解码器进行解码播放,无需为每种协议进行单独设置。
1.3 无扩展名地址处理
当服务器返回的 url 不包含文件扩展名时,需添加 mime_type
参数明确指定媒体类型:
http://www.example.com/c08ac56ae1145566f2ce54cbbea35fa3?mime_type=video_mp4
注意:这个mime_type
参数并不与http协议里的mime类型值一致,在无扩展名的媒体流后增加mime_type
参数是目前一些主流视频网站的做法。
1.4 扩展名与媒体类型对照表
zwplayer
支持的简单 url 的写法与主流标准一致,针对于 url 中的扩展名与媒体类型对照如下:
扩展名 | 媒体类型 | mime_type值 | 流类型 |
---|---|---|---|
mp4 | mp4媒体文件 | video_mp4 | 直播、点播 |
flv | flv文件或http-flv直播流 | video_flv | 直播、点播 |
m3u8 | Apple http live stream hls | video_hls | 直播、点播 |
mpd | Mpeg dash流 | video_dash | 直播、点播 |
rtc | webrtc 直播流 | video_rtc | 直播 |
mp3,m4a,aac,mp4a,ogg | 音频文件流 | 直播、点播 | |
ts | mpeg2 ts流 | 直播 |
1.5 协议头判断
扩展名 | 媒体类型 | mime_type值 | 流类型 |
---|---|---|---|
rtc:// | webrtc 直播流 | video_rtc | 直播 |
webrtc:// | webrtc 直播流 | video_rtc | 直播 |
brtc:// | webrtc 直播流 | video_rtc | 直播 |
rtsp:// | rtsp 直播流,通常用于监控摄像头 | 直播 |
1.6 注意事项
1、如果指定stream_type 参数,则以stream_type参数值为准。
2、如果通过stream_type参数、协议头、扩展名都无法判断,则按照 video_mp4 处理。
2. 多码流节目配置
2.1 应用场景
当前绝大多数视频网站对视频播放都提供不同清晰度的码流供用户选择,例如打开某些视频节目时,播放器可能提供1080P、720P、480P、360P等不同清晰度的码流供用户选择,清晰度高的码流往往占用更多的网络带宽,清晰度低的码流往往更流畅。其实这些不同清晰度的码流分别由不同的媒体文件提供,对于直播节目,要实现多码流需要在服务器上同时编码输出多个码流。zwplayer
对多码流节目提供了强力支持。
注意:支持多码流不仅仅要有播放器端的支持,媒体服务器端也需提供相关支持。
下图展示了一个正在播放多码流节目的zwplayer
实例:
对于多码流节目,zwplayer
会创建一个多码流选择器,并在播放器控制条的按钮区添加一个 HD 标志的按钮,用户点击此按钮会弹出流选择菜单以便用户能够选择码流。
2.2 配置格式一:对象数组
单纯用简单的string类型的 url 无法表单复杂的地址信息,因此要支持一个多码流节目,需要给媒体源地址url参数提供一个js数组而不是简单的字符串,数组里的每个成员为一个码流地址信息,以下为一个多码流节目媒体源地址url参数的js对象示例:
var live_murl = [ { "name": "HD1", "url": "http://example.com/media/stream-hd.flv" }, { "name": "SD1", "url": "http://example.com/media/stream-ld.flv", "default": true }, { "name": "SD2", "url": "http://example.com/media/stream-sd.flv" } ];
如上代码所示,每个地址信息为一个js对象,包含属性name、url与default等属性。
name:码流的标识,
url:码流的实际地址
default: boolean类型,表示是否为首选码流,如果为首选码流,可以设置为true,否则可以缺省或者设置为false。
2.3 配置格式二:兼容第三方播放器格式
一些第三方播放器的多码流源输入地址的单个地址为数组形式,zwplayer
也支持,例如:
var live_urls2 = [ [ "http://example.com/stream-uhd.flv", "FULL_HD1" ], [ "http://example.com/stream-hd.flv", "HD1" ], [ "http://example.com/stream-ld.flv", "SD1" ], [ "http://example.com/stream-sd.flv", "SD2" ] ];
以上这个示例代码是一些第三方播放器源输入地址的写法,每个码流地址为数组:
第0个位置为url;
第1个位置为流的名称name,可以缺省;
第2个位置为mime类型,通常缺省。
2.4 码流标识标准化建议
流地址对象的name
属性有的网络视频平台用英文标识作为值,zwplayer
将在创建流选择器时用当前的语言替换为用户可读的词语,对应表如下:
标识 | 可读词语(简体中文) | 日本语 | 英文 |
---|---|---|---|
HD1 | 超清 | ||
SD1 | 高清 | ||
SD2 | 标清 | ||
HD | 高清 | ||
FHD | 全高清 | ||
BD | 蓝光 | ||
BD 4M | 蓝光4M | ||
BD 8M | 蓝光8M | ||
FULL_HD1 | 原画 |
建议在构造源输入地址时,流的name
的值能用如上简写就用简写,以便在支持多语言时播放将它翻译为用户可读词语。
流标识完全是可以自定义的,不一定得用上面的对应表,例如如下是一个自定义流标识的示例:
var live_murl = [ { "name": "1080P", "url": "http://example.com/media/stream-hd.flv" }, { "name": "720P", "url": "http://example.com/media/stream-ld.flv", "default": true }, { "name": "480P", "url": "http://example.com/media/stream-sd.flv" } ];
如以上示例,1080P、720P、480P是自定义的标识名,需要注意的是,这些自定义的标识名在多语言翻译时是不做处理的,因此尽量不要用特定语言的标识,例如,类似简体中文“高清”、“电脑观看”,“手机观看”等标识不做翻译处理,如果在日语环境中还是显示中文。
2.5 推荐配置格式
zwplayer
推荐采用如下格式构造多码流节目源的输入地址格式,示例如下:
var live_url = { ..more properties.. murls: { "FULL_HD1": "http://example.com/stream-or4.flv", "HD1": "http://example.com/stream-hd.flv", "SD1": "http://example.com/stream-ld.flv ", "SD2": "http://example.com/stream-sd.flv" }, multistream: 4 // 码流数量(可选) };
采用如上推荐的格式时,url参数为一个对象,除了murls
与multistream
两个属性对于zwplayer
来说是必要的之外,其它属性可以随意扩展。
murls: js对象(非数组)类型,该对象中的每个流地址为该对象的一个属性,对象中的属性名为流的标识,属性的值为流的实际 url 地址;
multistream: 标识这个源地址总共有多少个流,可以省略。
采用该格式,流地址对象构造起来较为简洁直观,因此推荐使用。
2.6 hls/dash协议的多码流
某些协议单个字符串形式的url就支持内嵌多码流,例如 hls 与 dash 协议本身是可以支持多码流。这些内含多码流的hls协议流与dash协议流的url能被zwplayer
完美支持,zwplayer
支持hls、dash协议的内嵌多码流自适应切换与手动切换。
关于hls与dash内嵌多码流的更多技术请参考相关文档。
3. 多协议自适应地址配置
同一媒体源支持多种传输协议,播放器自动选择最优协议进行播放。
3.1 应用场景
随着流媒体技术的发展,流媒体厂家为了支持多终端播放,对于同一个直播节目流或者录播文件节目,支持多种协议输出。例如,对于直播,有些流媒体服务器的输出同时支持http、httpflv、websocket、hls与dash等协议;对于录播节目流,同一个节目可能同时支持MP4、flv、hls与dash等协议输出;而至于如何播放,流媒体服务器厂家并不负责,需要播放终端自己解决。针对这种情况,zwplayer
提供了全面支持,可以同时将不同协议的流地址传输给zwplayer
播放器,由zwplayer
自行判断采用何种协议,这就是所谓的多协议自适应播放。
为了支持多协议播放地址,需要给zwplayer
传递一个js对象作为url参数,js对象的每一个属性名表示传输协议,属性的值表示该协议的url地址。
3.2 直播流多协议配置
对于直播流地址,一个多协议播放地址格式的示例如下:
{ "httpflv": "http://example.com:8188/live/stream0020.flv", "rtc": "http://example.com:8188/live/stream0020.rtc", "wsflv": "ws://example.com:8188/live/stream0020.flv", "httpflv-n": "http://example.com:8189/live/stream0020.flv", "wsflv-n": "ws://example.com:8189/live/stream0020.flv", "httpflv-n6": "http://[2408:8207:1858::332f:e4e8]:8189/live/stream0020.flv", "wsflv-n6": "ws://[2408:8207:1858::332f:e4e8]:8189/live/stream0020.flv", "hls": "http://example.com:8188/live/hls/stream0020/index.m3u8", "dash": "http://example.com:8188/live/dash/stream0020/index.mpd", "rtmp": "rtmp://example.com:1945/stream0020" }
zwplayer
已经支持的用于直播与录播节目的多协议地址对象属性如下:
属性名称(协议) | 协议说明 |
---|---|
httpflv | 用http、https协议输出的 flv 流 |
rtc | 用webrtc协议输出的直播流 |
wsflv | 用websocket(ws)、websocket ssl(wss)协议输出的 flv 流 |
httpflv-n | 用http、https协议输出的 flv 流(对于采用多端口的服务器有用) |
wsflv-n | 用ws、wss协议输出的 flv 流(对于采用多端口的服务器有用) |
httpflv-n6 | 基于ipv6的http、https协议输出的 flv 流 |
wsflv-n6 | 基于ipv6的ws、wss协议输出的 flv 流 |
hls | 采用Apple http live stream协议输出的直播流 |
dash | 采用MPEG DASH协议输出的直播流 |
rtmp | adobe rtmp 协议,注意:基于html5的zwplayer 不支持 rtmp播放 |
htt**p** | 以http协议输出的任何文件格式地址 |
对于多协议直播地址,须具备以上属性的一种或多种即可,不是所列的每种协议都要支持。例如如下示例地址的输入格式为常用的输入:
{ "httpflv": "http://example.com:8188/live/stream0020.flv", "hls": "http://example.com:8188/live/hls/stream0020/index.m3u8" }
大多数视频网站的直播协议仅支持httpflv与hls,因此仅需提供这两个属性即可。
3.3 点播流多协议配置
对于点播(录播)流,多协议播放地址url可以采用如下格式:
{ "type": "dvr", "httpflv": "http://example.com:1936/vod/stream0020.flv", "http": "http://example.com:8088/vod/mp4/movie001.mp4", "hls": "http://example.com:8088/vod/hls/movie001/index.m3u8", "dash": "http://example.com:8088/vod/dash/movie001/manifest.mpd" }
以上示例,rtmpflv、http、hls与dash为协议名,至少提供一种协议即可。