
Some parts of this message have been removed.
Learn more about Nabble's
security policy.
You do not wait for onstatus event befor you make
your call.
Fatal mistake.
----- Original Message -----
Sent: Tuesday, July 07, 2009 12:01
PM
Subject: [Red5] (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();
}
}
|
_______________________________________________
Red5 mailing
list
Red5@...
http://osflash.org/mailman/listinfo/red5_osflash.org
_______________________________________________
Red5 mailing list
Red5@...
http://osflash.org/mailman/listinfo/red5_osflash.org