[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