使用Flash实现rtmp直播视频播放卡顿

发布于 2022-09-05 22:15:13 字数 2104 浏览 29 评论 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问题,小弟万分感谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文