2010-04-28 12 views
2

Je dois mettre en œuvre Flash Stream pour la relance de notre système de vidéo à la demande mais soit parce que je n'ai pas travaillé avec des systèmes liés flash avant ou parce que je suis trop stupide je ne peux pas faire fonctionner le système comme il le doit.Flash Media Server Streaming: Protection du contenu

Nous avons besoin:

  • par fichier & contrôle d'accès utilisateur avec des contrôles sur un WebService chaque minute
  • si la durée du bail a manqué à mi-parcours: l'annulation du flux
  • rtmp le streaming
  • lecture dynamique de bande passante
  • Lecture vidéo avec Flowplayer (licence existante)

J'ai le streaming et le contrôle de la bande passante, je n'arrive pas à faire fonctionner le contrôle d'accès. Je ne sais pas comment je sais quel fichier est lu ou comment je peux lire un fichier en fonction d'une clé envoyée par le client.

code côté serveur (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 */ 
} 

code côté client:

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

Ma première idée était d'obtenir une clé de la chaîne de requête, demander au service Web à propos de quel fichier et utilisateur cette clé est pour et jouer le fichier, mais je ne peux pas sembler savoir comment lire un fichier du côté serveur. Ma deuxième idée était de laisser flowplayer jouer un fichier, passer la clé comme chaîne de requête et si le nom de fichier et la clé ne correspondent pas, rejeter la connexion mais je n'arrive pas à trouver le fichier en cours de lecture. La seule idée restante que j'ai est: créer une liste de tous les fichiers que l'utilisateur est autorisé à ouvrir et définir allowReadAccess ou, cependant, il a été appelé pour autoriser ces fichiers, mais ce serait maladroit en raison de l'infrastructure actuelle.

Des indices?

Merci.

Répondre

0

J'ai trouvé les FlowPlayers clip.connectionArgs aujourd'hui et j'implémente une solution pour cela maintenant.

le code résultant sera quelque chose le long des lignes de:

main.asc côté serveur 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); 
    } 
} 

côté 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' 
     } 
    } 
    } 
);