·您当前的位置:首页 > 技术教程 > Rtmp技术 >

[AS3]RTMP点播方式播放视频文件的原理介绍

时间:2012-12-05 09:44mysjtu.com
as3中播放视频主要用到NetStream类,调用NetStream.play()方法即可播放视频,就是说:如果您要以rtmp方式做视频点播,就用NetStream.play(streamName,0)是比较好的。

  as3中播放视频主要用到NetStream类,调用NetStream.play()方法即可播放视频。

  play方法常用参数:
  1.name:Object--视频流的名称,或者文件的uri地址
  2.Start:Number--有三个有效的值0或者大于0,表示播放的是录制好的视频流;-1表示播放实时流;-2表示实时流优先播放,即:先会查找是否有实时流,如果有,则播放。如果没有,则查找是否有录制的视频,如果有,则播放。如果没有,则打开实时流。

  就是说:如果您要以rtmp方式做视频点播,就用NetStream.play(streamName,0)是比较好的。第二个参数如果不传值,默认为-2。

  流播放细节:

  当执行NetStream.play(streamName,0)时,FMS会向客户端发送以下状态:

NetStream.Play.Reset
NetStream.Play.Start
NetStream.Buffer.Full

  当客户端收到NetStream.Play.Start状态后,如果流上有元数据,则会触发onMetaData事件,从此事件中我们通常可以获取视频的编码,帧频,帧大小,时长等信息,此时视频还是没有开始播放的,知道收到NetStream.Buffer.Full状态,此时视频才真正开始播放。也就是说onMetaData事件会在视频播放之前触发,这样视频播放前就能获取其时长。

  具体视频中是否包括元数据,元数据中可能包括哪些信息,这些决定于压缩视频的工具,或者发布视频的人!

从NetStream.Play.Start到NetStream.Buffer.Full的时间是一个视频缓冲的时间,可以用NetStream的bufferTime设置。

  当播放到流的结尾时,FMS会向客户端发送以下状态:

NetStream.Play.Stop
NetStream.Buffer.Flush
NetStream.Buffer.Empty

  当流要结束时,FMS首先停止发送流数据到客户端,此时客户端会收到NetStream.Play.Stop状态,但此时视频并未停止播放,NetStream会继续读取缓冲区得视频流数据播放视频,此时NetStream.Buffer.Flush状态会触发(可能不止一次),直到NetStream.Buffer.Empty状态到达,此时视频播放真正停止。
  当进行seek操作时(查找成功),FMS会向客户端发送以下状态:
NetStream.Seek.Notify
NetStream.Buffer.Full

  FMS默认配置中有个参数设置查找时的行为,即默认是查找到目标位置最近的关键帧,所以有时候查找到某个时间时,可能播放进度会显示到此时间前或者后的位置。NetStream.Seek.Notify状态表示查找成功,但此时视频是停止状态的,直到缓冲区写满,即收到NetStream.Buffer.Full状态才真的开始播放,所以查找时不可避免有一点延时!

  如果是用http方式播放录制的视频流,而不是rtmp方式,则播放细节又有所不同:
当播放到流的结尾时,FMS会向客户端发送以下状态:

NetStream.Buffer.Flush
NetStream.Play.Stop

  注意:NetStream.Buffer.Flush可能会有很多次,且没有收到NetStream.Buffer.Empty状态。

  以上结论,只是我个人经过不完全测试得出,同时也参看了一些资料,还有《Programming Flash Communication Server》和as3帮助文档。如果有不正确的地方,请大家指正,一起讨论一下!

极酷rtmp流媒体播放器2

极酷rtmp流媒体播放器2

极酷rtmp流媒体播放器2

极酷rtmp流媒体播放器2

极酷rtmp流媒体播放器2

极酷rtmp流媒体播放器2

极酷阳光RTMP流媒体播放器CuSunPlayerV2.0:[ 演示1 ] 更多演示请点击进入[ 极酷阳光播放器V2专栏 ]

热门文章推荐

请稍候...

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

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