• 以RTMP的方式播放录制好的视频


    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帮助文档。如果有不正确的地方,请大家指正,一起讨论一下!

  • 相关阅读:
    [转]find高级用法
    svn服务器配置
    awk (一)
    Linux下恢复ext3文件系统误删除文件ext3grep
    cobbler无人值守安装操作系统
    Linux下virtualbox网络配置
    nginx+uwsgi来部署Django
    solaris 网络设置
    rpm 使用说明
    linux 下安装mysql
  • 原文地址:https://www.cnblogs.com/ywxgod/p/2037010.html
Copyright © 2020-2023  润新知