`
testcs_dn
  • 浏览: 115374 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用 JW Player 播放RTMP 流

 
阅读更多
译序:JW Media Player 是开源的网页使用的 Flash 播放器。本文采摘于 JW Player 的官方文档,讲解了 JW Player 对于 RTMP 的使用方法,我们可以从 JW Player 客户端的角度来了解 RTMP 协议。以下是官方原文:

简介
RTMP (Real Time Messaging Protocol 实时消息传输协议) 是一个用于将点播和直播媒体交付给 Adobe Flash 应用 (比如 JW Player) 的体系。RTMP 支持 MP4 和 FLV 视频,AAC 和 MP3 音频。RTMP 相对于一般的 HTTP 视频下载 (很多网站使用这种方式进行在线视频播放) 具有以下优势:
  • RTMP 可以进行视频直播,人们可以在你录制的同时观看视频。
  • RTMP 可以做动态流,播放视频的质量可以根据带宽而自动变化。
  • 播放器可以快进到视频的后面部分,这对于大于十分钟的视频很有用 (这一点是 HTTP 下载方式的在线视频无法匹敌的)。
  • 播放器维护有一个小小的缓冲,避免了视频回放时的重新下载,节省了带宽。
缺点
但是,请注意 RTMP 也有自身的缺点,最重要的几个是:
  • RTMP 使用了跟 HTTP 不同的协议和端口号,这使得它很容易遭受 (公司) 防火墙的封堵。可以使用 RTMPT (通过 HTTP 通道) 避免这个问题,但这需要服务器付出一定的性能代价。
  • RTMP 数据被流化后传给播放器,这意味着连接的带宽必须要比视频的数据速率大。如果连接中止了几秒,流将卡住。这个问题在很大问题上可以使用包含一个低质量文件的动态流来进行预防。

最大的缺点是 RTMP 只能工作在 Flash 而不能工作在 HTML5。新的 HTTP 流协议,比如苹果的 HTTP Live Streaming (HLS),具有更广泛的设备支持 (比如 iOS),在未来的几年内很可能会取代 RTMP。JW Player 在 Flash 和 HTML5 模式下都能够支持苹果 HLS

服务器支持
要使用 RTMP,你的主机或者 CDN 需要安装一个专用 RTMP 服务器。这里有两个主流产品,JW Player 都支持:
  • Wowza Media Server是当前最广泛采用的解决方案。它包含了支持几乎所有的流媒体协议,包括 RTMP。Wowza 3 引入了对 JW6 SMIL manifest 的专用支持 (看下文)。
  • Adobe Media Server是另外一个很好地选择。因为 Flash 是由 Adobe 开发的,RTMP 的新功能首先会在 FMS 上跑的通。
CDNS
以下 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 为支持服务器的负载均衡提供了三个机制:
  • DNS负载均衡,独立于 JW Player。
  • RTMP 302重定向,被 Wowza 用于负载均衡。更多信息参考他们的用户指南。
  • SMIL负载均衡,包含 RTMP 链接到边缘节点的一个初始化 SMIL 文件。可以参见下面关于 SMIL 文件动态流的例子。
隐藏字幕
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",
4 height: 360,
5 width: 640
6 });


以上例子仅仅工作在桌面上,因为 Flash 在移动终端不可用。下面是另一个例子,使用 RTMP 和 HTTP 加载的一个 MP4。RTMP 流将会在桌面播放,下载的 HTTP 将会在移动终端播放:
01 jwplayer("myElement").setup({
02 playlist: [{
03 image:"/assets/myVideo.jpg",
04 sources: [{
05 file:"rtmp://example.com/application/mp4:myVideo.mp4"
06 },{
07 file:"/assets/myVideo.mp4"
08 }]
09 }],
10 height: 360,
11 primary:"flash",
12 width: 640
13 });


因为主要呈现模式设置为Flash,RTMP 流被选中。如果这一选项没有设置,JW Player 将会播放 HTTP 下载,因为很多浏览器 (比如 Chrome、IE)在 HTML5 中支持那个 (JW6 中的默认模式)。
参见Working with Playlists以获取关于加载多路源的更多信息。
应用和流
技术上讲,一个 RTMP 流包含两块:
  • 应用路径 (例如rtmp://example.com/vod/)。
  • 标识 (例如mp4:myFolder/video.mp4)。
JW Player 6 中,这两块被整合到单个 URL。JW Player 根据mp4flv或者mp3前缀的位置来决定应用和流之间的分割。
1. MP4/M4V/MOV/F4V 视频需要一个mp4:前缀:
  1. rtmp://example.com/vod/mp4:myFolder/myVideo.mp4

2. FLV 视频或者一个直播流 (FLV 容器下的) 需要一个flv:前缀:
  1. rtmp://example.com/vod/flv:myFolder/myVideo.flv
  2. rtmp://example.com/live/flv:myFolder/myLiveStream

3. MP3 音频需要一个mp3:前缀:
  1. rtmp://example.com/vod/mp3:myFolder/mySong.mp3

4. M4A/F4A/AAC 音频文件也需要一个mp4:前缀:
  1. rtmp://example.com/vod/mp4:myFolder/mySong.m4a

如果没有找到任何前缀,player 在文件名最后一个 / 之后对应用和流进行分割。前缀随后被自动添加 (mp4:,mp3:)。注意flv前缀并不被 Wowza/Adobe 服务器内部使用,因此 JW Player 将在请求流之前将其剥离。

动态流
除了加载单一 RTMP 流之外,JW Player 6 支持加载动态流。一个动态流包含多个具有同一内容的单流,它们具有不同的品质。JW Player 允许在这样一个流中进行不同品质的自动或者手工切换。
动态流必须使用叫做 SMIL manifest 设置。这是一些包含有 RTMP 应用路径加上存放在 RTMP 服务器上的流的路径的简单的 XML 文件。播放器经常假定一个带有.smil后缀的文件是一个 RTMP SMIL manifest:
1 jwplayer("myElement").setup({
2 file:"/assets/myVideo.smil",
3 image:"/assets/myVideo.jpg",
4 height: 360,
5 width: 640
6 });

这是另一个例子,使用了一个 RTMP 动态流 (为桌面) 和一个渐进 MP4 下载 (为移动终端):
01 jwplayer("myElement").setup({
02 playlist: [{
03 image:"/assets/myVideo.jpg",
04 sources: [{
05 file:"/assets/myVideo.smil"
06 },{
07 file:"/assets/myVideo.mp4"
08 }]
09 }],
10 height: 360,
11 primary:"flash",
12 width: 640
13 });

注意 SMIL manifest 是跨域安全限制的主题。如果你的 SMIL 文件位于你的网站或播放器之外的另一台服务器上,你需要去设置一个crossdomain.xml文件。
SMIL 内容
这是一个基本的例子,使用了三个不同的流:
01 <smil>
02 <head>
03 <metabase="rtmp://example.com/vod/"/>
04 </head>
05 <body>
06 <switch>
07 <videosrc="myVideo-high.mp4"height="720"system-bitrate="2000000"width="1280"/>
08 <videosrc="myVideo-medium.mp4"height="360"system-bitrate="800000"width="640"/>
09 <videosrc="myVideo-low.mp4"height="180"system-bitrate="300000"width="320"/>
10 </switch>
11 </body>
12 </smil>


品质的切换由 JW Player 自动完成,它将选用最高品质:
  • 谁的 system-bitrate 更适合连接的当前带宽。
  • 谁的 width 更适合播放器屏幕的当前宽度。
用户可以通过设置快捷菜单中的品质对这些自动选项进行重写。manifest 中的 关于流的 height 属性用于设置菜单的标签 (例如720p)。
WOWZA 3
Wowza Media Server 3 为这些 SMIL manifest 引入了专门的支持。如果你在运行 3.1.2.15 或更高版本的 Wowza,在你适配的流的 URL 后面添加/jwplayer.smil来得到这些 manifest。
这里是 Wowza3 中 SMIL manifest 和 M3U8 manifest 的 URL 的样子:
  1. http://example.com/vod/smil:myvideo.smil/jwplayer.smil
  2. http://example.com/vod/smil:myvideo.smil/manifest.m3u8

配置选项
RTMP 提供了一些配置选项来对流的播放进行调整。它们设置在一个专用的rtmp选项块中。
缓冲长度
在默认情况下,JW Player 试着为 RTMP 视频维护一个长度为 3 秒的缓冲。这意味着有三秒钟的视频被从服务器端获取并随时可以播放。这个长度可以使用 RTMPbufferlength选项进行修改:
    1 jwplayer("myElement").setup({
    2 file:"rtmp://example.com/vod/mp4:myVideo.mp4",
    3 height: 360,
    4 image:"/assets/myVideo.jpg",
    5 rtmp: {
    6 bufferlength: 0.1
    7 },
    8 width: 640
    9 });

可用值的范围是从0.1(对于低延时的直播) 到10(为防止频繁的重缓冲)。
FC 订阅
当使用 Akamai、Edgecast 或者 Limelight 等 CDN 分发直播流时,播放器不能简简单单地连接到直播流。播放器需要通过发送一个叫做FC Subscribe的调用到服务器进行订阅。JW Player 包含了对此的支持,使用 RTMPsubscribe选项:
1 jwplayer("myElement").setup({
2 file:"rtmp://example.com/xxxx/myStream",
3 height: 360,
4 image:"/assets/myLivestream.jpg",
5 rtmp: {
6 subscribe:true
7 },
8 width: 640
9 });

注意这一个功能仅适用于单一 RTMP 流。对于多位率的直播流,应该使用 HLS 协议。
安全令牌
Wowza Media Server 具有一个叫做安全令牌的特性,用于保护你的流被下载。它通过播放器发送给服务器一个令牌,然后服务器在开始发送流之前对令牌验证进行工作。JW Player 通过使用 RTMPsecuretoken选项支持这一机制:
1 jwplayer("myElement").setup({
2 file:"rtmp://example.com/vod/mp4:myVideo.mp4",
3 height: 360,
4 image:"/assets/myVideo.jpg",
5 rtmp: {
6 securetoken:"Kosif093n203a"
7 },
8 width: 640
9 });

注意我们不支持编译安全令牌的选项。SWF 通过提供了对 JS (它们都是客户端) 的安全增强,尤其是当 JS 代码有点混乱时。
原文链接:http://www.longtailvideo.com/support/jw-player/28854/using-rtmp-streaming/
分享到:
评论

相关推荐

    rtmp播放器

    4. **使用JW Player播放RTMP**:要使用JW Player播放RTMP流,你需要在HTML页面中引入`jwplayer.js`,然后通过JavaScript初始化播放器,并设置RTMP源。例如: ```javascript jwplayer('playerContainer').setup({ ...

    h5 rtmp播放demo

    【H5 RTMP播放Demo详解】 ...RTMP(Real-Time ...通过分析和学习这个"H5 RTMP播放Demo",开发者可以掌握如何在H5环境中播放RTMP视频,这不仅有助于理解H5与实时流媒体的交互,也为开发更复杂的多媒体应用打下基础。

    rtmp流媒体

    3. 播放流:用户端的播放器(如上述的player)通过输入服务器的RTMP地址和流名来获取并播放内容。 至于“文件上传提示.jpg”,可能是介绍如何将视频文件上传到Red5服务器的图像说明。通常,上传文件到Red5并不直接...

    纯前端直接播放RTMP.zip

    为了使用这个压缩包,你需要将RTMP服务器的地址和流名输入到指定的前端界面,系统会处理剩下的工作,包括建立与RTMP服务器的连接,解析和播放流媒体数据。由于这是一个纯前端解决方案,所有的处理都在用户本地完成,...

    RTMP视频播放web播放.rar

    常见的有开源的JW Player、Video.js、FlowPlayer等,它们可以通过JavaScript API与HTML5的Video元素交互,实现RTMP视频的播放。 3. **HTML5 Video元素**: 虽然HTML5原生不支持RTMP,但可以通过Flash插件或一些技术...

    rtmp视频流播放器

    - 由于HTML5的原生 `&lt;video&gt;` 标签并不支持RTMP协议,所以实现RTMP视频流播放通常需要借助第三方库,如JW Player、FlowPlayer或者使用Flash插件。 - 使用Flash插件的方式,因为Flash支持RTMP协议,但随着Flash的...

    JW player 5.3 附带使用样例

    本文将深入探讨JW Player 5.3的关键特性、使用样例及其在实现RTMP和HTTP伪流中的作用。 首先,让我们了解什么是JW Player。JW Player是一款开源的JavaScript和Flash视频播放器,由LongTail Video公司开发。它提供了...

    onvif协议视频转码推流网页播放

    以上内容详细介绍了“onvif协议视频转码推流网页播放”涉及的关键技术点,包括ONVIF协议的作用、RTSP与RTMP协议的使用、视频转码的重要性以及JW Player在网页播放中的角色。理解并掌握这些技术对于开发网络视频监控...

    海康摄像头rtsp转rtmp,使用flv播放.zip

    4. **FLV播放**:在前端,可以使用支持FLV的播放器(例如JW Player、FlowPlayer或开源的Video.js)来播放RTMP流。FLV是Flash Video的格式,与RTMP协议常一起使用。 在这个过程中,描述中提到的0.3秒延迟可能源于多...

    nginx rtsp转rtmp推流到http播放的配置文件

    为了实现网页播放,你可以选择HTML5的Video标签配合支持RTMP的播放器库,例如JW Player或FlowPlayer。在HTML文件中,配置Video标签指向Nginx的RTMP流地址: ```html Your browser does not support the video ...

    JW Flv Player

    **JW FLV Player** 是一个广泛使用的在线流媒体播放器,特别设计用于播放FLV(Flash Video)格式的视频内容。它支持多种视频和音频格式,并提供了丰富的自定义选项和功能,使得开发者和网站管理员能够轻松地在网页上...

    rtsp转rtmp视频播放,支持谷歌高版本

    为了在网页上实现RTMP流的播放,你可以使用基于WebRTC的库,如JW Player、Video.js等,它们提供了丰富的API和自定义选项来适应不同的需求。同时,你可能还需要在后端设置一个代理服务,将RTMP流转化为WebRTC或HLS...

    jwplayer插件

    配置JW Player以播放RTMP流时,需要在播放器设置中指定RTMP服务器的URL和流路径。这样,用户访问网页时,JW Player将自动连接到指定的RTMP服务器,加载并播放媒体内容。 **FFmpeg推流** FFmpeg是一款强大的开源...

    摄像头推流到rtmp

    - 观众侧播放:选择合适的播放器,支持RTMP协议,如VLC或网页端的HTML5 Video配合JW Player等。 文件"c98c0226ac814540b66da8928984402b"可能是实现这一流程的源代码、配置文件或其他相关资源。分析这个文件内容...

    流媒体播放,支持播放flv格式视频,和rtmp格式流。

    例如,开源的JW Player、Video.js等播放器都支持FLV和RTMP格式。在后端,可能需要用到像Nginx-RTMP这样的模块来处理RTMP流,并将其转换为HTTP流,以便于HTML5播放器使用。前端则通过JavaScript API与播放器交互,...

    rtmp-player:rtmp播放器

    2. **JavaScript RTMP播放器**: 在Flash Player逐渐被淘汰的背景下,JavaScript库如video.js、JW Player等开始支持RTMP协议,允许在不依赖Flash的情况下实现RTMP流的播放。这些播放器通常基于HTML5的MediaSource ...

    rtsp、rtmp拉流播放demo

    如开源项目VLC、JW Player等,或者自定义开发的播放组件。 2. 在线播放:描述中的"rtsp、rtmp播放工具"应是一个能够处理这两种协议的播放器,它可以连接到海康、大华等设备的RTSP或RTMP服务器,获取实时视频流并进行...

    jwplayer rtmp 多路直播 demo

    RTMP是一种专为实时数据传输设计的协议,常用于在线直播,允许服务器将视频流发送到客户端进行播放。 在“jwplayer rtmp 多路直播 demo”项目中,我们关注的是同时播放多个RTMP源的能力。这通常在多摄像头直播、...

    jwplayer播放

    JW Player支持多种视频源,包括HTTP Live Streaming (HLS)、MPEG-DASH、RTMP等,可以实现流媒体服务。对于视频源的管理,可以使用JW Platform,这是一个全面的视频管理、分发和分析工具,与JW Player紧密集成。 ...

    windows下基于nginx-rtmp搭建流媒体服务器

    - 使用支持RTMP的播放器(如VLC)或网页播放器(如JW Player)从服务器拉取流进行播放。 7. **高级特性**: - HLS转换:通过配置nginx-rtmp,可以将RTMP流转换为HLS,以支持更多设备和浏览器的播放。 - 自动录播...

Global site tag (gtag.js) - Google Analytics