-->
获得免费通行证,加入我们的流媒体连接-2月19日至22日; 现在注册!

如何做动态流与Flash媒体服务器

随着Adobe发布Flash Player 10, Flash支持 动态流. 以及类似的自适应流媒体技术, 光滑的流, 或者比特率交换, 动态流选择最适合用户连接速度的媒体流. 如果您从支持它的流媒体服务器(如Adobe Flash Media server 3)交付.5、播放时,如果网络条件发生变化,流将无缝切换.

本教程将解释动态流的一些机制和限制, 并提供了一些具体的例子,如何设置它与几个流行的Flash视频播放器. 动态流很容易做到, 但是有一些细节要知道,这将有助于使你的努力更成功.

玩家说了算

动态流媒体由Flash播放器控制. 使用Flash构建的不同视频播放器将具有不同的实现细节, 但有一些常见的事情是你必须要做的:

  • 制作多个文件: 您将以不同的比特率对同一视频的多个版本进行编码. 播放器将根据用户在播放期间的可用带宽和CPU负载(通过计数丢弃的帧来推断)选择最好的一个.
  • 给玩家一个文件列表: 玩家需要有一个可用版本的列表,以及每个版本的比特率. 这个列表会根据你使用的播放器而有所不同.

当播放器加载时,它将检测用户的带宽 & 屏幕大小并选择合适的文件版本. 播放器将在播放期间持续测量带宽和丢失帧, 并且会对屏幕大小的变化做出反应(比如用户要全屏观看). 如果您使用RTMP协议传输视频, 玩家可以随时从服务器请求比特率切换.

服务器接听呼叫

当服务器收到更改比特率的请求时, 它将通过在编码文件中定位匹配的关键帧来尝试顺利切换, 然后打开一个公共框架. 这对编码有影响:如果关键帧间隔太远, 或者文件的时间线不匹配, 你可能不会顺利转换.

多文件编码

为了准备动态流媒体,您将以几种不同的比特率对视频进行编码. 通常, 如果你想支持用户跨各种连接, 您将以各种比特率进行编码,这些比特率跨越了查看器的能力. 选择哪种比特率取决于您的受众和您正在处理的视频内容类型. Adobe的建议 提供一些建议的指导方针. 对于本例,我以6比特率进行编码.

索伦森监狱里所有的文件都是我创建的, 使用恒定比特率编码(CBR)并设置2秒的关键帧间隔(每60次frames@30fps或每30次frames@15fps). 表1 显示每个文件的编码设置.  

DynamicFlashTable
表1. Sorenson Squeeze的编码设置为动态流创建文件.

测试方法

我测试了三个Flash视频播放器,以及来自Amazon Cloudfront/FMS 3的流媒体视频.5(有关Cloudfront的更多信息,请参见 如何开始使用亚马逊Cloudfront流媒体). 我的参考球员是 1080p 在延斯·吕弗勒家发现的 Flashstreamworks.com. 我还测试并提供了示例 JW FLV播放器.1来自长尾视频, Flowplayer 3.1.5.

我用上面描述的流设置了每个播放器. 然后我用 带宽限制工具 模拟播放流时波动的网络条件.

我测试了各种带宽限制的组合, bufferlength设置, 视频编码, 都是H.264和VP6视频. 最能说明问题的是在不同带宽限制(150Kbps, 300 kbps, 600 kbps, 1200 kbps):

  1. 从全带宽开始,然后在播放10秒后调回到较低的带宽
  2. 从较低带宽开始,并在播放10秒后取消限制.

一些指导方针

这三个播放器处理动态流媒体的方式都不一样. 有一件事被证明是正确的,那就是 1080p 玩家非常出色. 它能够检测到各种网络操作,并且几乎在所有时间都能平稳地切换流. 这表明动态流媒体背后的基本技术工作得非常好. 其他玩家——jw玩家5.1和Flowplayer 3.1.5支持动态流,但不擅长处理所有相同的测试 1080p 参考球员处理轻松. 自 源代码到1080p 是免费的,我希望我们能在其他玩家的未来版本中看到改进.

三个最关键的成功因素是:  

  1. 编码的关键帧间隔,
  2. 播放器的缓冲长度配置,以及
  3. 媒体文件的比特率间距和数量.

关键帧间隔: 当服务器收到切换到另一个流的请求时, 它将尝试通过排列两个文件中的关键帧来进行平滑切换. 如果你的关键帧间隔太远, 服务器可以强制切换, 但它不一定是优雅的. 最好的方法是为所有流设置一个固定的关键帧间隔,以保证有足够的关键帧来促进流切换.

Bufferlength:  如果可以控制bufferlength,您可能会认为缓冲区越大越好. 不幸的是,实际情况比这更复杂. 在实践中, 我发现设置一个更大的缓冲区实际上会让玩家更加迟钝地感知网络条件的变化. 特别是在测试JW FLV播放器, 理想的缓冲长度似乎是关键帧间隔的2倍.

可用比特率的选择: 我进行的最成功的测试包括许多比特率相当接近的流. 当网络条件波动时, 一个涉及比特率或屏幕尺寸大幅跳跃的流开关会让人分心. 在更相似比特率之间的流切换通常几乎不明显,并且提供了更愉快的用户体验.

JW FLV播放器5.1

JW FLV播放器 支持Flash player 10上的动态流媒体.并支持Flash 9的比特率切换的不太动态的版本.或在使用不支持在播放期间切换的服务器时使用.

  • 对于HTTP渐进式下载,播放器将在启动时选择最佳流.
  • 用于HTTP流或RTMP流从fms3.0(或另一个不支持动态流的RTMP服务器), 播放器将在启动时选择和切换流, 寻求, 或者调整动作大小.
  • 从fms3的RTMP流.5, 播放器将在播放期间不断评估可用带宽,并在必要时呼叫切换.

更多的细节可以在 长尾视频的比特率切换文档.

在JW FLV播放器中激活动态流媒体, 您只需在RSS播放列表中提供可用媒体文件的列表. 这里有一个例子:

DynamicFlashtext

有必要在播放列表条目中同时使用比特率和宽度. 当用户切换到全屏观看时,播放器将使用宽度值来改变流, 前提是带宽可用.

一个在JW Player 5中运行的工作示例.我可以在网上找到 Flash动态流示例页面.

FlowPlayer

FlowPlayer 3.1.5 支持rtmp上的动态流,以及Flash 9的简单流切换.或在使用不支持在播放期间切换的服务器时使用. 要用Flowplayer做动态流,你需要它的 RTMP和bwcheck插件.

Flowplayer使用一个Javascript库来生成Flash播放器的代码. 播放器配置以JSON格式设置,并在其构造函数中传递给播放器. 一个工作示例和完整的代码清单在 Flash动态流示例页面,但我们将在这里浏览几个关键的摘录.

To embed Flowplayer, place an element in your HTML where you want the video to appear. 这个元素将在初始化时被播放器替换. HREF属性应该是 基本文件名 您已经使用了不同的比特率版本,加上文件扩展名. 在mp4文件的情况下,你需要在文件名前添加一个' mp4:'前缀. 对于命名为Spinoffs_2_Water_500Kbps的文件.和Spinoffs_2_Water_800Kbps.mp4, the tag looks like this:

DynamicFlashtexts

rtmp插件接受两个配置参数:插件本身的路径, 以及FMS服务器上的flash流路径.

DynamicFlashtext3

bwcheck插件是完成大部分工作的地方.

DynamicFlashtext4

完整的 Flowplayer bwcheck文档 包含更多示例和详细的API文档. 

流媒体覆盖
免费的
合资格订户
现在就订阅 最新一期 过去的问题
相关文章

如何开始使用亚马逊云前端流媒体

Amazon Cloudfront提供了一个新的, 灵活的低成本CDN解决方案, 特别是对于相对较小或间歇性流传输需求的用户. 下面是如何启动和运行.

提及的公司及供应商