2012-09-30 38 views
0

我必須使用flash.media.Video組件來播放遠程視頻文件,因爲我在Red5中有一個不允許使用VideoPlayer的自定義身份驗證機制(CRAM-MD5)。我試圖使用OpenVideoPlayer,但它在服務器端失敗(Error execution execution:Service:null方法:播放Num Params:3 0:test/avatar.flv 1:NaN 2:NaN)。視頻組件的簡單視圖

我只需要在視頻組件的頂部有控制器:播放,暫停,停止,倒帶,進度條。請有人可以爲我推薦一個簡單的視圖嗎?或者任何解決方案都可以!

更新: 一個示例代碼,該togglePause工作不正常:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="640" minHeight="480" 
      initialize="init();"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<fx:Script> 
    <![CDATA[ 
     import flash.globalization.Collator; 

     import mx.utils.ObjectUtil; 
     import mx.controls.Alert; 

     private var nc:NetConnection; 
     private var ns:NetStream; 
     private var video:Video; 
     private var meta:Object; 
     private var videoURL:String = "test/avatar.flv"; 

     private function init():void { 

      var params:Object = { 
       user: "user", 
       video_id: 2 
      }; 

      nc = new NetConnection(); 
      nc.connect("rtmp://localhost/myapp", params); 
      nc.client = this; 
      nc.addEventListener(NetStatusEvent.NET_STATUS,onConnectionStatus); 
      nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR,onErrorHandler); 
      nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); 
     } 

     private function onConnectionStatus(event:NetStatusEvent):void { 

      var nsClient:Object = {}; 
      nsClient.onMetaData = ns_onMetaData; 
      nsClient.onCuePoint = ns_onCuePoint; 

      ns = new NetStream(nc); 
      ns.play(videoURL); 
      ns.client = nsClient; 

      video = new Video(); 
      video.attachNetStream(ns); 
      uic.addChild(video); 
     } 

     private function onErrorHandler(event:AsyncErrorEvent):void{ 
     } 

     private function onSecurityError(event:SecurityErrorEvent):void{ 
     } 

     private function ns_onMetaData(item:Object):void { 
     } 

     private function ns_onCuePoint(item:Object):void { 
     } 

     public function onBWDone():void { 
     } 

    ]]> 
</fx:Script> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<s:SpriteVisualElement id="uic" x="0" y="0" width="320" height="240" /> 
<mx:ControlBar x="10" y="330"> 
    <mx:Button label="Play/Pause" click="ns.togglePause();" /> 
    <mx:Button label="Rewind" click="ns.seek(0); ns.pause();" /> 
</mx:ControlBar> 

+0

我試圖自己做,但togglePause()有問題 - 凍結 - 我甚至沒有開始使它的進度條部分...:S – haxpanel

回答

0

我猜你正在使用NetStream類,與一起的NetConnection,負責檢索媒體來自Red5。

檢查NetStream的文檔:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html

應該有足夠的方法和事件來構建所需的控制(例如播放(),暫停()等)

另外,還要考慮尋找到開源媒體框架。它爲構建媒體播放器提供了很好的抽象,並允許創建插件以實現其他功能(例如,Red5身份驗證機制)。

此外,VideoPlayer組件是基於OSMF的,因此您可以開發自定義插件與您的Red5服務器進行通信,並將其與Flex的VideoPlayer一起使用。

+0

正如我所提到的,我試圖讓控件我自己,但在一開始我遇到了一個錯誤:播放/暫停並不像看起來那麼容易。 Pause() - resume()不工作,togglePause()暫停但返回1-2秒,如果我再次調用它,它會計數幾秒鐘並凍結。我希望你明白我不想更深入,並浪費時間與自定義搜索等。 – haxpanel

+0

然後,你可以分享你的至少一些代碼如何使用flash.media.Video? –

+0

我已經添加了示例代碼。 – haxpanel