2010-04-28 194 views
2

我必須實現閃光流媒體,以重新啓動我們的視頻點播系統,但要麼因爲我之前沒有與閃存相關的系統工作,要麼因爲我太笨,我不能讓系統按照原有的方式工作。閃存媒體服務器流媒體:內容保護

我們需要:支票

  • 每個文件&用戶訪問控制上一個WebService每分鐘
  • 如果租賃時間跑出中流:取消流
  • RTMP流
  • 動態帶寬檢查
  • 使用Flowplayer進行視頻播放(現有許可證)

我有流媒體和帶寬檢查工作,我似乎無法得到訪問控制工作。我不知道我是如何知道播放哪個文件的,或者我可以如何根據客戶端發送的密鑰播放文件。

服務器端代碼(main.asc的):

application.onAppStart = function() 
{ 
     trace("Starting application"); 
     this.payload = new Array(); 

     for (var i=0; i < 1200; i++) { 
       this.payload[i] = Math.random();  //16K approx 
     } 
} 

application.onConnect = function(p_client, p_autoSenseBW) 
{ 
     p_client.writeAccess = ""; 

     trace("client at  : " + p_client.uri); 
     trace("client from : " + p_client.referrer); 
     trace("client page: " + p_client.pageUrl); 

     // try to get something from the query string: works 
     var i = 0; 
     for (i = 0; i < p_client.uri.length; ++i) 
     { 
       if (p_client.uri[i] == '?') 
       { 
         ++i; 
         break; 
       } 
     } 

     var loadVars = new LoadVars(); 
     loadVars.decode(p_client.uri.substr(i)); 
     trace(loadVars.toString()); 
     trace(loadVars['foo']); 

     // And accept the connection 
     this.acceptConnection(p_client); 
     trace("accepted!"); 

     //this.rejectConnection(p_client); 

     // A connection from Flash 8 & 9 FLV Playback component based client 
     // requires the following code. 
     if (p_autoSenseBW) 
     { 
       p_client.checkBandwidth(); 
     } 
     else 
     { 
       p_client.call("onBWDone"); 
     } 
     trace("Done connecting"); 
} 

application.onDisconnect = function(client) 
{ 
     trace("client disconnecting!"); 
} 

Client.prototype.getStreamLength = function(p_streamName) { 
     trace("getStreamLength:" + p_streamName); 
     return Stream.length(p_streamName); 
} 

Client.prototype.checkBandwidth = function() { 
     application.calculateClientBw(this); 
} 

application.calculateClientBw = function(p_client) 
{ 
/* lots of lines copied from an adobe sample, appear to work */ 
} 

客戶端代碼:

<head> 
    <script type="text/javascript" src="flowplayer-3.1.4.min.js"></script> 
</head> 
<body> 
    <a 
         class="rtmp" 
         href="rtmp://xx.xx.xx.xx/vod_project/test_flv.flv" 
         style="display: block; width: 520px; height: 330px" 
         id="player"> 
       </a> 

<script> 
         $f(
           "player", 
           "flowplayer-3.1.5.swf", 
           { 
             clip: { 
               provider: 'rtmp', 
               autoPlay: false, 
               url: 'test_flv' 
             }, 
             plugins: { 
               rtmp: { 
                 url: 'flowplayer.rtmp-3.1.3.swf', 
                 netConnectionUrl: 'rtmp://xx.xx.xx.xx/vod_project?foo=bar' 

               } 
             } 
           } 
         ); 
       </script> 
</body> 

我最初的想法是讓從查詢字符串的關鍵,要求網絡服務關於哪個文件和用戶的密鑰是用於播放文件,但我似乎無法找到如何從服務器端播放文件。

我的第二個想法是讓流水遊戲播放文件,傳遞鍵作爲查詢字符串,如果文件名和鍵不匹配,然後拒絕連接,但我似乎無法找出它正在播放哪個文件。

我剩下的唯一想法是:創建一個允許用戶打開並設置allowReadAccess的所有文件的列表,但是它被調用來允許這些文件,但由於當前的基礎設施,這將是笨拙的。

任何提示?

謝謝。

回答

0

我今天發現了FlowPlayers clip.connectionArgs,現在我正在爲其實施解決方案。

生成的代碼將沿着線的東西:

服務器端的main.asc的onConnect:

application.onConnect(p_client, p_userid, p_streamname) 
{ 
    if (p_client.check_access(p_userid, p_streamname)) 
    { 
    p_client.readAccess = "streams/_definst_/" + p_streamname; 
    this.acceptConnection(p_client); 
    } 
    else 
    { 
    this.rejectConnection(p_client); 
    } 
} 

客戶端:

$f(
    "player", 
    "flowplayer-3.1.5.swf", 
    { 
    clip: { 
     provider: 'rtmp', 
     autoPlay: false, 
     url: 'test_flv', 
     connectionArgs: ["12345", "test_flv"] 
    }, 
    plugins: { 
     rtmp: { 
     url: 'flowplayer.rtmp-3.1.3.swf', 
     netConnectionUrl: 'rtmp://xx.xx.xx.xx/vod_project?foo=bar' 
     } 
    } 
    } 
);