我的项目有一个主加载程序,可以加载项目的所有资产。我需要加载一些我的视频。
视频有16mb,我想在主加载器完成后加载3mb。
我尝试使用Netconnection / Netstream打开一个新连接来加载3mb并关闭连接,但是当项目启动并播放视频时,会打开一个新连接,从头开始加载它。
我正试图找到一种方法,我可以使用已经加载的3mb。这样,用户无需等待主加载器和辅助加载器(buffertime)。
那是我的代码,对不起伙计。
var loader:Loader = new Loader();
var nc:NetConnection = new NetConnection();
var ns:NetStream = new NetStream(nc);
var client:Object = new Object();
var swfRatio:Number;
var videoRatio:Number;
function init():void
{
nc.connect(null);
client.onCuePoint = cuePointHandler;
client.onMetaData = metaDataHandler;
ns.client = client;
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressLoader);
addEventListener(Event.ENTER_FRAME, progressTotal);
loader.load(new URLRequest("swf/main.swf"));
ns.play("f4v/main_movie.f4v");
ns.pause();
}
function progressLoader(event:ProgressEvent):void
{
swfRatio = (event.bytesLoaded / event.bytesTotal);
}
function progressTotal():void
{
//Here i get the amount that i want to preload from my video, in this case i want 3mb or 3072000 bytes
videoRatio = (ns.bytesLoaded / 3072000);
//This is a variable that i use to fill my loader asset and verify if my content its totaly loaded.
var frameValue:int = ((videoRatio + swfRatio) / 2) * 100;
if (frameValue >= 100)
{
removeEventListener(Event.ENTER_FRAME, progressTotal);
// Here i close my connection, i suppose that i need to use the same connection in my player.
ns.close();
ns = null;
nc.close();
nc = null;
loaderComplete();
}
}
function loaderComplete():void
{
removeChild(assetLoader);
//Here i add my player to the stage, i want to use the preloaded video with him.
addChild(loader.content);
}
function cuePointHandler(infoObject:Object):void {
trace(infoObject.name);
}
function metaDataHandler(infoObject:Object):void {
trace("metaData");
}
然后在我的播放器中,我刚刚加载并添加到舞台上,我正在使用OSMF来帮助我控制。
为了测试“预装视频”我正在这样做:
private var mediaPlayer:MediaPlayerSprite;
private function _init(e:Event):void
{
this.removeEventListener(Event.ADDED_TO_STAGE, _init);
mediaPlayer = new MediaPlayerSprite();
addChild(mediaPlayer);
//And here OSMF start to load the entire main_movie.f4v again.
mediaPlayer.resource = new URLResource("f4v/main_movie.f4v");
}
答案 0 :(得分:0)
如果您完全放下视频,看起来您的策略会奏效。我假设如果视频完全下载,浏览器可以对其进行缓存并将其提供给下一个NetStream
。
你的策略看起来不错。你正在做什么(播放,然后立即暂停视频)是开始缓冲视频的方式。但是由于有两个NetStream
被使用(一个由主加载器,另一个由OSMF播放器),这将无效。
也许您可以设计一个方案,将NetStream
从主加载器传递到加载的SWF(main.swf)。这样它就可以使用已下载的数据。只是一个想法,我从来没有尝试过这个。
另一个想法是让你的main.swf中的OSMF播放器进行缓冲。这意味着只有在加载main.swf之后才会开始缓冲(这可能为时已晚)。