0

我大部分时间都在搜索这个答案,但发现的问题多于答案。

我有一个 .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
    {
    }




 }
4

1 回答 1

2

我能够通过以下方式解决此问题:

  1. 剥离一切
  2. 将 FLVPlayback 对象添加到我的影片剪辑(包含布局)

当时间线到达此帧时调用此函数:

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;
 }

当不处理流媒体时,这似乎是最好的方法。我曾尝试先使用此组件,但当时我也在解决 f4v 无法正常工作的原因——因为我使用的是旧版本的 Flash。一旦我使用了 CS5,该组件就可以按预期使用 f4v 为我工作。

  • 仅限桌面
  • 动态源没问题
  • 如果您的应用是全屏的,请确保将 fullScreenTakeOver 设置为 false,否则视频将在您的应用中全屏显示。
于 2011-03-31T17:47:29.343 回答