我知道播放FLV文件的方法有很多种,但考虑到我的项目要求,我需要使用URLStream和NetStream播放flv
下面是我正在测试的完整示例代码:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.NetStatusEvent;
import flash.events.ProgressEvent;
import flash.utils.ByteArray;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.NetStreamAppendBytesAction;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
import flash.net.URLStream;
/**
* ...
* @author Hadi Tavakoli
*/
public class Main extends Sprite
{
private var netConnection:NetConnection;
private var netStream:NetStream;
private var ul:URLStream;
private var video:Video;
private var bytes:ByteArray = new ByteArray();
private var _isSeek:Boolean = false;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
video = new Video();
addChild(video);
netConnection = new NetConnection();
netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionStatusHandler);
netConnection.connect(null);
}
private function netConnectionStatusHandler(ev:NetStatusEvent):void
{
switch(ev.info.code)
{
case 'NetConnection.Connect.Success':
ul = new URLStream();
ul.addEventListener(ProgressEvent.PROGRESS, onProgress);
ul.load(new URLRequest('01.flv'));
break;
}
}
private function onProgress(e:ProgressEvent):void
{
ul.readBytes(bytes, bytes.length);
if (!netStream)
{
netStream = new NetStream(netConnection);
netStream.client = { };
video.attachNetStream(netStream);
netStream.play(null);
trace("BEGIN")
netStream.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);
}
else
{
if (!_isSeek)
{
trace("SEEK")
netStream.appendBytesAction(NetStreamAppendBytesAction.RESET_SEEK);
_isSeek = true;
}
}
if (bytes.length == e.bytesTotal)
{
trace("END")
netStream.appendBytesAction(NetStreamAppendBytesAction.END_SEQUENCE);
}
netStream.appendBytes(bytes);
trace("-")
}
}
}我不确定我是否正确使用了"appendBytes“方法?视频会显示出来,但只会播放很少的第一帧,然后视频就会停止!
在我眼里,一切似乎都很好!对于我的问题在哪里,你有什么建议吗?
发布于 2013-06-18 03:24:55
我认为您不需要if (!_isSeek)块。它看起来像是在按顺序接收字节时将它们推入,因此永远不会有查找。看起来它将推送第一组字节,然后附加一个查找操作,并附加其余的字节。试着移除那个块,看看它是否工作。
否则,我认为这是可以的。
发布于 2015-05-29 19:47:28
在"ul.readBytes(bytes,bytes.length);“行中,我猜有一个bug。它对我来说也从来没有起过作用。它总是返回完整的长度(从0到可用字节)。所以它有一个巨大内存泄漏。但如果您使用的是flash player 11.4或更高版本,则可以像这样进行更改。
ul.position = bytes.length;
ul.readBytes(bytes);https://stackoverflow.com/questions/16586878
复制相似问题