« Return to Thread: (no subject)
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(); } } |
« Return to Thread: (no subject)
| Free embeddable forum powered by Nabble | Forum Help |