[Red5] Publishing a stream with RTMPClient

Jonathan Hawkes jonathan at brownrice.com
Sun Sep 6 18:31:20 PDT 2009


Hello all,

First let me say thanks for such a neat OS project. The demos are up and 
working perfectly, but what I need to do is not publish video from a 
Flash client but from a server side application. RTMPClient looked like 
exactly what I was looking for. I searched and found the following code 
sample, which rather naively attempts to 'live' publish from a file. My 
source will ultimately be a network stream not a file, but I want to get 
something simple working before I pursue this course too much further.

When I run the sample code, I don't get any errors, but it simply 
appears to do nothing. At the bottom is my debug output. One curious 
thing is that "Body Data" is always null.

On a side note, is 'publishStreamData' blocking or non-blocking? If 
non-blocking and publishing to a queue, will it eventually block and 
cause back-pressure or is the queue unlimited in size or does it simply 
drop messages after some point?

I know this is a lot of questions, but if anyone could point me in the 
right direction (or towards some more complete documentation) for 
RTMPClient, I would appreciate it.

Thanks!


public class Main extends RTMPClient
        implements INetStreamEventHandler, IPendingServiceCallback {

    private static final int STOPPED = 0;
    private static final int CONNECTING = 1;
    private static final int STREAM_CREATING = 2;
    private static final int PUBLISHING = 3;
    private static final int PUBLISHED = 4;

    private String host;
    private int port;
    private String app;
    private int state;
    private String publishName;
    private int streamId;

    public Main(String app) {
        this("localhost", 1935, app);
    }

    public Main(String host, int port, String app) {
        this.host = host;
        this.port = port;
        this.app = app;
        state = STOPPED;
        setServiceProvider(this);
    }

    public void start(String publishName) {
        state = CONNECTING;
        this.publishName = publishName;
        connect(host, port, app, this);
    }

    public void stop() {
        if (state >= STREAM_CREATING) {
            disconnect();
        }
        state = STOPPED;
    }

    public void onStreamEvent(Notify notify) {
        ObjectMap<?, ?> map = (ObjectMap<?, ?>) 
notify.getCall().getArguments()[0];
        String code = (String) map.get("code");
        if (StatusCodes.NS_PUBLISH_START.equals(code)) {
            testPublish();
            state = PUBLISHED;
        }
    }

    public void resultReceived(IPendingServiceCall call) {

        if ("connect".equals(call.getServiceMethodName())) {
            state = STREAM_CREATING;
            createStream(this);
        } else if ("createStream".equals(call.getServiceMethodName())) {
            state = PUBLISHING;
            Object result = call.getResult();
            if (result instanceof Integer) {
                Integer streamIdInt = (Integer) result;
                streamId = streamIdInt.intValue();
                publish(streamIdInt.intValue(), publishName, "live", this);
            } else {
                disconnect();
                state = STOPPED;
            }
        }
    }

    public void onBWDone() {
        // NOOP
    }

    private void testPublish() {

        try {
            
            File f = new File("/Users/jonathan/Projects/red5" +
                              "/java/server/trunk/dist" +
                              "/webapps/oflaDemo/streams/toystory3.flv");
            FLV flv = new FLV(f);
            flv.setCache(NoCacheImpl.getInstance());

            FileStreamSource src = new FileStreamSource(flv.getReader());
            while (src.hasMore()) {
                RTMPMessage rtmpMsg = new RTMPMessage();
                rtmpMsg.setBody(src.dequeue());

                publishStreamData(streamId, rtmpMsg);
            }

            stop();
            System.exit(0);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }



    public static void main(String[] args) {

        Main program = new Main("oflaDemo");
        program.start("red5StreamDemo");
    }
}



And the debug is....



18:39:14.031 [main] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler - connect 
server: localhost port 1935 application oflaDemo connectCallback 
rtmppub.Main at 4a79717e
18:39:14.049 [main] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler - connect 
server: localhost port 1935 connectionParams {objectEncoding=0, 
app=oflaDemo, flashVer=WIN 9,0,115,0, fpad=false, 
tcUrl=rtmp://localhost:1935/oflaDemo, audioCodecs=1639, videoFunction=1, 
pageUrl=null, path=oflaDemo, capabilities=15, swfUrl=null, 
videoCodecs=252} connectCallback rtmppub.Main at 4a79717e 
conectCallArguments null
18:39:14.185 [NioProcessor-1] DEBUG o.r.s.net.rtmp.RTMPMinaIoHandler - 
Session created
18:39:14.228 [NioProcessor-1] DEBUG o.r.s.net.rtmp.RTMPClientConnManager 
- Creating connection, class: org.red5.server.net.rtmp.RTMPMinaConnection
18:39:14.249 [NioProcessor-1] DEBUG org.red5.server.BaseConnection - New 
BaseConnection - type: persistent host: null remoteAddress: null 
remotePort: 0 path: null sessionId: null
18:39:14.250 [NioProcessor-1] DEBUG org.red5.server.BaseConnection - 
Params: null
18:39:14.250 [NioProcessor-1] DEBUG o.r.s.net.rtmp.RTMPMinaConnection - 
RTMPMinaConnection created
18:39:14.250 [NioProcessor-1] DEBUG o.r.s.net.rtmp.RTMPClientConnManager 
- Connection id set 0
18:39:14.250 [NioProcessor-1] DEBUG o.r.s.net.rtmp.RTMPClientConnManager 
- Connection added to the map
18:39:14.256 [NioProcessor-1] DEBUG o.r.server.net.rtmp.RTMPConnection - 
Set state: [RTMP at 6a8c436b]
18:39:14.272 [NioProcessor-1] DEBUG o.r.s.net.rtmp.RTMPMinaIoHandler - 
Handshake 1st phase
18:39:14.820 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message sent
18:39:14.821 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - 
Processing a MESSAGE_RECEIVED for session 1
18:39:14.824 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Start: 0
18:39:14.824 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Handshake init too small, buffering. remaining: 2048
18:39:14.825 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - 
Processing a MESSAGE_RECEIVED for session 1
18:39:14.825 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Start: 0
18:39:14.826 [NioProcessor-1] DEBUG o.r.s.net.rtmp.RTMPMinaIoHandler - 
Handshake 3d phase - size: 3073
18:39:14.826 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message sent
18:39:14.826 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- connectionOpened
18:39:14.829 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- Writing 'connect' invoke: Invoke: Service: null Method: connect No 
params, invokeId: 1
18:39:14.835 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolEncoder 
- This is a pending call, send request
18:39:14.835 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
Sep 6, 2009 6:39:14 PM net.sf.ehcache.config.ConfigurationFactory 
parseConfiguration
WARNING: No configuration found. Configuring ehcache from 
ehcache-failsafe.xml  found in the classpath: 
jar:file:/Users/jonathan/Projects/red5/java/server/trunk/dist/lib/ehcache-1.6.1.jar!/ehcache-failsafe.xml
18:39:15.360 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.360 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.360 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.360 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.360 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
writeComplex
18:39:15.360 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
writeListType
18:39:15.360 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
writeArrayType
18:39:15.361 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
writeXMLType
18:39:15.368 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.370 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.371 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.388 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.388 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.388 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.388 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.395 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.395 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.399 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.399 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.399 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.399 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.399 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.399 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.400 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.400 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.400 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.400 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.400 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.400 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.400 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.400 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.400 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.400 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolEncoder 
- Writing params
18:39:15.405 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message sent
18:39:15.582 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - 
Processing a MESSAGE_RECEIVED for session 1
18:39:15.583 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Start: 0
18:39:15.586 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.587 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.587 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Action onBWDone
18:39:15.587 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:15.587 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:15.587 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 1
18:39:15.587 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: null
18:39:15.588 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Num params: 0
18:39:15.588 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message received, header: ChannelId: 3, Timer: 0, Relative: false, 
Size: 21, DataType: 20, StreamId: 0
18:39:15.588 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- onInvoke: Invoke: Service: null Method: onBWDone Num Params: 0, 
invokeId: 2
18:39:15.598 [NioProcessor-1] DEBUG org.red5.server.service.ServiceUtils 
- Method not found using exact parameter types
18:39:15.599 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: main
18:39:15.600 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.600 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: start
18:39:15.600 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.600 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: stop
18:39:15.600 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.600 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: onStreamEvent
18:39:15.600 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.600 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: resultReceived
18:39:15.600 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.600 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: onBWDone
18:39:15.601 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Param length not the same
18:39:15.601 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: makeDefaultConnectionParams
18:39:15.601 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.601 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: invoke
18:39:15.601 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: invoke
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: handleException
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: connect
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: connect
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: connect
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: connect
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: connect
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: createStream
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: setServiceProvider
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: disconnect
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.602 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: publish
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: publishStreamData
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: getCodecFactory
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: setCodecFactory
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: getConnManager
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: setConnectionClosedHandler
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: setExceptionHandler
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: getSharedObject
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: unpublish
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: play
18:39:15.603 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: connectionOpened
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: connectionClosed
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: setStreamEventDispatcher
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: getStreamId
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: setApplicationContext
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: messageReceived
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: messageSent
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: wait
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: wait
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: wait
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.604 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: hashCode
18:39:15.605 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.605 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: getClass
18:39:15.605 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.605 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: equals
18:39:15.605 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.605 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: toString
18:39:15.605 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.605 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: notify
18:39:15.606 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.606 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name: notifyAll
18:39:15.606 [NioProcessor-1] DEBUG o.r.server.service.ConversionUtils - 
Method name not the same
18:39:15.606 [NioProcessor-1] DEBUG org.red5.server.service.ServiceUtils 
- Found 0 methods
18:39:15.606 [NioProcessor-1] DEBUG org.red5.server.service.ServiceUtils 
- Exact method found (skipping list): onBWDone
18:39:15.624 [NioProcessor-1] DEBUG o.red5.server.service.ServiceInvoker 
- Invoking method: public void rtmppub.Main.onBWDone()
18:39:15.624 [NioProcessor-1] DEBUG o.red5.server.service.ServiceInvoker 
- result: null
18:39:15.624 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- Pending call result is: null
18:39:15.624 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- Sending empty call reply: Invoke: Service: null Method: onBWDone Num 
Params: 0
18:39:15.624 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolEncoder 
- Call has been executed, send result
18:39:15.624 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.625 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.625 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.625 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.625 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.625 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.625 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolEncoder 
- Writing result: null
18:39:15.625 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.625 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.626 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - 
Processing a MESSAGE_RECEIVED for session 1
18:39:15.626 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Start: 0
18:39:15.627 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Start: 16
18:39:15.628 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Start: 30
18:39:15.629 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Start: 166
18:39:15.629 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.629 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.629 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Action _result
18:39:15.629 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:15.629 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:15.629 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 1
18:39:15.629 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: null
18:39:15.629 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 9
18:39:15.629 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Object
18:39:15.629 [NioProcessor-1] DEBUG org.red5.io.amf.Input - readObject: null
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - read map
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 5
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 161
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 23 limit: 28
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: level
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - property: level
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - val: status
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 4
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 161
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 39 limit: 43
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: code
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.amf.Input - property: code
18:39:15.630 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.631 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.631 [NioProcessor-1] DEBUG org.red5.io.amf.Input - val: 
NetConnection.Connect.Success
18:39:15.631 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.631 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.631 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 11
18:39:15.631 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 161
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 77 limit: 88
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: 
description
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - property: 
description
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - val: 
Connection succeeded.
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 12
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 161
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 114 limit: 126
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: 
capabilities
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - property: 
capabilities
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - val: 31
18:39:15.632 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 6
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 161
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 137 limit: 143
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: fmsVer
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.amf.Input - property: fmsVer
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.amf.Input - val: 
RED5/0,9,0,0
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? true
18:39:15.633 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? true
18:39:15.633 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Num params: 1
18:39:15.633 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
-  > 0: {level=status, description=Connection succeeded., 
capabilities=31, code=NetConnection.Connect.Success, fmsVer=RED5/0,9,0,0}
18:39:15.634 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message received, header: ChannelId: 2, Timer: 0, Relative: false, 
Size: 4, DataType: 5, StreamId: 0
18:39:15.634 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Unknown type: 5
18:39:15.634 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message received, header: ChannelId: 2, Timer: 0, Relative: true, 
Size: 6, DataType: 4, StreamId: 0
18:39:15.634 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- onPing
18:39:15.634 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message received, header: ChannelId: 3, Timer: 0, Relative: true, 
Size: 161, DataType: 20, StreamId: 0
18:39:15.634 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- onInvoke: Invoke: Service: null Method: _result Num Params: 1 0: 
{level=status, description=Connection succeeded., capabilities=31, 
code=NetConnection.Connect.Success, fmsVer=RED5/0,9,0,0}, invokeId: 1
18:39:15.638 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- Received result for pending call Service: null Method: connect No params
18:39:15.639 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- invoke method: createStream params null callback 
org.red5.server.net.rtmp.BaseRTMPClientHandler$CreateStreamCallBack at 421fbfd6
18:39:15.639 [NioProcessor-1] DEBUG o.r.s.net.rtmp.RTMPClientConnManager 
- Returning first map entry
18:39:15.639 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolEncoder 
- This is a pending call, send request
18:39:15.639 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.639 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.639 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.640 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.640 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.640 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.640 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolEncoder 
- Writing params
18:39:15.640 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message sent
18:39:15.642 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message sent
18:39:15.642 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message sent
18:39:15.649 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - 
Processing a MESSAGE_RECEIVED for session 1
18:39:15.649 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Start: 0
18:39:15.649 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.649 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.649 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Action _result
18:39:15.649 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:15.649 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:15.649 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 1
18:39:15.649 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: null
18:39:15.649 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:15.649 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:15.650 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Num params: 1
18:39:15.650 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
-  > 0: 1
18:39:15.650 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message received, header: ChannelId: 3, Timer: 0, Relative: true, 
Size: 29, DataType: 20, StreamId: 0
18:39:15.650 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- onInvoke: Invoke: Service: null Method: _result Num Params: 1 0: 1, 
invokeId: 2
18:39:15.650 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- Received result for pending call Service: null Method: createStream No 
params
18:39:15.651 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- Stream id: 1
18:39:15.651 [NioProcessor-1] DEBUG o.r.s.net.rtmp.RTMPClientConnManager 
- Returning first map entry
18:39:15.658 [NioProcessor-1] DEBUG o.r.s.s.consumer.ConnectionConsumer 
- Channel ids - video: 5 audio: 6 data: 4
18:39:15.659 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- publish stream 1, name: red5StreamDemo, mode live
18:39:15.660 [NioProcessor-1] DEBUG o.r.s.net.rtmp.RTMPClientConnManager 
- Returning first map entry
18:39:15.660 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolEncoder 
- This is a pending call, send request
18:39:15.660 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.660 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.660 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.660 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.660 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.660 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.660 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolEncoder 
- Writing params
18:39:15.660 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.660 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.661 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
serialize
18:39:15.661 [NioProcessor-1] DEBUG org.red5.io.object.Serializer - 
write basic
18:39:15.664 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message sent
18:39:15.694 [NioProcessor-1] DEBUG o.a.m.f.codec.ProtocolCodecFilter - 
Processing a MESSAGE_RECEIVED for session 1
18:39:15.694 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Start: 0
18:39:15.695 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Start: 140
18:39:15.695 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.695 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.695 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Action onStatus
18:39:15.695 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:15.695 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:15.695 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 1
18:39:15.695 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: null
18:39:15.695 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 9
18:39:15.695 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Object
18:39:15.695 [NioProcessor-1] DEBUG org.red5.io.amf.Input - readObject: null
18:39:15.696 [NioProcessor-1] DEBUG org.red5.io.amf.Input - read map
18:39:15.696 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.696 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 5
18:39:15.696 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 134
18:39:15.696 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 24 limit: 29
18:39:15.697 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: level
18:39:15.698 [NioProcessor-1] DEBUG org.red5.io.amf.Input - property: level
18:39:15.699 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.699 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.699 [NioProcessor-1] DEBUG org.red5.io.amf.Input - val: status
18:39:15.699 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.699 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.699 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 4
18:39:15.700 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 134
18:39:15.700 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 40 limit: 44
18:39:15.700 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: code
18:39:15.700 [NioProcessor-1] DEBUG org.red5.io.amf.Input - property: code
18:39:15.700 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.700 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.701 [NioProcessor-1] DEBUG org.red5.io.amf.Input - val: 
NetStream.Publish.Start
18:39:15.701 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.702 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.702 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 11
18:39:15.702 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 134
18:39:15.702 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 72 limit: 83
18:39:15.705 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: 
description
18:39:15.705 [NioProcessor-1] DEBUG org.red5.io.amf.Input - property: 
description
18:39:15.705 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.705 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.705 [NioProcessor-1] DEBUG org.red5.io.amf.Input - val:
18:39:15.705 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.705 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.706 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 7
18:39:15.706 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 134
18:39:15.706 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 88 limit: 95
18:39:15.706 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: details
18:39:15.706 [NioProcessor-1] DEBUG org.red5.io.amf.Input - property: 
details
18:39:15.706 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.706 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.706 [NioProcessor-1] DEBUG org.red5.io.amf.Input - val: 
red5StreamDemo
18:39:15.706 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.707 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.707 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 8
18:39:15.707 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 134
18:39:15.708 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 114 limit: 122
18:39:15.708 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: clientid
18:39:15.708 [NioProcessor-1] DEBUG org.red5.io.amf.Input - property: 
clientid
18:39:15.708 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:15.708 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:15.708 [NioProcessor-1] DEBUG org.red5.io.amf.Input - val: 1
18:39:15.708 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? true
18:39:15.708 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? true
18:39:15.708 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
- Num params: 1
18:39:15.708 [NioProcessor-1] DEBUG o.r.s.n.r.codec.RTMPProtocolDecoder 
-  > 0: {clientid=1, level=status, details=red5StreamDemo, description=, 
code=NetStream.Publish.Start}
18:39:15.709 [NioProcessor-1] DEBUG o.r.server.net.rtmp.BaseRTMPHandler 
- Message received, header: ChannelId: 4, Timer: 0, Relative: false, 
Size: 134, DataType: 20, StreamId: 1
18:39:15.709 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- onInvoke: Invoke: Service: null Method: onStatus Num Params: 1 0: 
{clientid=1, level=status, details=red5StreamDemo, description=, 
code=NetStream.Publish.Start}, invokeId: 1
18:39:15.713 [NioProcessor-1] DEBUG o.r.s.net.rtmp.BaseRTMPClientHandler 
- Client id: 1
18:39:15.770 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
FLVReader 1 - Buffer size: 1665121 position: 0 remaining: 1665121
18:39:15.772 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
Header: VERSION:                 1
TYPE FLAGS VIDEO:         true
TYPE FLAGS AUDIO:         true
DATA OFFSET:                 9

18:39:15.994 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - Old 
position: 9
18:39:15.994 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
readTag, oldPos: 9, tag header: Data Type        =18
Prev. Tag Size        =0
Body size        =244
timestamp        =0
Body Data        =null

18:39:15.998 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 4
18:39:15.998 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: String
18:39:15.998 [NioProcessor-1] DEBUG org.red5.io.flv.meta.MetaService - 
Metadata type: onMetaData
18:39:15.998 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 7
18:39:15.998 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: List
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Read start 
mixed array: 11
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 8
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 20 limit: 28
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: duration
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: duration
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key duration 
is causing non normal array
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: 102.603
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 5
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:15.999 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 39 limit: 44
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: width
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: width
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key width is 
causing non normal array
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: 320
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 6
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 55 limit: 61
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: height
18:39:16.000 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: height
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key height 
is causing non normal array
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: 240
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 13
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 72 limit: 85
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: 
videodatarate
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: 
videodatarate
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key 
videodatarate is causing non normal array
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: 0
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:16.001 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 9
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 96 limit: 105
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: 
framerate
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: framerate
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key 
framerate is causing non normal array
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: 
23.976023976023978
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 12
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 116 limit: 128
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: 
videocodecid
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: 
videocodecid
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key 
videocodecid is causing non normal array
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: 2
18:39:16.002 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:16.003 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 15
18:39:16.003 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:16.003 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 139 limit: 154
18:39:16.003 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: 
audiosamplerate
18:39:16.003 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: 
audiosamplerate
18:39:16.003 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key 
audiosamplerate is causing non normal array
18:39:16.003 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:16.003 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:16.003 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: 11025
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 15
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 165 limit: 180
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: 
audiosamplesize
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: 
audiosamplesize
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key 
audiosamplesize is causing non normal array
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: 16
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 6
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 191 limit: 197
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: stereo
18:39:16.004 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: stereo
18:39:16.091 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key stereo 
is causing non normal array
18:39:16.091 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 2
18:39:16.091 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Boolean
18:39:16.091 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: false
18:39:16.091 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:16.092 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 12
18:39:16.092 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:16.092 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 201 limit: 213
18:39:16.092 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: 
audiocodecid
18:39:16.092 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: 
audiocodecid
18:39:16.092 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key 
audiocodecid is causing non normal array
18:39:16.092 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: 2
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? false
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Length: 8
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.amf.Input - Limit: 244
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String buf - 
position: 224 limit: 232
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.amf.Input - String: filesize
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key: filesize
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.amf.Input - key filesize 
is causing non normal array
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Type: 3
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.object.Deserializer - 
Datatype: Number
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.amf.Input - item: 1665121
18:39:16.093 [NioProcessor-1] DEBUG org.red5.io.amf.Input - End of 
object: ? true
18:39:16.094 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
readTag, oldPos: 268, tag header: Data Type        =9
Prev. Tag Size        =255
Body size        =4314
timestamp        =0
Body Data        =null

18:39:16.094 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
readTag, oldPos: 4597, tag header: Data Type        =8
Prev. Tag Size        =4325
Body size        =105
timestamp        =0
Body Data        =null

18:39:16.094 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
readTag, oldPos: 4717, tag header: Data Type        =9
Prev. Tag Size        =116
Body size        =66
timestamp        =42
Body Data        =null

18:39:16.094 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
Reader close
18:39:16.097 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLV - File 
size: 1665121
18:39:16.097 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
FLVReader 1 - Buffer size: 1665121 position: 0 remaining: 1665121
18:39:16.097 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
Header: VERSION:                 1
TYPE FLAGS VIDEO:         true
TYPE FLAGS AUDIO:         true
DATA OFFSET:                 9

18:39:16.183 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - Old 
position: 9
18:39:16.184 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLV - Item will 
not be cached: toystory3.flv
18:39:16.185 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
readTag, oldPos: 9, tag header: Data Type        =18
Prev. Tag Size        =0
Body size        =244
timestamp        =0
Body Data        =null

18:39:16.186 [NioProcessor-1] DEBUG o.r.s.s.consumer.ConnectionConsumer 
- Sending chunk size: 1024
18:39:16.186 [NioProcessor-1] DEBUG o.r.s.s.consumer.ConnectionConsumer 
- Message timestamp: 0
18:39:16.274 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
readTag, oldPos: 268, tag header: Data Type        =9
Prev. Tag Size        =255
Body size        =4314
timestamp        =0
Body Data        =null

18:39:16.276 [NioProcessor-1] DEBUG o.r.s.s.consumer.ConnectionConsumer 
- Message timestamp: 0
18:39:16.276 [NioProcessor-1] DEBUG org.red5.io.flv.impl.FLVReader - 
readTag, oldPos: 4597, tag header: Data Type        =8
Prev. Tag Size        =4325
Body size        =105
timestamp        =0
Body Data        =null



... and message blocks like the last one continue....



More information about the Red5 mailing list