[Red5] AMF3 support in trunk

Jalmari Raippalinna jalmari.raippalinna at apaja.com
Fri Jan 26 09:14:46 EST 2007


Joachim Bauch kirjoitti:
> Hi all,
>
> the changes to support AMF3 are now merged in the trunk. Connecting
> from Flex2 applications therefore doesn't require setting the encoding
> to AMF0 on the NetConnections and the SOs any more.
>
> Joachim
As I finally got into testing AMF3, there is thing to I've noticed that 
is not supported,
i have classes that implement IExternalizable, with writeExternal
that looks like this:

        public function writeExternal(output:IDataOutput):void
        {
            trace("SERIALIZING SIMPLE OBJECT!");
            output.writeUTF("DummyAction");
            output.writeUTF("DummyType");
            output.writeObject(new Object());
            output.writeObject(new Object());
        }

First, the remote class needs to be in bin directory of the server, 
otherwise I get ClassNotFoundException, having resolved that I got 
following error from this serialization:

     [java] [INFO] 700536 SocketAcceptorIoProcessor-0.0:( 
org.red5.io.amf3.Input.info ) Unknown datatype: 0
     [java] [ERROR] 700536 SocketAcceptorIoProcessor-0.0:( 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.error ) Er
ror in packet at 0
     [java] java.lang.IndexOutOfBoundsException: Index: 34, Size: 1
     [java]     at java.util.ArrayList.RangeCheck(ArrayList.java:547)
     [java]     at java.util.ArrayList.get(ArrayList.java:322)
     [java]     at org.red5.io.amf3.Input.readString(Input.java:190)
     [java]     at org.red5.io.amf.Input.readXML(Input.java:531)
     [java]     at 
org.red5.io.object.Deserializer.deserialize(Deserializer.java:80)
     [java]     at org.red5.io.amf3.Input.readObject(Input.java:304)
     [java]     at 
org.red5.io.object.Deserializer.deserialize(Deserializer.java:83)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeFlexMessage(RTMPProtocolDecoder.java:759)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeMessage(RTMPProtocolDecoder.java:439)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodePacket(RTMPProtocolDecoder.java:322)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:154)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:116)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:60)
     [java]     at 
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:157)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChai
n.java:785)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain$HeadFilter.messageReceived(AbstractIoFilterChain
.java:616)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.fireMessageReceived(AbstractIoFilterChain.java:3
52)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:288)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:248)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.access$500(SocketIoProcessor.java:49)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:540)
     [java]     at 
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:43)
     [java]     at java.lang.Thread.run(Thread.java:619)
     [java] [ERROR] 700536 SocketAcceptorIoProcessor-0.0:( 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.error ) Er
ror decoding buffer
     [java] org.red5.server.net.protocol.ProtocolException: Error during 
decoding
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:165)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:116)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:60)
     [java]     at 
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:157)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChai
n.java:785)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain$HeadFilter.messageReceived(AbstractIoFilterChain
.java:616)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.fireMessageReceived(AbstractIoFilterChain.java:3
52)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:288)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:248)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.access$500(SocketIoProcessor.java:49)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:540)
     [java]     at 
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:43)
     [java]     at java.lang.Thread.run(Thread.java:619)
     [java] [ERROR] 709302 SocketAcceptorIoProcessor-0.0:( 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.error ) Er
ror in packet at 0
     [java] java.lang.NullPointerException
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeHeader(RTMPProtocolDecoder.java:362)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodePacket(RTMPProtocolDecoder.java:276)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:154)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:116)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:60)
     [java]     at 
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:157)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChai
n.java:785)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain$HeadFilter.messageReceived(AbstractIoFilterChain
.java:616)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.fireMessageReceived(AbstractIoFilterChain.java:3
52)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:288)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:248)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.access$500(SocketIoProcessor.java:49)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:540)
     [java]     at 
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:43)
     [java]     at java.lang.Thread.run(Thread.java:619)
     [java] [ERROR] 709302 SocketAcceptorIoProcessor-0.0:( 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.error ) Er
ror decoding buffer
     [java] org.red5.server.net.protocol.ProtocolException: Error during 
decoding
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:165)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:116)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:60)
     [java]     at 
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:157)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChai
n.java:785)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain$HeadFilter.messageReceived(AbstractIoFilterChain
.java:616)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.ja
va:361)
     [java]     at 
org.apache.mina.common.support.AbstractIoFilterChain.fireMessageReceived(AbstractIoFilterChain.java:3
52)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:288)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:248)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor.access$500(SocketIoProcessor.java:49)
     [java]     at 
org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:540)
     [java]     at 
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:43)
     [java]     at java.lang.Thread.run(Thread.java:619)
     [java] [DEBUG] 719302 DefaultQuartzScheduler_Worker-7:( 
com.apaja.server.invoke.Application.appDisconnect ) AppDisc
onnect
     [java] [DEBUG] 719302 DefaultQuartzScheduler_Worker-7:( 
com.apaja.server.invoke.Application.appLeave ) appLeave

And If I try to write the Strings as Object with writeObject:

     [java] [DEBUG] 12703 SocketAcceptorIoProcessor-0.0:( 
org.apache.commons.beanutils.BeanUtils.trace )   setProperty(c
om.apaja.server.invoke.TransferValueObject at 6f947b, , DummyAction)
     [java] [ERROR] 12719 SocketAcceptorIoProcessor-0.0:( 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.error ) Err
or in packet at 0
     [java] java.lang.RuntimeException: Class references not supported yet.
     [java]     at org.red5.io.amf3.Input.readObject(Input.java:283)
     [java]     at 
org.red5.io.object.Deserializer.deserialize(Deserializer.java:83)
     [java]     at org.red5.io.amf3.Input.readArray(Input.java:244)
     [java]     at 
org.red5.io.object.Deserializer.deserialize(Deserializer.java:74)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeFlexMessage(RTMPProtocolDecoder.java:759)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeMessage(RTMPProtocolDecoder.java:439)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodePacket(RTMPProtocolDecoder.java:322)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:154)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:116)
     [java]     at 
org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:60)
 .... Clip

Hope this helps to find out the problem,
    Jalmari

ps. How can I get the java classes to use custom deserialization / 
serialization?



More information about the Red5 mailing list