2012-04-19 10 views
0

私はfitcDemoアプリケーションのソースコードをRed5用に変更しようとしていて、それをサーバーに接続する前に何らかの形でユーザー名を認証するようにしていますが、どうやって始めたらいいかわかりません!
私は、クライアント接続時に呼び出されるメソッドと、クライアントアプリケーションからユーザー名を取得する方法がわからないということです。
私は誰かが私を助けることができるように、ここにソースコードを持っていきます。Red5の `fitcDemo`サンプルでユーザーを認証する方法は?

package org.xyz; 

import java.util.List; 
import java.util.Set; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.red5.server.adapter.ApplicationAdapter; 
import org.red5.server.api.IClient; 
import org.red5.server.api.IConnection; 
import org.red5.server.api.IScope; 
import org.red5.server.api.Red5; 
import org.red5.server.api.service.IPendingServiceCall; 
import org.red5.server.api.service.IPendingServiceCallback; 
import org.red5.server.api.service.IServiceCapableConnection; 
import org.red5.server.api.stream.IBroadcastStream; 
import org.red5.server.api.stream.IPlayItem; 
import org.red5.server.api.stream.IPlaylistSubscriberStream; 
import org.red5.server.api.stream.IStreamAwareScopeHandler; 
import org.red5.server.api.stream.ISubscriberStream; 


public class Application extends ApplicationAdapter 
    implements IPendingServiceCallback, IStreamAwareScopeHandler 
{ 
    protected static Log log = LogFactory.getLog(Application.class); 

    public boolean appStart(IScope scope) 
    { 
    return true; 
    } 

    public boolean appConnect(IConnection conn, Object[] params) 
    { 
    IServiceCapableConnection service = (IServiceCapableConnection)conn; 
    log.info("Client connected {} conn {}"); 
    service.invoke("setId", new Object[] { conn.getClient().getId() }, this); 
    return true; 
    } 

    public boolean appJoin(IClient client, IScope scope) 
    { 
    log.info("Client joined app {}"); 

    IConnection conn = Red5.getConnectionLocal(); 
    return true; 
    } 

    public void streamPublishStart(IBroadcastStream stream) 
    { 
    if (log.isDebugEnabled()) { 
     log.debug("stream broadcast start: {}"); 
    } 
    IConnection current = Red5.getConnectionLocal(); 
    for (Set<IConnection> connections : this.scope.getConnections()) 
     for (IConnection conn : connections) { 
     if (conn.equals(current)) 
     { 
      continue; 
     } 

     if ((conn instanceof IServiceCapableConnection)) { 
      ((IServiceCapableConnection)conn).invoke("newStream", new Object[] { stream.getPublishedName() }, this); 

      if (log.isDebugEnabled()) 
      log.debug("sending notification to {}"); 
     } 
     } 
    } 

    public void streamRecordStart(IBroadcastStream stream) 
    { 
    } 

    public void streamBroadcastClose(IBroadcastStream stream) 
    { 
    } 

    public void streamBroadcastStart(IBroadcastStream stream) 
    { 
    } 

    public void streamPlaylistItemPlay(IPlaylistSubscriberStream stream, IPlayItem item, boolean isLive) 
    { 
    } 

    public void streamPlaylistItemStop(IPlaylistSubscriberStream stream, IPlayItem item) 
    { 
    } 

    public void streamPlaylistVODItemPause(IPlaylistSubscriberStream stream, IPlayItem item, int position) 
    { 
    } 

    public void streamPlaylistVODItemResume(IPlaylistSubscriberStream stream, IPlayItem item, int position) 
    { 
    } 

    public void streamPlaylistVODItemSeek(IPlaylistSubscriberStream stream, IPlayItem item, int position) 
    { 
    } 

    public void streamSubscriberClose(ISubscriberStream stream) 
    { 
    } 

    public void streamSubscriberStart(ISubscriberStream stream) 
    { 
    } 

    public List<String> getStreams() 
    { 
    IConnection conn = Red5.getConnectionLocal(); 
    return getBroadcastStreamNames(conn.getScope()); 
    } 

    public void resultReceived(IPendingServiceCall call) 
    { 
    log.info("Received result {} for {}"); 
    } 
} 

答えて

1

Red5のはそれを行うための方法を提供していますが: How to Identify Publishers and Consumers using Red5 API 私はデータベースを使用して、異なるそれらを識別するために必要なので、これは私のアプローチでしたが。 データベースにすでにユーザー関連のテーブルをred5で接続しているとします。 このチュートリアルは、MySQL用のチュートリアルですが、データベース用に適切なJDBCドライバを使用することができます。 http://www.red5tutorials.net/index.php/Tutorials:MySQL_and_Red5 Red5ので

var nc:NetConnection = new NetConnection(); 
var userID:String = "foo"; 
nc.connect("rtmp://" + ipAddrOfRed5Server + "/fitcDemo", userID); 

public boolean appConnect(IConnection conn , Object[] params) 
{ 
    try { 
     String uID = (String)params[0];    
     //Run a query here to check if the user exists in the DB. 
      // If not, you can call rejectClient("Not an existing user!"); 
      // Once authenticated here, your normal logic follows 
    } 
    } catch(Exception e){ 
     e.printStackTrace(); 
     log.error("Error handling User connect"); 
    }  
    return true; 

} 
AS3を使用して

FlashでのNetConnectionのあなたは(接続中のクライアントからユーザーIDを送信する必要があり)

関連する問題