2011-03-30 73 views
0

我搜索了这个答案的大部分时间,但发现了更多的问题而不是答案。NetStream Flash AS3 - 视频缩短,没有迹象表明为什么

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




} 

回答

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

当不处理流式WEB时,这似乎是最好的方法。我曾试图首先使用这个组件,但那时我也解决了为什么f4v不能正常工作 - 这是因为我使用的是旧版本的Flash。一旦我使用CS5,该组件为f4v的预期工作。

  • 桌面只
  • 动态确定
  • 来源如果你的应用程序是全屏,请确保您设置fullScreenTakeOver以虚假或视频将在您的应用程序全屏。