简介
RTMP ( Real Time Messaging Protocol 实时消息传输协议 ) 是一个用于将点播和直播媒体交付给 Adobe Flash 应用 (比如 JW Player) 的体系。RTMP 支持 MP4 和 FLV 视频,AAC 和 MP3 音频。RTMP 相对于一般的 HTTP 视频下载 (很多网站使用这种方式进行在线视频播放) 具有以下优势:
- RTMP 可以进行视频直播,人们可以在你录制的同时观看视频。
- RTMP 可以做动态流,播放视频的质量可以根据带宽而自动变化。
- 播放器可以快进到视频的后面部分,这对于大于十分钟的视频很有用 (这一点是 HTTP 下载方式的在线视频无法匹敌的)。
- 播放器维护有一个小小的缓冲,避免了视频回放时的重新下载,节省了带宽。
但是,请注意 RTMP 也有自身的缺点,最重要的几个是:
最大的缺点是 RTMP 只能工作在 Flash 而不能工作在 HTML5。新的 HTTP 流协议,比如苹果的 HTTP Live Streaming (HLS),具有更广泛的设备支持 (比如 iOS),在未来的几年内很可能会取代 RTMP。JW Player 在 Flash 和 HTML5 模式下都能够支持苹果 HLS。
服务器支持
要使用 RTMP,你的主机或者 CDN 需要安装一个专用 RTMP 服务器。这里有两个主流产品,JW Player 都支持:
以下 CDN (Content Delivery Networks 内容分发网络) 能够支持 RTMP,并且使用 JW Player 测试效果良好。它们都支持 动态 流,除了 CloudFront,也都支持现场 直播 :
RTMP 的一个关键的特征就是能够进行现场直播,比如展示会,音乐会或者体育赛事。在 JW Player 和一台 RTMP 服务器之后,你还需要一个小工具来将直播视频提取给服务器。有很多这样的工具可供选择。 Flash Live Media Encoder 就是这样的一个免费的,可以用于 Windows 和 Mac 的工具。
对于 FMS 和 Wowza,嵌入直播流的方式和嵌入点播的方式一样。但是,对于 Akamai、Edgecast 和 Limelight 等 CDN 要求播放器订阅到直播流。JW Player 6 支持这种机制 。
JW Player 6 将会像嵌入一个点播文件一样嵌入一个直播流,但有个例外:取代显示在时间轴上的滑块 (直播嘛) 的是播放器在控制条上显示时间的标题。
负载均衡
对于大规模的部署,JW Player 为支持服务器的负载均衡提供了三个机制:
JW Player 支持 RTMP 直播和点播的字幕隐藏。只支持一个单一的 CC 轨道,而且这个轨道必须是 TX3G 格式的。Wowza 和 Adobe media server 都有能力使用 RTMP 发送 TX3G 字幕。
JW Player 第一次遭遇一个文本提示的 TX3G 时,它在控制条中放置了一个 CC 按钮。如果用户选择启用 CC,这一偏好会被保存在 cookie,用户以后观看任何视频时 CC 都会是启用状态。
嵌入一个流
嵌入一个 RTMP 流到 JW Player 6 只是简单提供一个完整流 URL 的问题。这里是一个很基本的例子,播放一个 MP4 视频:
1 |
jwplayer( "myElement" ).setup({
|
2 |
file: "rtmp://example.com/application/mp4:myVideo.mp4" ,
|
3 | image: "/assets/myVideo.jpg" Nowrap; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 0px !important; margin: 0px !important; border: 0px !important; outline: 0px !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas,
|
4 | height: 360,monospace !important; font-size: 1em !important; min-height: inherit !important; display: block !important; background: none !important;">5 | width: 640 |
6 | }); |
以上例子仅仅工作在桌面上,因为 Flash 在移动终端不可用。下面是另一个例子,使用 RTMP 和 HTTP 加载的一个 MP4。RTMP 流将会在桌面播放,下载的 HTTP 将会在移动终端播放:
03 | 04 |
sources: [{ |
05 | "rtmp://example.com/application/mp4:myVideo.mp4" |
06 | },{ |
07 | "/assets/myVideo.mp4" |
08 | }] |
09 | }],monospace !important; font-size: 1em !important; min-height: inherit !important; display: block !important; background: none !important;">10 | 11 | primary: "flash" 12 |
width: 640 |
13 | 因为
主要
呈现模式设置为
Flash
,RTMP 流被选中。如果这一选项没有设置,JW Player 将会播放 HTTP 下载,因为很多浏览器 (比如 Chrome、IE)在 HTML5 中支持那个 (JW6 中的默认模式)。
参见 Working with Playlists 以获取关于加载多路源的更多信息。 应用和流 技术上讲,一个 RTMP 流包含两块: 应用路径 (例如rtmp://example.com/vod/)。 1. MP4/M4V/MOV/F4V 视频需要一个 mp4: 前缀:
2. FLV 视频或者一个直播流 (FLV 容器下的) 需要一个 flv:
3. MP3 音频需要一个 mp3:
4. M4A/F4A/AAC 音频文件也需要一个
如果没有找到任何前缀,player 在文件名最后一个 / 之后对应用和流进行分割。前缀随后被自动添加 (mp4:, mp3:)。注意flv 前缀并不被 Wowza/Adobe 服务器内部使用,因此 JW Player 将在请求流之前将其剥离。 动态流 除了加载单一 RTMP 流之外,JW Player 6 支持加载动态流。一个 流包含多个具有同一内容的单流,它们具有不同的品质。JW Player 允许在这样一个流中进行不同品质的自动或者手工切换。 动态流必须使用叫做 SMIL manifest 设置。这是一些包含有 RTMP 应用路径加上存放在 RTMP 服务器上的流的路径的简单的 XML 文件。播放器经常假定一个带有 .smil 后缀的文件是一个 RTMP SMIL manifest: "/assets/myVideo.smil" |
"/assets/myVideo.mp4" |
注意 SMIL manifest 是
跨域安全限制
的主题。如果你的 SMIL 文件位于你的网站或播放器之外的另一台服务器上,你需要去设置一个
crossdomain.xml
文件。
SMIL 内容 这是一个基本的例子,使用了三个不同的流: 品质的切换由 JW Player 自动完成,它将选用最高品质: WOWZA 3 Wowza Media Server 3 为这些 SMIL manifest 引入了专门的支持。如果你在运行 3.1.2.15 或更高版本的 Wowza,在你适配的流的 URL 后面添加 /jwplayer.smil 来得到这些 manifest。 这里是 Wowza3 中 SMIL manifest 和 M3U8 manifest 的 URL 的样子:
配置选项
|