我大部分时间都在搜索这个答案,但发现的问题多于答案。
我有一个.exe全屏Flash应用程序,它通过外部源加载视频文件(和许多其他东西)。一切都很好,除了当视频播放时,它经常会被切断并停止播放。它停止播放的地方是随机的。有时它不到2秒,有时会持续30秒,但从未让它完整的58秒。
我已跟踪加载到总数的字节并且它们匹配(它是本地引用的文件,没有网络)。
这是代码。如果有更好的方法(不涉及课程),请帮助。
function loadCaseVideo(sourceVideo:String):void {
//sourceVideo = reference link from XML data
if(!videoLoadedAlready){
var videoLoadedAlready:Boolean;
}
NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
var mNetConnection:NetConnection=new NetConnection();
mNetConnection.connect(null);
var mNetStream = new NetStream(mNetConnection);
var video = new Video();
video.width = 728;
video.height = 522;
video.y = 0;
video.x = 0;
video.attachNetStream(mNetStream);
videoHolder.videoInner.addChild(video);
mNetStream.client=new Object();
mNetStream.bufferTime=60;
mNetStream.play(sourceVideo);
mNetStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStreamStatusEvent);
function onNetStreamStatusEvent(event:NetStatusEvent):void
{
trace(event.info.code);
if (event.info.code == "NetStream.Play.Start")
{
//trace("NetStream.Play.Start");
//trace(mNetStream.bytesLoaded +", " + mNetStream.bytesTotal);
}
if (event.info.code == "NetStream.Play.StreamNotFound")
{
//trace("Video Not Found");
}
if (event.info.code == "NetStream.Buffer.Flush")
{
//I saw this being called so I ran a trace on it, these two are equal, meaning fully loaded?
trace('loaded: '+ mNetStream.bytesLoaded +", total: " + mNetStream.bytesTotal);
}
}
function onMetaData(metadata:Object):void
{
}
}
答案 0 :(得分:2)
我能够通过以下方式解决这个问题:
在时间轴到达此帧时调用此函数:
function loadCaseVideo(sourceVideo:String):void {
videoHolder.videoPlayer.width = 728;
videoHolder.videoPlayer.height = 522;
videoHolder.videoPlayer.x = 0;
videoHolder.videoPlayer.y = 0;
videoHolder.videoPlayer.fullScreenTakeOver = false;
videoHolder.videoPlayer.scaleMode = "exactFit";
videoHolder.videoPlayer.source = sourceVideo;
}
当不与STREAMING WEB交易时,这似乎是最好的方法。我曾尝试首先使用这个组件,但当时我也在解决为什么f4v无法工作 - 这是因为我使用的是旧版本的Flash。一旦我使用CS5,该组件就像f4v的预期一样为我工作。