2011-01-09 78 views
4

我正在开发一个flex应用程序,它具有通过快照每个帧然后将其编码成ByteArray进行视频回放来记录运行时间的功能。如何在OSMF中播放flv格式的byteArray?

我目前使用NetStream.appendBytes()播放ByteArray FLV。它正在工作,但我刚刚发现了OSMF,并将它与我的应用程序结合起来。

在OSMF中可以播放flv byteArray吗?如何做到这一点的例子会非常好。谢谢!

回答

4

我现在可以在OSMF中播放flv bytearrays。之前,我已经能够通过创建一个扩展netStream的新类来播放byteArray,并将其播放方法重写为使用appendbytes。所以我所做的就是让OSMF使用它。我这样做,创建这些类:1。 ByteStreamElement - 媒体元素 2. ByteStreamLoader - 扩展LoaderBase 3. ByteStreamLoadTrait - 扩展的LoadTrait

覆盖netstremas寻求/播放方法:

//manually dispatch seek event since we override seek() 
dispatchEvent(new NetStatusEvent(NetStatusEvent.NET_STATUS,false,false, {code:"NetStream.Play.Seek", level:"status"})); 

//look for byte position based on _seekTime value 
flvStream = _sfw.getFlvStream(false); 
_seekTime = parameters[1] * 1000; //netstream time in milliseconds 
_flvParser.parse(flvStream, false, flvTagSeeker); 
flvStream.position = _flvParserProcessed; 

//append flvtag from the new byte position to end of flv byteArray 
var tmp:ByteArray = new ByteArray(); 
flvStream.readBytes(tmp, 0, flvStream.bytesAvailable); 
_flvParserProcessed = 0; 
this.appendBytesAction(NetStreamAppendBytesAction.RESET_SEEK); 
appendBytes(tmp) 

,并用它像这个:

mediaPlayerSprite = new MediaPlayerSprite(); 
addChild(mediaPlayerSprite); 
mediaPlayerSprite.media = new ByteStreamElement(); 

我真的不确定,但如果这是最好的办法做到这一点。不知道最好是我创建了新的类,还是我应该为OSMF编写一些插件来用来播放字节码。另一件事是,我真正需要的是在需要的情况下在播放器中连续添加附加字节。这就是为什么我仍然没有使用这个,并在同一时间虐待坚持我的定制“ByteStream播放器”,直到我明白了这一点。

+1

你能否提供你用于实现的所有代码? – 2011-10-19 21:19:33