Пример #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;
        }
Пример #2
0
 private void FlushContents()
 {
     if (bodyBuffer.Length > 0)
     {
         ContentSink.OnContent(
             new Content(streamIndex, DateTime.Now - streamOrigin, position, bodyBuffer.ToArray()));
         position += bodyBuffer.Length;
         bodyBuffer.SetLength(0);
     }
     flushTimer.Reset();
     flushTimer.Start();
 }
Пример #3
0
 private void OnContentChanged(RTMPMessage content)
 {
     if (streamIndex < 0)
     {
         OnHeaderChanged(content);
         return;
     }
     WriteMessage(bodyBuffer, content, timestampOrigin);
     if (bodyBuffer.Length > 0)
     {
         ContentSink.OnContent(new Content(streamIndex, DateTime.Now - streamOrigin, position, bodyBuffer.ToArray(), PCPChanPacketContinuation.None));
         position += bodyBuffer.Length;
         bodyBuffer.SetLength(0);
     }
 }
Пример #4
0
 private void OnChannelTrackChanged(AtomCollection info)
 {
     ContentSink.OnChannelTrack(new ChannelTrack(info));
 }
Пример #5
0
 private void OnChannelInfoChanged(AtomCollection info)
 {
     ContentSink.OnChannelInfo(new ChannelInfo(info));
 }