コード例 #1
0
        public void SetPeerInfo(IPEndPoint ipEndPoint)
        {
            AMF0Writer request = WriteFlexMessage("setPeerInfo");

            request.WriteShortString(ipEndPoint.ToString(), true);
            Flush(true);
        }
コード例 #2
0
 private void WriteRequetHeader(AMF0Writer writer, string name, double callbackHandle)
 {
     writer.Write(Defines.RM_HEADER_MESSAGETYPE_INVOKE);
     writer.Write(0);
     writer.WriteShortString(name, true);
     writer.WriteDouble(callbackHandle, true);
 }
コード例 #3
0
        public void Connect(Variant connectArgs, Action <Flow, Variant> callback)
        {
            AMF0Writer request   = WriteAMFRequestMessage("connect", Band.PushCallBack(callback));
            var        amfwriter = new AMFObjectWriter(request, connectArgs);

            amfwriter.Dispose();
            Flush(true);
        }
コード例 #4
0
ファイル: RTMPMessage.cs プロジェクト: mozsh/peercaststation
        private static byte[] CreateBody(string property_name, IEnumerable <AMFValue> arguments)
        {
            var s = new MemoryStream();

            using (var writer = new AMF0Writer(s)) {
                writer.WriteString(property_name);
                foreach (var arg in arguments)
                {
                    writer.WriteValue(arg);
                }
            }
            return(s.ToArray());
        }
コード例 #5
0
        public override void SendStream(Stream stream, int length)
        {
            var marker   = stream.ReadByte() | 0xF0;
            var echoTime = marker == (Target == null ? 0xFE : 0xFD);

            stream.ReadUShort();
            if (echoTime)
            {
                stream.ReadUShort();
            }
            var type = stream.ReadByte();

            if (type == 0x10)
            {
                var sizePos = stream.Position;
                var size    = stream.ReadUShort();
                var flags   = stream.ReadByte();
                var idFlow  = stream.Read7BitLongValue();
                var stage   = stream.Read7BitLongValue();
                if (idFlow == 2 && stage == 1)
                {
                    var deltaNAck = stream.Read7BitLongValue();
                    var len       = (ushort)stream.ReadByte();
                    stream.Position += len;
                    stream.ReadByte();
                    stream.ReadByte(); //type
                    stream.ReadUInt(); //timestamp
                    var amfReader      = new AMF0Reader(stream);
                    var str            = amfReader.ReadShortString(true);
                    var num            = amfReader.ReadAMFDouble(true);
                    var pos            = stream.Position;
                    var connectionInfo = amfReader.ReadVariant();
                    connectionInfo["tcUrl"] = MiddleSession.QueryUrl;
                    connectionInfo["app"]   = MiddleSession.QueryUrl.Split('/').Last();
                    stream.Position         = pos;
                    var amfWriter = new AMF0Writer(stream);
                    amfWriter.WriteObject(connectionInfo, true);
                    length          = (int)stream.Position;
                    len             = (ushort)(stream.Position - sizePos - 2);
                    stream.Position = sizePos;
                    stream.Write(len);
                }
            }
            stream.Position = 6;
            base.SendStream(stream, length);
        }
コード例 #6
0
ファイル: Middle.cs プロジェクト: langhuihui/csharprtmp
 public override void SendStream(Stream stream,int length)
 {
     var marker = stream.ReadByte() | 0xF0;
     var echoTime = marker == (Target == null ? 0xFE : 0xFD);
     stream.ReadUShort();
     if (echoTime) stream.ReadUShort();
     var type = stream.ReadByte();
     if (type == 0x10)
     {
         var sizePos = stream.Position;
         var size = stream.ReadUShort();
         var flags = stream.ReadByte();
         var idFlow = stream.Read7BitLongValue();
         var stage = stream.Read7BitLongValue();
         if (idFlow == 2 && stage == 1)
         {
             var deltaNAck = stream.Read7BitLongValue();
             var len = (ushort) stream.ReadByte();
             stream.Position += len;
             stream.ReadByte();
             stream.ReadByte();//type
             stream.ReadUInt();//timestamp
             var amfReader = new AMF0Reader(stream);
             var str = amfReader.ReadShortString(true);
             var num = amfReader.ReadAMFDouble(true);
             var pos = stream.Position;
             var connectionInfo = amfReader.ReadVariant();
             connectionInfo["tcUrl"] = MiddleSession.QueryUrl;
             connectionInfo["app"] = MiddleSession.QueryUrl.Split('/').Last();
             stream.Position = pos;
             var amfWriter = new AMF0Writer(stream);
             amfWriter.WriteObject(connectionInfo, true);
             length = (int) stream.Position;
             len = (ushort) (stream.Position - sizePos-2);
             stream.Position = sizePos;
             stream.Write(len);
         }
     }
     stream.Position = 6;
     base.SendStream(stream,length);
 }
コード例 #7
0
ファイル: RTMPMessage.cs プロジェクト: mozsh/peercaststation
        private static byte[] CreateBody(
            string command_name,
            int transaction_id,
            AMFValue command_object,
            IEnumerable <AMFValue> arguments)
        {
            var s = new MemoryStream();

            using (var writer = new AMF0Writer(s)) {
                writer.WriteString(command_name);
                writer.WriteNumber(transaction_id);
                writer.WriteValue(command_object);
                if (arguments != null)
                {
                    foreach (var arg in arguments)
                    {
                        writer.WriteValue(arg);
                    }
                }
            }
            return(s.ToArray());
        }
コード例 #8
0
ファイル: Message.cs プロジェクト: langhuihui/csharprtmp
 public MessageBuffered(bool repeatable = true)
     : base(Utils.Rms.GetStream(), repeatable)
 {
     Writer = new AMF0Writer(_stream);
 }
コード例 #9
0
        public void CreateStream(Action <Flow, Variant> callback)
        {
            AMF0Writer request = WriteAMFMessage("createStream", Band.PushCallBack(callback));

            Flush(true);
        }
コード例 #10
0
 public AMFObjectWriter(AMF0Writer writer,Variant initVariant = null)
 {
     _writer = writer;
     _buffer = initVariant ?? Variant.Get();
 }
コード例 #11
0
ファイル: FlowWriter.cs プロジェクト: langhuihui/csharprtmp
 private void WriteRequetHeader(AMF0Writer writer, string name, double callbackHandle)
 {
     writer.Write(Defines.RM_HEADER_MESSAGETYPE_INVOKE);
     writer.Write(0);
     writer.WriteShortString(name, true);
     writer.WriteDouble(callbackHandle, true);
 }
コード例 #12
0
 public RTMPProtocolSerializer ()
 {
     writer = new AMF0Writer(InternalBuffer);
 }
コード例 #13
0
 public MessageBuffered(bool repeatable = true)
     : base(Utils.Rms.GetStream(), repeatable)
 {
     Writer = new AMF0Writer(_stream);
 }
コード例 #14
0
 public AMFObjectWriter(AMF0Writer writer, Variant initVariant = null)
 {
     _writer = writer;
     _buffer = initVariant ?? Variant.Get();
 }