最近在做基于 NetStream 的 appendBytes() 方法的快速搜索(seek)。
由于渐进式下载不能直接seek到未下载完成的部分,而用FMS成本又比较高,因此采用了如下方法:
根据seek的时间点,获取距离最近的关键帧位置的字节数,然后请求从该帧到下一关键帧的字节,作为一个切片appendBytes到NetStream中。之后继续请求下一帧的切片并添加到NetStream中播放。由于每次请求两帧之间的数据,返回速度很快,响应也就快。
条件:
1,FLV文件的所有关键帧信息(例如 ... <bytes=392013 time=13.293/> ...),可以用FFMPEG获得;
2,准备一个Nginx插件,用来返回指定flv文件的指定字节片段;
有几个需要注意的地方:
1,需要先添加文件最开始的两个切片,然后才能seek到其他位置。
第一个片一般是FLV文件头以及metadata数据,第二个片是一个关键帧,包含一个video tag和一个audio tag,字节数都很小;
最开始的时候我以为只要添加了第一个切片就行了,实验的结果似乎表明第二个片是NetStream用来初始化byte parser所必须的。
本来最早想的是直接请求任意位置的切片就播放。
2,解析字节需要时间。这个发现的依据是,本来为了简化逻辑,把前两片作为第一片来请求,这样的话添加了第一片后,就可以认为NetStream准备好了。但是如果在添加这第一片后马上seek到其他片,发现播放会出现问题,比如有画面没声音。因此尝试了推迟添加后面seek的片,问题没有再现。
3,在seek时需要先用seek(0)清空NetStream的两个缓存,这样time属性和buffer属性才能归零。
A NetStream object has two buffers: the FIFO from appendBytes()
to the NetStream, and the playout buffer.
并且需要调用appendBytesAction(NetStreamAppendBytesAction.RESET_SEEK) 来告诉NetStream这是个seek操作。
4,NetStreamAppendBytesAction的三个参数都可能用到,需要好好看看文档。
5,无法截图!使用appendBytes之前需要netStream.play(null),也就没有地方去加载crossdomain文件。网上也没搜到解决办法。
相关推荐
netStream视频结束判断
NetConnection 和 NetStream 的状态检测 ================================================================ nc = new NetConnection(); nc.connect("rtmp://"+host+"/"+dir+"/"+name); //----------------------...
NetStream类的事件处理器 onStatus onMetaData回调方法
NetStream是基于网络流信息的统计与发布技术,对各种业务和不同QOS进行计费管理
华为的官方 netstream 技术白皮书
H3C SecBlade NetStream区分接口流量特性开局指导.pdf
flex两个netstream实现视频分段加载播放 。 适用于flash,flex
网络管理和监控配置指导-NetStream配置.pdf
H3C SR8800 NetStream技术白皮书-5W100-20080714.pdf
:NetStream是一种基于网络流信息的统计与发布技术,可以对网络中的通信量和资源使用情况进行分类和统计,基于各种业务和不同的QoS进行管理和计费。NetStream主要包括三个设备NDE、NSC、NDA。NDE负责流量采集和发送...
华为交换机NetStream配置及技术原理
netstream-查看器-java 用 Java 编写的 NetStream (GraphStream) Live Graph Viewer。 这个小而方便的程序为传入的 NetStream [1] 事件创建实时图形显示。 底层图形库是使用 MultiGraph [3] 实现的 GraphStream [2...
NetStream技术介绍,PDF文档,netstream提供报文统计功能,它根据报文的目的ip地址、目的端口号、源ip地址、源端口号、协议号和tos来区分流信息,并针对不同的流信息进行独立的数据统计。
华为设备部署NetStream配置实例.pdf
MP4播放器 视频netStream flexlite
AR G3企业路由器 NetStream技术文档.pdf
Netstream4000网络流解压卡,神龙卡(Netstream4000网络流解压卡)驱动for2K/xp
网络流一个简单的netstream解析器,支持nsv5,在huawei-ar2200上测试过
NetStream是华为技术有限公司的专利技术,是一种网络流信息的统计与发布技术。通 过NetStream技术输出的数据可以有很多种用途,包括: l 网络管理和规划 l 企业记账和分部门的计费 l ISP编制账单 l 数据储备 l 商业...
NetStream是华为技术有限公司的专利技术,是一种网络流信息的统计与发布技术。通 过NetStream技术输出的数据可以有很多种用途,包括: l 网络管理和规划 l 企业记账和分部门的计费 l ISP编制账单 l 数据储备 l 商业...