0

私は一日中この答えを探しましたが、答えよりも多くの質問を見つけました。

外部ソースを介してビデオ ファイル (およびその他の多くのもの) を読み込む .exe フルスクリーン フラッシュ アプリがあります。ビデオが再生されると、しばしば途切れて再生が停止することを除いて、すべてが正常にリンクします. 再生が停止する場所はランダムです。2 秒未満の場合もあれば、30 秒続く場合もありますが、ビデオの 58 秒を完全に再生したことはありません。

合計にロードされたバイト数を追跡​​したところ、それらは一致しました (これはローカルで参照されたファイルであり、Web ではありません)。

これがコードです。これを行うためのより良い方法 (クラスを使用しない方法) があれば、助けてください。

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

ストリーミング Web を扱っていない場合、これが最善の方法のように思われました。最初にこのコンポーネントを使用しようとしましたが、その時点で f4v が機能しない理由も解決していました。これは、古いバージョンの Flash を使用していたためです。CS5 を使用すると、コンポーネントは f4v で期待どおりに機能しました。

  • デスクトップのみ
  • 動的ソースは問題ありません
  • アプリがフルスクリーンの場合は、fullScreenTakeOver を false に設定してください。そうしないと、動画がアプリでフルスクリーンになります。
于 2011-03-31T17:47:29.343 に答える