Flex/Flash完全缓冲来自Wowza的rtmp流

Flex/Flash完全缓冲来自Wowza的rtmp流,flash,apache-flex,video,buffering,wowza,Flash,Apache Flex,Video,Buffering,Wowza,我在尝试使用内部flash播放器完全缓冲来自Wowza媒体服务器的预录rtmp流时遇到了一些问题。完全预缓冲视频的要求来自管理层。必须能够脱机查看整个视频 当netConnection对象获得连接时,我创建NetStream对象,为其设置元数据事件处理程序,将NetStream.maxBufferTime设置为视频的完整持续时间。另外,在创建NetStream时,我会在视频组件中添加一个Event.ENTER_FRAME listener,以便它检查视频何时加载(它有一个宽度),从而在第一帧上暂

我在尝试使用内部flash播放器完全缓冲来自Wowza媒体服务器的预录rtmp流时遇到了一些问题。完全预缓冲视频的要求来自管理层。必须能够脱机查看整个视频

当netConnection对象获得连接时,我创建NetStream对象,为其设置元数据事件处理程序,将NetStream.maxBufferTime设置为视频的完整持续时间。另外,在创建NetStream时,我会在视频组件中添加一个Event.ENTER_FRAME listener,以便它检查视频何时加载(它有一个宽度),从而在第一帧上暂停

然后我开始播放netstream中的视频。当接收到元数据事件时,缓冲区被设置,当第一帧被下载并显示在视频对象上时,播放器在第一帧上暂停,但继续在缓冲区中加载视频。现在,当我跟踪缓冲区(NetStream.bufferLength)时,我注意到以下现象,这是我最悲伤的原因:

如果NetStream.maxBufferTime设置为视频长度的100%,则视频将被完全缓冲,大约四秒钟后,播放头(NetStream.time)将移动到视频的末尾。但是,当我在Linux系统上恢复播放时,视频显示正常,但播放头保持在100%(这对自定义提示点处理造成了严重破坏)。在windows系统上,播放头也保持在100%,但视频以正常速度的100倍播放

当缓冲区达到100%时,会触发NetStream.buffer.flush和NetStream.play.stop(?!?!)事件,但播放器不会对这两个事件做出反应,因此对我来说,这似乎是flash NetStream或Wowza中的一个错误

但是,如果我将NetStream.maxBufferTime设置为(视频长度-0.4),缓冲将在流结束之前停止,NetStream.Play.stop不会被触发,并且播放头会停留在第一帧,但这感觉有点太粗糙了

渐进式下载也不是一个解决方案,因为至少部分(如果不是全部的话)视频必须至少在某种程度上受到保护,不被复制

有什么建议吗

Wowza是2.0版本,flex是4.1版本以支持flash 10.1,流要么用flex/flash记录器记录,要么上传到服务器并转换为h.264(两者都表现出这种行为),flash版本范围从10.1到11.0


编辑:看来,我们在这个问题上的最终途径是,任何需要保护的视频都将作为rtmp流使用,并具有最小的缓冲,而公共视频将作为渐进式下载的服务器。正如评论中提到的,rtmp不应该做缓冲,所以我们所做的基本上是错误的。供将来参考:不要缓冲超过几秒钟的rtmp流。

我不太确定您的答案-但是,我的第一个问题肯定是,为什么要尝试缓冲流视频的整个长度?我不明白答案-只是想收集更多信息

是的,直到50个代表都很差劲,才能发表评论,这就增加了询问更多信息的障碍。无论如何,这是一个有效的问题。整个视频加载到缓冲区的要求来自于管理。必须能够离线观看。有趣。我想在这种情况下,我根本不需要麻烦去流根目录。我的评论编辑时间过期了:(只需从Web服务器进行渐进式下载,您可能会得到更好的服务。流媒体背后的while思想是在查看时不存储任何内容。您有一些选项-可以配置IIS-只需添加相关的MIME类型。Nginx-对于Apache-如果您有更多问题,请告诉我!很好的建议,除了progressive下载不是一个真正的选择,因为某些(如果不是所有)视频需要某种程度的内容保护。规范中的内容如下:像youtube那样将其放入缓冲区,但视频必须受到保护……因此我们研究的第一件事是“youtube方式”,即渐进式下载。当然,如果有办法支持使用渐进式下载时检测视频。。