2013年1月17日 星期四

P2P 指令同步播放影片

作者製作一個處理Peer-to-peer(P2P) 的物件(P2PCore), 它透過Action Script 原生的NetConnectionNetGroup, 簡單地傳送文字, 圖像或物件, 達成點對點資料傳送.


以下為大家介紹, 如何利用P2P 技術, 在iPad 與PC 之間同步播放影片: 
  1. 建立P2PCore 物件, 為它加入監聽事件:
    var _core:P2PCore = new P2PCore();
    _core.addEventListener(P2PEvent.LOAD,loadHandler);
    _core.addEventListener(P2PEvent.MESSAGE, messageHandler);
    

  2. 當P2PCore 連接成功, 為用戶介面加入監聽事件:
    function loadHandler(event:P2PEvent):void{
      scaleX1Btn.addEventListener(MouseEvent.CLICK, scaleX1ClickHandler);
      scaleX2Btn.addEventListener(MouseEvent.CLICK, scaleX2ClickHandler);
      video.addEventListener("stateChange", playheadUpdateHandler);
    }
    

  3. 當按下Scale x1 或Scale x2 按鈕, 透過P2PCore 廣播給所有裝置改變影片大小:
    function scaleX1ClickHandler(event:MouseEvent):void{
      video.setScale(1, 1);
      _core.sendObject({type:"setScale", value:1});
    }
    function scaleX2ClickHandler(event:MouseEvent):void{
      video.setScale(2, 2);
      _core.sendObject({type:"setScale", value:2});
    }
    

  4. 當改變影片播放位置, 透過P2PCore 廣播給所有裝置最新播放位置:
    function playheadUpdateHandler(event:Event):void{
      _core.sendObject({type:"playheadTime", value:video.playheadTime.toString()});
      video.play();
    }
    

  5. 若裝置接收廣播訊息, 改變影片大小或播放位置:
    function messageHandler(event:P2PEvent):void{
      var msg:P2PMessage = event.value as P2PMessage;
      switch(msg.data.type){
        case "setScale":
          video.setScale(msg.data.value, msg.data.value);
        break;
        case "playheadTime":
          // <----- only allow one controller
          video.removeEventListener("stateChange", playheadUpdateHandler);
          
          video.playheadTime = parseFloat(msg.data.value);
          video.play();
        break;
      }
    }
這個實例主要運用發出和接收指令, 達到影片同步播放功能, WiFi 穩定性會直接影響iPad 與PC 之間的同步效果. 若希望製作串流影片, 請參考這個連結.

大家可以 [下載] 範例試試看.

注意事項:
 - 在Flash Professional CS6 透過USB 連接iOS 安裝發佈請參考這個連結.
 - Flash Media Server 我們可以申請Adobe 公開伺服器 (rtmfp://stratus.adobe.com/) 作試驗或自行架設.

沒有留言: