如何在OSMF中播放flv格式的byteArray?

时间:2011-01-09 02:58:50

标签: flex actionscript-3 osmf

我正在开发一个flex的web应用程序,它具有记录运行时的功能,它包含每个帧的快照,然后将其编码为ByteArray以进行视频回放。

我目前正在使用NetStream.appendBytes()来播放ByteArray FLV。它正在运行,但我刚刚发现了OSMF,并且正在考虑将它集成到我的应用程序中。

可以在OSMF中播放flv byteArray吗?关于如何做到的一个例子将是非常好的。谢谢!

1 个答案:

答案 0 :(得分:4)

我现在能够在OSMF中播放flv bytearrays。事先,我已经能够通过创建一个扩展netStream并覆盖其play方法以使用appendbytes的新类来播放byteArray。所以我做的是让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编写某种插件以用于播放bytearrays。另一件事是,我真正需要的是在需要的情况下在播放器中连续追加。这就是为什么我仍然没有使用这个,并且平均时间我坚持使用我定制的“ByteStream播放器”,直到我弄清楚这一点。