2010-09-03 75 views
1

正在創建視頻播放器,並且出於某種原因沒有找到rtmp流。我必須錯過明顯的東西,但似乎無法找到在哪裏。我正在測試的流是rtmp://cp67126.edgefcs.net/ondemand/mediapm/osmf/content/test/akamai_10_year_f8_512K這絕對是。在AS3中找不到RTMP流

package { import com.bfwpub.data.*;

import flash.display.Sprite; 
import flash.events.AsyncErrorEvent; 
import flash.events.ErrorEvent; 
import flash.events.Event; 
import flash.events.IOErrorEvent; 
import flash.events.NetStatusEvent; 
import flash.events.SecurityErrorEvent; 
import flash.media.Video; 
import flash.net.NetConnection; 
import flash.net.NetStream; 
import flash.net.URLLoader; 
import flash.net.URLRequest; 
import flash.text.TextField; 

public class BFW_VideoPlayer extends Sprite 
{ 

    private static const PLAYER_CONFIG:String = "data/player_config.xml"; 

    private var _video:Video; 
    private var _playerData:PlayerData; 
    private var _videoData:VideoData; 
    private var _controlbarData:ControlBarData; 
    private var _videoPath:String; 

    private var _debugTxt:TextField; 

    // net connection object for net stream 
    private var _ncConnection:NetConnection; 
    // net stream object 
    private var _nsStream:NetStream; 


    public function BFW_VideoPlayer() 
    { 
     var xmlLoader:URLLoader = new URLLoader(); 
     xmlLoader.addEventListener(Event.COMPLETE, loadConfig); 
     xmlLoader.load(new URLRequest(PLAYER_CONFIG)); 
    } 

    private function loadConfig(e:Event):void 
    { 
     var config:XML = new XML(e.target.data); 

     //store data in Objects 
     _playerData = new PlayerData(); 
     _videoData = new VideoData(); 
     _controlbarData = new ControlBarData(); 


     //populate PlayerData 
     _playerData.autoPlay = [email protected]; 
     _playerData.autoRewind = [email protected]; 
     _playerData.smoothing = [email protected]; 
     _playerData.height = [email protected]; 
     _playerData.isLive = [email protected]; 
     _playerData.scaleMode = [email protected]; 
     _playerData.width = [email protected]; 

     //populate VideoData 
     _videoData.deliveryType = config.mediaElement.deliveryType; 
     _videoData.file = config.mediaElement.file; 
     _videoData.mediaPath = config.mediaElement.mediaPath; 
     _videoData.streamType = config.mediaElement.streamType; 
     _videoData.buffer = config.mediaElement.buffer; 

     //populate ControlBarData 
     _controlbarData.autoHide = config.controlBar.autoHide; 
     _controlbarData.captionPath = config.controlBar.captionPath; 
     _controlbarData.fullScreen = config.controlBar.fullScreen; 
     _controlbarData.skinPath = config.controlBar.skinPath; 

     //_videoPath = "rtmp://"+_videoData.mediaPath+_videoData.file; 
     _videoPath = "rtmp://cp67126.edgefcs.net/ondemand/mediapm/osmf/content/test/akamai_10_year_f8_512K" 

     createPlayer(); 

    } 

    private function createPlayer():void 
    { 
     _debugTxt = new TextField(); 
     _debugTxt.width = 200; 
     _debugTxt.height = 200; 
     this.addChild(_debugTxt); 

     _video = new Video(); 
     _video.height = _playerData.height; 
     _video.width = _playerData.width; 
     this.addChild(_video); 
     createConnection(); 
    } 


    private function createConnection():void 
    { 
     // create a new net connection, add event listener and connect 
     // to null because we don’t have a media server 
     _ncConnection = new NetConnection(); 
     _ncConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
     _ncConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
     _ncConnection.addEventListener(IOErrorEvent.IO_ERROR,errorHandler); 
     _ncConnection.addEventListener(AsyncErrorEvent.ASYNC_ERROR,metaHandler); 
     _ncConnection.connect(null); 
    } 

    /** Catch security errors. **/ 
    private function errorHandler(evt:ErrorEvent):void { 
     trace("[ErrorEvent]"+evt.text) 
    }; 

    /** Catch noncritical errors. **/ 
    private function metaHandler(evt:ErrorEvent):void { 
     trace("[ErrorEvent]"+evt.text) 
    }; 

    private function securityErrorHandler(event:SecurityErrorEvent):void { 
     trace("securityErrorHandler: " + event); 
    } 

    public function netStatusHandler(event:NetStatusEvent):void 
    { 
     trace("["+event.info.code+"]"); 
     _debugTxt.text += "["+event.info.code+"]\n"; 
     switch (event.info.code) { 
      case "NetConnection.Connect.Success": 
       connectStream(); 
       break; 
      case "NetStream.Play.StreamNotFound": 
       trace("Stream not found: " + _videoPath); 
       break; 
     } 
    } 

    private function connectStream():void { 
     _nsStream = new NetStream(_ncConnection); 
     _nsStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
     _nsStream.bufferTime = _videoData.buffer; 
     _nsStream.client = new Client(); 
     _video.attachNetStream(_nsStream); 
     _video.smoothing = _playerData.smoothing; 
     _nsStream.play(_videoPath); 
    } 
} 

}

+0

有趣的是,似乎如果我通過http://查看FVL,它的工作原理。必須是防火牆問題嗎? – abritez 2010-09-04 13:30:51

回答

4

喲亞歷克斯!這是戴夫,從Fusebox那天回想起我?你是怎樣的人?很酷,趕上你在這裏。

隨着rtmp的連接有點不同。試試這個:

_ncConnection.connect("rtmp://cp67126.edgefcs.net/ondemand/mediapm/osmf/content/test"); 
_nsStream.play("akamai_10_year_f8_512K"); 
+0

謝謝戴夫,這已經很長時間了,我們應該馬上趕上。我會在星期二測試一下。週五很晚,所以我很確定這會是一件簡單的事情。度過一個愉快的假期。 – abritez 2010-09-05 11:09:43

+0

這工作,再次感謝 – abritez 2010-09-07 13:00:28

+0

很酷,很高興幫助。是的,我們絕對趕上一段時間。 – Dave 2010-09-07 15:05:58