Example #1
0
 protected RTMPMessage(RTMPMessage x)
 {
     Timestamp   = x.Timestamp;
     MessageType = x.MessageType;
     StreamId    = x.StreamId;
     Body        = x.Body;
 }
Example #2
0
        public AggregateMessage(RTMPMessage x)
            : base(x)
        {
            var messages = new List <RTMPMessage>();

            using (var reader = new RTMPBinaryReader(new MemoryStream(x.Body))) {
                while (reader.BaseStream.Position < reader.BaseStream.Length)
                {
                    var message_type = (RTMPMessageType)reader.ReadByte();
                    var length       = reader.ReadUInt24();
                    var timestamp    = reader.ReadUInt32();
                    var stream_id    = reader.ReadUInt24();
                    var body         = reader.ReadBytes(length);
                    var msg          = new RTMPMessage(
                        message_type,
                        timestamp + x.Timestamp,
                        x.StreamId,
                        body);
                    var prevlen = reader.ReadUInt32();
                    if (prevlen == body.Length + 11)
                    {
                        messages.Add(msg);
                    }
                }
            }
        }
Example #3
0
 public SetWindowSizeMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader = new RTMPBinaryReader(new MemoryStream(x.Body))) {
         WindowSize = reader.ReadUInt32();
     }
 }
Example #4
0
 protected RTMPMessage(RTMPMessage x)
 {
   Timestamp     = x.Timestamp;
   MessageType   = x.MessageType;
   StreamId      = x.StreamId;
   Body          = x.Body;
 }
Example #5
0
 public AbortMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader = new RTMPBinaryReader(new MemoryStream(x.Body))) {
         TargetChunkStream = (int)reader.ReadUInt32();
     }
 }
Example #6
0
 public AckMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader = new RTMPBinaryReader(new MemoryStream(x.Body))) {
         SequenceNumber = reader.ReadUInt32();
     }
 }
Example #7
0
 public SetChunkSizeMessage(RTMPMessage x)
   : base(x)
 {
   using (var reader=new RTMPBinaryReader(new MemoryStream(x.Body))) {
     ChunkSize = (int)Math.Min(0x7FFFFFFL, reader.ReadUInt32());
   }
 }
 public QueuedMessage(MessageDirection direction, int chunk_stream_id, RTMPMessage msg)
 {
     this.Direction     = direction;
     this.ChunkStreamId = chunk_stream_id;
     this.Message       = msg;
     this.TimeStamp     = Stopwatch.Elapsed;
 }
Example #9
0
 public AbortMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader=new RTMPBinaryReader(new MemoryStream(x.Body))) {
     TargetChunkStream = (int)reader.ReadUInt32();
       }
 }
Example #10
0
 public SetChunkSizeMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader = new RTMPBinaryReader(new MemoryStream(x.Body))) {
         ChunkSize = (int)Math.Min(0x7FFFFFFL, reader.ReadUInt32());
     }
 }
Example #11
0
 public QueuedMessage(MessageDirection direction, int chunk_stream_id, RTMPMessage msg)
 {
   this.Direction     = direction;
   this.ChunkStreamId = chunk_stream_id;
   this.Message       = msg;
   this.TimeStamp     = Stopwatch.Elapsed;
 }
Example #12
0
 public PingResponseMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader = new RTMPBinaryReader(new MemoryStream(x.Body))) {
         var type = (UserControlMessageType)reader.ReadUInt16();
         LocalTimestamp = reader.ReadUInt32();
     }
 }
Example #13
0
 public StreamIsRecordedMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader = new RTMPBinaryReader(new MemoryStream(x.Body))) {
         var type = (UserControlMessageType)reader.ReadUInt16();
         TargetStreamId = reader.ReadUInt32();
     }
 }
Example #14
0
 public UserControlMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader = new RTMPBinaryReader(new MemoryStream(x.Body))) {
         UserControlMessageType    = (UserControlMessageType)reader.ReadUInt16();
         UserControlMessagePayload = reader.ReadBytes(x.Body.Length - 2);
     }
 }
Example #15
0
 public SetPeerBandwidthMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader = new RTMPBinaryReader(new MemoryStream(x.Body))) {
         PeerBandwidth = reader.ReadUInt32();
         LimitType     = (PeerBandwidthLimitType)reader.ReadByte();
     }
 }
 public void OnAudio(RTMPMessage msg)
 {
     if (IsAACHeader(msg)) {
     audioHeader = msg;
     OnHeaderChanged(msg);
       }
       OnContentChanged(msg);
 }
Example #17
0
 public SetBufferLengthMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader = new RTMPBinaryReader(new MemoryStream(x.Body))) {
         var type = (UserControlMessageType)reader.ReadUInt16();
         TargetStreamId = reader.ReadUInt32();
         BufferLength   = TimeSpan.FromMilliseconds(reader.ReadUInt32());
     }
 }
Example #18
0
 public DataAMF0Message(RTMPMessage x)
     : base(x)
 {
     using (var reader = new AMF0Reader(new MemoryStream(x.Body))) {
         this.propertyName = (string)reader.ReadValue();
         var arguments = new List <AMFValue>();
         while (reader.BaseStream.Position < reader.BaseStream.Length)
         {
             arguments.Add(reader.ReadValue());
         }
         this.arguments = arguments;
     }
 }
Example #19
0
 public void OnAudio(RTMPMessage msg)
 {
     if (timestampBase < 0 && msg.Timestamp > 0)
     {
         timestampBase = msg.Timestamp;
     }
     this.connection.PostMessage(3,
                                 new RTMPMessage(
                                     msg.MessageType,
                                     msg.Timestamp - Math.Max(timestampBase, 0),
                                     this.connection.StreamId,
                                     msg.Body)
                                 );
 }
Example #20
0
        void SendMessage(int chunk_stream_id, RTMPMessage msg)
        {
            int offset = 0;
            int fmt    = 0;

            while (msg.Body.Length - offset > 0)
            {
                switch (fmt)
                {
                case 0:
                    Send(s => {
                        using (var writer = new RTMPBinaryWriter(s)) {
                            writer.Write((byte)((fmt << 6) | chunk_stream_id));
                            if (msg.Timestamp > 0xFFFFFF)
                            {
                                writer.WriteUInt24(0xFFFFFF);
                            }
                            else
                            {
                                writer.WriteUInt24((int)msg.Timestamp);
                            }
                            writer.WriteUInt24(msg.Body.Length);
                            writer.Write((byte)msg.MessageType);
                            writer.WriteUInt32LE(msg.StreamId);
                            if (msg.Timestamp > 0xFFFFFF)
                            {
                                writer.WriteUInt32(msg.Timestamp);
                            }
                            int chunk_len = Math.Min(sendChunkSize, msg.Body.Length - offset);
                            writer.Write(msg.Body, offset, chunk_len);
                            offset += chunk_len;
                        }
                    });
                    fmt = 3;
                    break;

                case 3:
                    Send(s => {
                        using (var writer = new RTMPBinaryWriter(s)) {
                            writer.Write((byte)((fmt << 6) | chunk_stream_id));
                            int chunk_len = Math.Min(sendChunkSize, msg.Body.Length - offset);
                            writer.Write(msg.Body, offset, chunk_len);
                            offset += chunk_len;
                        }
                    });
                    break;
                }
            }
        }
        private async Task SendMessage(int chunk_stream_id, RTMPMessage msg, CancellationToken cancel_token)
        {
            int offset = 0;
            int fmt    = 0;

            while (msg.Body.Length - offset > 0)
            {
                switch (fmt)
                {
                case 0:
                    await SendAsync(writer => {
                        writer.Write((byte)((fmt << 6) | chunk_stream_id));
                        if (msg.Timestamp > 0xFFFFFF)
                        {
                            writer.WriteUInt24(0xFFFFFF);
                        }
                        else
                        {
                            writer.WriteUInt24((int)msg.Timestamp);
                        }
                        writer.WriteUInt24(msg.Body.Length);
                        writer.Write((byte)msg.MessageType);
                        writer.WriteUInt32LE(msg.StreamId);
                        if (msg.Timestamp > 0xFFFFFF)
                        {
                            writer.WriteUInt32(msg.Timestamp);
                        }
                        int chunk_len = Math.Min(sendChunkSize, msg.Body.Length - offset);
                        writer.Write(msg.Body, offset, chunk_len);
                        offset += chunk_len;
                    }, cancel_token).ConfigureAwait(false);

                    fmt = 3;
                    break;

                case 3:
                    await SendAsync(writer => {
                        writer.Write((byte)((fmt << 6) | chunk_stream_id));
                        int chunk_len = Math.Min(sendChunkSize, msg.Body.Length - offset);
                        writer.Write(msg.Body, offset, chunk_len);
                        offset += chunk_len;
                    }, cancel_token).ConfigureAwait(false);

                    break;
                }
            }
        }
Example #22
0
 public CommandAMF0Message(RTMPMessage x)
     : base(x)
 {
     using (var reader = new AMF0Reader(new MemoryStream(x.Body))) {
         this.commandName   = (string)reader.ReadValue();
         this.transactionId = (int)reader.ReadValue();
         this.commandObject = reader.ReadValue();
         if (AMFValue.IsNull(CommandObject))
         {
             this.commandObject = null;
         }
         var args = new List <AMFValue>();
         while (reader.BaseStream.Position < reader.BaseStream.Length)
         {
             args.Add(reader.ReadValue());
         }
         this.arguments = args;
     }
 }
Example #23
0
 public SetWindowSizeMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader=new RTMPBinaryReader(new MemoryStream(x.Body))) {
     WindowSize = reader.ReadUInt32();
       }
 }
Example #24
0
 public CommandAMF3Message(RTMPMessage x)
     : base(x)
 {
     using (var reader=new AMF3Reader(new MemoryStream(x.Body))) {
     this.commandName   = (string)reader.ReadValue();
     this.transactionId = (int)reader.ReadValue();
     this.commandObject = reader.ReadValue();
     if (AMFValue.IsNull(CommandObject)) {
       this.commandObject = null;
     }
     var args = new List<AMFValue>();
     while (reader.BaseStream.Position<reader.BaseStream.Length) {
       args.Add(reader.ReadValue());
     }
     this.arguments = args;
       }
 }
Example #25
0
		protected void PostMessage(int chunk_stream_id, RTMPMessage msg)
		{
			postMessageQueue.Enqueue(new QueuedMessage(chunk_stream_id, msg));
		}
			public void OnAudio(RTMPMessage msg)
			{
        if (timestampBase<0 && msg.Timestamp>0) {
          timestampBase = msg.Timestamp;
        }
				this.connection.PostMessage(3,
					new RTMPMessage(
						msg.MessageType,
            msg.Timestamp - Math.Max(timestampBase, 0),
						this.connection.StreamId,
						msg.Body)
				);
			}
Example #27
0
 public StreamIsRecordedMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader=new RTMPBinaryReader(new MemoryStream(x.Body))) {
       var type = (UserControlMessageType)reader.ReadUInt16();
       TargetStreamId = reader.ReadUInt32();
     }
 }
 protected void PostMessage(int chunk_stream_id, RTMPMessage msg)
 {
     messageQueue.Enqueue(new QueuedMessage(QueuedMessage.MessageDirection.Out, chunk_stream_id, msg));
 }
 private bool IsAACHeader(RTMPMessage msg)
 {
     return
      msg.MessageType==RTMPMessageType.Audio &&
      msg.Body.Length>1 &&
     (msg.Body[0]==0xAF &&
      msg.Body[1]==0x00);
 }
 private void WriteMessage(Stream stream, RTMPMessage msg, long time_origin)
 {
     var timestamp = Math.Max(0, msg.Timestamp-time_origin);
       using (var writer=new RTMPBinaryWriter(stream, true)) {
     writer.Write((byte)msg.MessageType);
     writer.WriteUInt24(msg.Body.Length);
     writer.WriteUInt24((int)timestamp & 0xFFFFFF);
     writer.Write((byte)((timestamp>>24) & 0xFF));
     writer.WriteUInt24(0);
     writer.Write(msg.Body, 0, msg.Body.Length);
     writer.Write(msg.Body.Length+11);
       }
 }
Example #31
0
 public PingResponseMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader=new RTMPBinaryReader(new MemoryStream(x.Body))) {
       var type = (UserControlMessageType)reader.ReadUInt16();
       LocalTimestamp = reader.ReadUInt32();
     }
 }
 private void OnHeaderChanged(RTMPMessage msg)
 {
     FlushContents();
       var s = new MemoryStream();
       using (s) {
     using (var writer=new RTMPBinaryWriter(s, true)) {
       writer.Write((byte)'F');
       writer.Write((byte)'L');
       writer.Write((byte)'V');
       writer.Write((byte)1);
       writer.Write((byte)5);
       writer.WriteUInt32(9);
       writer.WriteUInt32(0);
     }
     if (metadata!=null)    WriteMessage(s, metadata,    0xFFFFFFFF);
     if (audioHeader!=null) WriteMessage(s, audioHeader, 0xFFFFFFFF);
     if (videoHeader!=null) WriteMessage(s, videoHeader, 0xFFFFFFFF);
       }
       streamIndex     = TargetChannel.GenerateStreamID();
       streamOrigin    = DateTime.Now;
       timestampOrigin = msg.Timestamp;
       var bytes = s.ToArray();
       contents.ContentHeader = new Content(streamIndex, TimeSpan.Zero, position, bytes);
       position += bytes.Length;
 }
 private void OnContentChanged(RTMPMessage content)
 {
     if (streamIndex<0) OnHeaderChanged(content);
       WriteMessage(bodyBuffer, content, timestampOrigin);
       if (bodyBuffer.Length>=7500 ||
       flushTimer.ElapsedMilliseconds>=100) {
     FlushContents();
       }
 }
 private bool IsAVCHeader(RTMPMessage msg)
 {
     return
      msg.MessageType==RTMPMessageType.Video &&
      msg.Body.Length>3 &&
     (msg.Body[0]==0x17 &&
      msg.Body[1]==0x00 &&
      msg.Body[2]==0x00 &&
      msg.Body[3]==0x00);
 }
Example #35
0
 void OnAudio(RTMPMessage msg)
 {
     flvBuffer.OnAudio(msg);
 }
        private async Task ProcessMessage(RTMPMessage msg, CancellationToken cancel_token)
        {
            switch (msg.MessageType)
            {
            case RTMPMessageType.SetChunkSize:
                await OnSetChunkSize(new SetChunkSizeMessage(msg), cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.Abort:
                await OnAbort(new AbortMessage(msg), cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.Ack:
                //Do nothing
                break;

            case RTMPMessageType.UserControl:
                await OnUserControl(new UserControlMessage(msg), cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.SetWindowSize:
                await OnSetWindowSize(new SetWindowSizeMessage(msg), cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.SetPeerBandwidth:
                await OnSetPeerBandwidth(new SetPeerBandwidthMessage(msg), cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.Audio:
                await OnAudio(msg, cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.Video:
                await OnVideo(msg, cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.DataAMF3:
                await OnData(new DataAMF3Message(msg), cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.DataAMF0:
                await OnData(new DataAMF0Message(msg), cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.CommandAMF3:
                await OnCommand(new CommandAMF3Message(msg), cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.CommandAMF0:
                await OnCommand(new CommandAMF0Message(msg), cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.Aggregate:
                await OnAggregate(new AggregateMessage(msg), cancel_token).ConfigureAwait(false);

                break;

            case RTMPMessageType.SharedObjectAMF3:
            case RTMPMessageType.SharedObjectAMF0:
                //TODO:Not implemented
                break;

            default:
                //TODO:Unknown message
                break;
            }
        }
 protected virtual Task OnVideo(RTMPMessage msg, CancellationToken cancel_token)
 {
     return(Task.Delay(0));
 }
Example #38
0
		protected virtual async Task OnVideo(RTMPMessage msg, CancellationToken cancel_token)
		{
		}
 private async Task SendMessage(int chunk_stream_id, RTMPMessage msg, CancellationToken cancel_token)
 {
   int offset = 0;
   int fmt = 0;
   while (msg.Body.Length-offset>0) {
     switch (fmt) {
     case 0:
       await SendAsync(writer => {
         writer.Write((byte)((fmt<<6) | chunk_stream_id));
         if (msg.Timestamp>0xFFFFFF) {
           writer.WriteUInt24(0xFFFFFF);
         }
         else {
           writer.WriteUInt24((int)msg.Timestamp);
         }
         writer.WriteUInt24(msg.Body.Length);
         writer.Write((byte)msg.MessageType);
         writer.WriteUInt32LE(msg.StreamId);
         if (msg.Timestamp>0xFFFFFF) {
           writer.WriteUInt32(msg.Timestamp);
         }
         int chunk_len = Math.Min(sendChunkSize, msg.Body.Length-offset);
         writer.Write(msg.Body, offset, chunk_len);
         offset += chunk_len;
       }, cancel_token);
       fmt = 3;
       break;
     case 3:
       await SendAsync(writer => {
         writer.Write((byte)((fmt<<6) | chunk_stream_id));
         int chunk_len = Math.Min(sendChunkSize, msg.Body.Length-offset);
         writer.Write(msg.Body, offset, chunk_len);
         offset += chunk_len;
       }, cancel_token);
       break;
     }
   }
 }
 private async Task ProcessMessage(RTMPMessage msg, CancellationToken cancel_token)
 {
   switch (msg.MessageType) {
   case RTMPMessageType.SetChunkSize:
     await OnSetChunkSize(new SetChunkSizeMessage(msg), cancel_token);
     break;
   case RTMPMessageType.Abort:
     await OnAbort(new AbortMessage(msg), cancel_token);
     break;
   case RTMPMessageType.Ack:
     //Do nothing
     break;
   case RTMPMessageType.UserControl:
     await OnUserControl(new UserControlMessage(msg), cancel_token);
     break;
   case RTMPMessageType.SetWindowSize:
     await OnSetWindowSize(new SetWindowSizeMessage(msg), cancel_token);
     break;
   case RTMPMessageType.SetPeerBandwidth:
     await OnSetPeerBandwidth(new SetPeerBandwidthMessage(msg), cancel_token);
     break;
   case RTMPMessageType.Audio:
     await OnAudio(msg, cancel_token);
     break;
   case RTMPMessageType.Video:
     await OnVideo(msg, cancel_token);
     break;
   case RTMPMessageType.DataAMF3:
     await OnData(new DataAMF3Message(msg), cancel_token);
     break;
   case RTMPMessageType.DataAMF0:
     await OnData(new DataAMF0Message(msg), cancel_token);
     break;
   case RTMPMessageType.CommandAMF3:
     await OnCommand(new CommandAMF3Message(msg), cancel_token);
     break;
   case RTMPMessageType.CommandAMF0:
     await OnCommand(new CommandAMF0Message(msg), cancel_token);
     break;
   case RTMPMessageType.Aggregate:
     await OnAggregate(new AggregateMessage(msg), cancel_token);
     break;
   case RTMPMessageType.SharedObjectAMF3:
   case RTMPMessageType.SharedObjectAMF0:
     //TODO:Not implemented
     break;
   default:
     //TODO:Unknown message
     break;
   }
 }
 private Task OnVideo(RTMPMessage msg, CancellationToken cancel_token)
 {
     flvBuffer.OnVideo(msg);
     return(Task.Delay(0));
 }
 private Task OnVideo(RTMPMessage msg, CancellationToken cancel_token)
 {
   flvBuffer.OnVideo(msg);
   return Task.Delay(0);
 }
Example #43
0
 public AckMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader=new RTMPBinaryReader(new MemoryStream(x.Body))) {
     SequenceNumber = reader.ReadUInt32();
       }
 }
Example #44
0
 public DataAMF3Message(RTMPMessage x)
     : base(x)
 {
     using (var reader=new AMF3Reader(new MemoryStream(x.Body))) {
     this.propertyName = (string)reader.ReadValue();
     var arguments = new List<AMFValue>();
     while (reader.BaseStream.Position<reader.BaseStream.Length) {
       arguments.Add(reader.ReadValue());
     }
     this.arguments = arguments;
       }
 }
Example #45
0
 public AggregateMessage(RTMPMessage x)
     : base(x)
 {
     var messages = new List<RTMPMessage>();
       using (var reader=new RTMPBinaryReader(new MemoryStream(x.Body))) {
     while (reader.BaseStream.Position<reader.BaseStream.Length) {
       var message_type = (RTMPMessageType)reader.ReadByte();
       var length       = reader.ReadUInt24();
       var timestamp    = reader.ReadUInt32();
       var stream_id    = reader.ReadUInt24();
       var body         = reader.ReadBytes(length);
       var msg = new RTMPMessage(
     message_type,
     timestamp + x.Timestamp,
     x.StreamId,
     body);
       var prevlen = reader.ReadUInt32();
       if (prevlen==body.Length+11) {
     messages.Add(msg);
       }
     }
       }
 }
Example #46
0
 protected DataMessage(RTMPMessage x)
     : base(x)
 {
 }
Example #47
0
 protected CommandMessage(RTMPMessage x)
     : base(x)
 {
 }
Example #48
0
 protected DataMessage(RTMPMessage x)
     : base(x)
 {
 }
Example #49
0
        private void ProcessMessage(RTMPMessage msg)
        {
            switch (msg.MessageType)
            {
            case RTMPMessageType.SetChunkSize:
                OnSetChunkSize(new SetChunkSizeMessage(msg));
                break;

            case RTMPMessageType.Abort:
                OnAbort(new AbortMessage(msg));
                break;

            case RTMPMessageType.Ack:
                //Do nothing
                break;

            case RTMPMessageType.UserControl:
                OnUserControl(new UserControlMessage(msg));
                break;

            case RTMPMessageType.SetWindowSize:
                OnSetWindowSize(new SetWindowSizeMessage(msg));
                break;

            case RTMPMessageType.SetPeerBandwidth:
                OnSetPeerBandwidth(new SetPeerBandwidthMessage(msg));
                break;

            case RTMPMessageType.Audio:
                OnAudio(msg);
                break;

            case RTMPMessageType.Video:
                OnVideo(msg);
                break;

            case RTMPMessageType.DataAMF3:
                OnData(new DataAMF3Message(msg));
                break;

            case RTMPMessageType.DataAMF0:
                OnData(new DataAMF0Message(msg));
                break;

            case RTMPMessageType.CommandAMF3:
                OnCommand(new CommandAMF3Message(msg));
                break;

            case RTMPMessageType.CommandAMF0:
                OnCommand(new CommandAMF0Message(msg));
                break;

            case RTMPMessageType.Aggregate:
                OnAggregate(new AggregateMessage(msg));
                break;

            case RTMPMessageType.SharedObjectAMF3:
            case RTMPMessageType.SharedObjectAMF0:
                //TODO:Not implemented
                break;

            default:
                //TODO:Unknown message
                break;
            }
        }
Example #50
0
 void OnVideo(RTMPMessage msg)
 {
     flvBuffer.OnVideo(msg);
 }
Example #51
0
 public SetPeerBandwidthMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader=new RTMPBinaryReader(new MemoryStream(x.Body))) {
     PeerBandwidth = reader.ReadUInt32();
     LimitType = (PeerBandwidthLimitType)reader.ReadByte();
       }
 }
			public void OnAudio(RTMPMessage msg)
			{
				this.connection.PostMessage(3,
					new RTMPMessage(
						msg.MessageType,
						msg.Timestamp,
						this.connection.StreamId,
						msg.Body)
				);
			}
Example #53
0
 public UserControlMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader=new RTMPBinaryReader(new MemoryStream(x.Body))) {
     UserControlMessageType = (UserControlMessageType)reader.ReadUInt16();
     UserControlMessagePayload = reader.ReadBytes(x.Body.Length-2);
       }
 }
Example #54
0
 protected CommandMessage(RTMPMessage x)
     : base(x)
 {
 }
Example #55
0
 public SetBufferLengthMessage(RTMPMessage x)
     : base(x)
 {
     using (var reader=new RTMPBinaryReader(new MemoryStream(x.Body))) {
       var type = (UserControlMessageType)reader.ReadUInt16();
       TargetStreamId = reader.ReadUInt32();
       BufferLength   = TimeSpan.FromMilliseconds(reader.ReadUInt32());
     }
 }
 public void OnVideo(RTMPMessage msg)
 {
     if (IsAVCHeader(msg)) {
     videoHeader = msg;
     OnHeaderChanged(msg);
       }
       OnContentChanged(msg);
 }