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; }
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(); }
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); } }
private void OnChannelTrackChanged(AtomCollection info) { ContentSink.OnChannelTrack(new ChannelTrack(info)); }
private void OnChannelInfoChanged(AtomCollection info) { ContentSink.OnChannelInfo(new ChannelInfo(info)); }