·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

FMS3.5开发指南[精简版](3)

时间:2012-07-11 14:39baidu
第三章:开发媒体应用程序 1、关于媒体应用程序 点播:播放服务器上已经存在的视频,比如电视节目、广告或用户自己制作的视频。 直播:对直播流进行捕获、编码然后推向服务器,然后服务器将视频广播给其他用户,主

  第三章:开发媒体应用程序
  1、关于媒体应用程序
  点播:播放服务器上已经存在的视频,比如电视节目、广告或用户自己制作的视频。
  直播:对直播流进行捕获、编码然后推向服务器,然后服务器将视频广播给其他用户,主要应用在直播事件中,如商业会议、教学、体育直播和音乐会等。
  2、连接服务器
  在播放音频和视频之前要先与服务器建立连接(用NetStream类)。
var nc:NetConnection = new NetConnection();
nc.connect("rtmp://localhost/HelloServer");
  一旦建立连接,客户端就可以和服务器进行通信,一个流能同时携带音频、视频和数据等内容,但是流向只能是单向的,从服务器到客户端或从客户端到服务器。
FMS用虚拟目录来简化将URI映射到本地和网络,虚拟目录能让你更好的组织媒体文件,把视频发布和存储到不同的,事先设定的位置(在Vhost.xml中设置虚拟目录)。 然后可以根据网络情况连接到不同的目录(如高带宽和低带宽)。
(sample2:Hello Server):这是一个连接FMS的小例子,客户端界面有两个按钮:connect和close,实现的功能是,点击connect按钮,输出如下信息:
Okay, let's connect now
connected is: true ——NetConnection.connected的值
event.info.level: status
event.info.code: NetConnection.Connect.Success
Congratulations! you're connected
同样的,点击close按钮,输出如下信息:
Now we're disconnecting
connected is: false
event.info.level: status
event.info.code: NetConnection.Connect.Closed
Thanks! the connection has been closed
  3、管理连接
  客户端与服务器建立连接后,有各种原因会导致连接中断,比如网络中断、服务器停止等,连接状态的任何改变都会产生一个netStatus事件,它有两个参数来描述这个变化:code和level。(event.info.level:status,event.info.code:NetConnection.Connect.Success表示连接成功)。NetConnection.Connect的状态有:Success、Rejected、Failed、AppShutDowm和Closed。
  在服务器端,通过main.asc代码来管理连接,当有客户连接时,应用程序就收到一个application.onConnect事件,当连接中断,就收到一个application.onDisconnect事件。
  4、播放媒体文件
  客户端播放一个视频流,需要给NetStream.play()方法传一个URI,play方法有4个参数:name(视频文件名,不能包含以下字符:/ \ : * ? “ < > |)、start(开始时间s)、len(播放的持续时间s)和reset(是否清除播放列表中以前的播放文件)。
  一个视频文件都包含其相应的元数据(metadata),当视频流碰到元数据时,播放流的NetStream对象就发送一个onMetaData事件,要想读取metadata,就必须处理这个事件提取出包含元数据的info对象。Flash video exporter编码的视频文件的info对象包含以下参数:duration、width、height和framerate。
  使用XMP(Extensible Metadata Platform)元数据可以与视频流进行一些交互操作,比如当用户观看视频时,可以查看元数据和跳到指定位置观看。
(sample3:Media Player):用video对象来播放视频,当执行NetStream.play()时会触发onMetadata事件,即播放的同时在控制台也会输出元数据的信息。
  在播放一个视频文件之前可以先用FLVCheck工具检查视频是否正常。
  5、处理错误
  建立连接失败可能有以下原因:
(1)服务器与客户端之间的网络中断
(2)URI写错
(3)应用程序实例在服务器上不存在
(4)服务器关闭或者忙碌
(5)超过了服务器允许的最大连接数或带宽
  当视频流播放遇到问题时,你需要监控当前的帧速率、查看缓冲器流量信息、降低采样率并查找错误点,或者处理找不到视频源的问题(当服务器上不存在需要播放的视频时,会触发一个NetStream.Play.StreamNotFound事件,此时可以播放一个事先设定的默认的视频,比如广告)。告知用户出现的错误。你还可以监听和处理netStatus事件,用Administration Console来检修各种连接和流事件。
  6、播放列表
  播放列表(playlist)就是按顺序排列的一些视频流列表,可以在客户端创建,也能在服务器端创建。服务器把它当作一个连续的流处理并提供缓冲功能,因此在视频改变时用户也感受不到任何中断。可以设置每段视频的开始和持续播放的时间,还能替换(swap)播放列表中的视频。
  7、动态流
  (仅在fms3.5和flash player10以后的版本讨论)
  为了提供较好的用户体验,FMS可以根据用户的带宽和网络情况动态的改变视频流(不同比特率的相同视频)。当网络情况不好时,播放普清视频,当网络情况较好时,播放高清视频。此时需要这些视频的时间线相匹配,视频中的音频和其他数据都是同步发生的。
  Adobe建议当满足一下几个或全部标准时采用动态流:
(1)长视频
(2)视频文件很大
(3)高清视频(HD video)
(4)其他任何大度量的视频,比如全屏视频
(5)用户比较容易受带宽影响,比如家庭用户
  缓冲区长度、已下载的比特数和丢失的帧数等因素决定了是否需要转换播放流。刚开始播放时,选择低比特率的视频和设置一个小的缓冲区,然后开始监测用户带宽和缓冲区的填满情况,当带宽足够,并且缓冲区迅速填满而且保持稳定,那么就可以替换成一个高质量的视频了,反之,替换成一个低质量的视频。
用NetStream.play2()方法来改变播放视频,它含有5个参数:oldStreamName、streamName、start、len和transition(转换模式:switch表示转换成不同比特率的相同视频等),其中必须指定的是streamName和transition。
  在视频播放过程中,缓冲时间是可以动态改变的,当缓冲区满了的时候,增加buffertime,当缓冲区空了,就减小buffertime。(Sample:Buffer)
可以在日志文件中查看转换视频的一些信息。
  8、检测带宽(sample:Bandwidth)
  本地检测:检测带宽要调用NetConnection.call(),给它一个参数checkBandwidth,就能得到带宽的具体值,不需要服务器端代码(但是要确保Application.xml文件中BandwidthDetection的enable属性为true)。处理服务器上检测带宽事件需要执行onBWCheck(本地带宽检测)和onBWDone(测量带宽结束后调用)函数。
  另外还有基于脚本的带宽检测和从服务器端代码来检测带宽。(?)
  9、检测stream length(Sample:StreamLength)
  调用服务器端的Stream.length()方法来获得视频的长度,该长度是由服务器计算的,不同于onMetadata返回的duration(由用户或工具设定)。

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器