[Red5] (no subject)

Aily Raesi aily_r at yahoo.com
Tue Jul 7 12:01:22 PDT 2009


This is the class that I need to run,but imagine I want to run the class from a web browser,that's why I need to run this class from actionscript..
I add this class to the webapps in the server to test app for example,and a method to the application class that call this class, and I used the code below to run that method,this is the actionscript code:

nc=new NetConnection();
nc.connect("rtmp://localhost/test");
nc.onStatus=function(obj)
{
    for (e in obj)
    {
        trace(e + " : " +obj[e]);
    }
};
nc.onResult=function(obj)
{
trace("The result is " + obj);
};
nc.call("sample",nc)


and this is the java class that I need to be run from the browser client:
package org;
import java.io.File;
import java.util.Timer;

import org.apache.log4j.PropertyConfigurator;
import org.red5.io.ITag;
import org.red5.io.ITagReader;
import org.red5.io.flv.IFLV;
import org.red5.io.flv.impl.FLVReader;
import org.red5.io.flv.impl.FLVService;
import org.red5.io.flv.meta.IMetaData;
import org.red5.io.flv.meta.MetaData;
import org.red5.io.flv.meta.MetaService;
import org.red5.io.object.Deserializer;
import org.red5.io.object.Serializer;
import org.red5.io.utils.ObjectMap;
import org.red5.server.api.event.IEvent;
import org.red5.server.api.event.IEventDispatcher;
import org.red5.server.api.service.IPendingServiceCall;
import org.red5.server.api.service.IPendingServiceCallback;
import org.red5.server.cache.NoCacheImpl;
import org.red5.server.net.rtmp.Channel;
import org.red5.server.net.rtmp.RTMPClient;
import org.red5.server.net.rtmp.RTMPConnection;
import org.red5.server.net.rtmp.RTMPClient.INetStreamEventHandler;
import org.red5.server.net.rtmp.codec.RTMP;
import org.red5.server.net.rtmp.event.ChunkSize;
import org.red5.server.net.rtmp.event.IRTMPEvent;
import org.red5.server.net.rtmp.event.Notify;
import org.red5.server.net.rtmp.message.Header;
import org.red5.server.net.rtmp.status.StatusCodes;
import org.red5.server.stream.FileStreamSource;
import org.red5.server.*;
import org.red5.server.stream.message.RTMPMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class test extends RTMPClient implements INetStreamEventHandler, IPendingServiceCallback, IEventDispatcher
{
     private static final Logger logger = LoggerFactory.getLogger(test.class);

     private int streamId;
     String host = "127.0.0.1";
     String app = "oflaDemo";
     int port = 1935;
     static RTMPClient rClient=new RTMPClient();
      
     

     public test() {
        
             super();
             PropertyConfigurator.configure("C:/Users/aily/workspace/streamTest/src/log4j.properties"); 

             logger.debug("connecting, host: " + host + ", app: " + app + ", port: " + port);
             connect(host, port, app, this);
             logger.debug("done.");
            
                   
//             this.createStream(this);
     }
     protected void onChunkSize(RTMPConnection conn,
             Channel channel,
             Header source,
             ChunkSize chunkSize){}

     @Override
     public void connectionClosed(RTMPConnection conn, RTMP state) {
             logger.debug("connection closed");
             super.connectionClosed(conn, state);
             System.exit(0);
     }

     public void createStream(IPendingServiceCallback callback) {
         
             super.createStream(callback);
            
             logger.debug("create stream");
      //       invoke("createStream", this);
     }


    
     public void dispatchEvent(IEvent eve) {
             logger.debug("dispatchEvent : " + eve);

     }



    
     public void onStreamEvent(Notify notify) {
             logger.debug("onStreamEvent - " + notify);



             if (notify.getCall().getServiceMethodName().equals("onStatus")) {

                     ObjectMap<String, String> map = (ObjectMap) notify.getCall().getArguments()[0];
                     String code = (String) map.get("code");
                     String description = (String) map.get("description");
                     String details = (String) map.get("details");


                     if (StatusCodes.NS_PUBLISH_START.equals(code)) {
//                             log.debug("{} for {}", new Object[]{code,details});

                             FLVService service = new FLVService();
                             service.setSerializer(new Serializer());
                             service.setDeserializer(new Deserializer());

                             log.info("Started Publishing");

                         // Read In File And Publish The Data !!
                             try {

                                             File f = new File("../teststreams/IronMan.flv");
                                             log.debug("test: {}", f);

                                             IFLV flv = (IFLV) service.getStreamableFile(f);
                                             flv.setCache(NoCacheImpl.getInstance());

                                             ITagReader reader = flv.getReader();
                                             double framerate = 0.0;
                                             double duration = 0.0;
                                             if(reader.hasMoreTags())
                                             {
                                                 ITag tag = reader.readTag();
                                                 MetaService metaSr = new MetaService();
                                                 metaSr.setDeserializer(new Deserializer());
                                                 IMetaData metaData = null;
                                                 metaData=metaSr.readMetaData(tag.getBody());
                                                 framerate = metaData.getFrameRate();
                                                 duration=metaData.getDuration();
                                                 System.out.println("framerate = " + metaData.getFrameRate()+"Duratrion = "+duration);
                                                
                                             }
                                    
                                      //       FLVReader reader = new FLVReader(f,true);
                                             log.info(" reader created");
                                             
                                             //reader.

                                             FileStreamSource src = new FileStreamSource(reader);
                                             int i=0;
                                             log.info(" src created");
                              //               reader.decodeHeader();
                                             
                                             System.out.println("header = "+flv.getMetaData());

                                             while (src.hasMore())
                                             {
                                      //           i++;
                                      //           System.out.println("\nhas data seq ="+i);
                                                     IRTMPEvent event = src.dequeue();
                                                     RTMPMessage rtmpMsg = new RTMPMessage();
                                                     rtmpMsg.setBody(event);
                                                     publishStreamData(streamId, rtmpMsg);
                                    //                 log.info(" published seq nr");
                                     //                System.out.println("="+i);
                                            
                                  //                   Timer sendingTimer = new Timer("sending timer");
                               //                      while(j<5842000)
                               //                      {
                               //                          j++;
                                //                     }
                                             }
                                             System.out.println("\nEND!!!!!!!!!!");
////
////
                                             disconnect();
                                             //deleteStream(streamId, this);
                                             //unpublish(streamId);

                             } catch (Exception ex) {
                                     
                                     log.error(ex.getCause().toString());
                             }
                     }

                     if (StatusCodes.NS_PLAY_STOP.equals(code)) {
                             logger.debug("onStatus code == NetStream.Play.Stop, disconnecting");
                             disconnect();
           }          }
      

     }
     



     
     synchronized public void resultReceived(IPendingServiceCall call) {
         
             logger.debug("service call result: " + call);

             Object result = call.getResult();

             if (result instanceof ObjectMap) {
                     if ("connect".equals(call.getServiceMethodName())) {
                             log.info("Connected");
                             createStream(this);
                     }
             }
             else {
                     if ("createStream".equals(call.getServiceMethodName())) {
                             if (result instanceof Integer) {
                                     Integer streamIdInt = (Integer) result;
                                     streamId = streamIdInt.intValue();
                                     log.debug("createStream result stream id: " + streamId);
                                     publish(streamId, "red5StreamDemo", "live", this);
                                     log.debug("published stream: " + streamId);
                             } else {
                                     log.debug("DISCONNECT!!!!!");
                                     disconnect();
                             }
                     }
             }
     

     }
     public static void main(String[] args)
     {
        new test();
        
         
     }
   
     }
 
     

   






      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://osflash.org/pipermail/red5_osflash.org/attachments/20090707/c17be961/attachment-0001.html>


More information about the Red5 mailing list