flash实现rtmp实时播放卡顿

alvis-lee 发布于 2017/09/16 10:12
阅读 591
收藏 0

我现在有一个使用flash实现rtmp实时播放的业务,我们一台设备有4个摄像头;首先我从服务器获取到一个rtmp的播放地址,然后使用as3的NetConnection和NetStream进行播放,下面是实例化NetStream的代码:

    _videoStream = new NetStream(_videoConn);
    _videoStream.addEventListener(NetStatusEvent.NET_STATUS, onVideoStreamNetStatusHandler, false, 0, true);
    _videoStream.addEventListener(ProgressEvent.PROGRESS, onVideoStreamProgressHandler, false, 0, true);
    _videoStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR,onAsyncErrorHandler,false,0,true);
    _videoStream.client = this;
    _videoStream.bufferTime = _bufferTime;  // 设置缓存时间
    _videoStream.bufferTimeMax = _bufferTimeMax; //设置缓存最大时间
    _videoStream.useHardwareDecoder = true;
    _videoStream.inBufferSeek = true;

下面是NetStream用到的其他属性:
_videoStream.time //[只读] 播放头的位置(播放的时间)。 
_videoStream.bufferLength //[只读] 数据当前存在于缓冲区中的秒数

以下是我出现的问题:
1,如果将_videoStream.bufferTime设置为0。4个摄像头实时播放没问题,但是在网络较差的情况下,会出现快速跳播的情况(比如在1秒内播放完3秒的视频),使用体验不要,不建议采用
2,如果将_videoStream.bufferTime设置大于0的值(比如3),4个摄像头第一次播放正常,在将4个摄像头关闭后再次播放4个摄像头时出现问题:
    a) 第一个摄像头播放时正常的,但是观察_videoStream.time(播放时间)不是从0开始计时的,具体是多少取决于上一次播放的时间,比如(10分钟)。正常情况_videoStream.time应该是从0开始计时。如果两次播放时间间隔比较久,就不会出现这种情况
   

   
    b)其他3个摄像头播放1秒后画面卡顿不播放(使用VLC可以播放画面不卡顿),观察_videoStream.time(播放时间)是从0开始计时的,并且在画面不动的情况下继续计时;观察_videoStream.bufferLength(当前缓存区时间)是一个非常大的值(比如300秒),实际并没有缓存这么多的时间,大概缓存300秒后画面开始播放。正常情况画面应该不会卡顿,_videoStream.bufferLength应该缓存几秒钟。如果两次播放时间间隔比较久,就不会出现这种情况
 

  

  
 
希望各位大牛能够帮我解答a,b问题,小弟万分感谢!

 

加载中
返回顶部
顶部