Ejemplo n.º 1
0
        private void OnHeaderChanged(RTMPMessage msg)
        {
            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();

            ContentSink.OnContentHeader(new Content(streamIndex, TimeSpan.Zero, position, bytes, PCPChanPacketContinuation.None));
            position += bytes.Length;
        }
Ejemplo n.º 2
0
        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);
            }
        }