public void RemoveWithLimit1() { List <int> list = new List <int>() { 1, 2, 0, 1, 0, 0, 1 }; Remover <int> remover = new Remover <int>(list, 5); int i = 0; while (i < remover.Limit) { if (list[i] == 0) { remover.Remove(ref i); } else { remover.Skip(ref i); } } remover.Finish(remover.Limit); Assert.AreEqual(remover.RemovedCount, 2); CollectionAssert.AreEqual(new int[] { 1, 2, 1, 0, 1 }, list); }
public void CutToEnd(TimeSpan end) { logger.Log("Removing video and audio packets later than {0}...", (int)end.TotalSeconds); int i = 0; Remover <BasePacket> remover = new Remover <BasePacket>(Packets); while (i < Packets.Count) { BasePacket packet = Packets[i]; if ((packet.PacketType == PacketType.VideoPayload || packet.PacketType == PacketType.AudioPayload) && packet.TimeStamp > end) { remover.Remove(ref i); } else { remover.Skip(ref i); } } remover.Finish(Packets.Count); logger.Log("Removed {0} packets", remover.RemovedCount); }
public void FilterPackets() { int i = 0; Remover <BasePacket> remover = new Remover <BasePacket>(Packets); while (i < Packets.Count) { if (Packets[i].PacketType != PacketType.AMFMetadata && Packets[i].PacketType != PacketType.AudioPayload && Packets[i].PacketType != PacketType.VideoPayload) { remover.Remove(ref i); } else { remover.Skip(ref i); } } remover.Finish(Packets.Count); logger.Log("Packets filtering done. Removed: {0} packets", remover.RemovedCount); }
public void CutFromStart(TimeSpan start) { logger.Log("Searching for keyframe nearest to {0}...", (int)start.TotalSeconds); int keyframeIndex = -1; int headerIndex = -1; for (int j = 0; j < Packets.Count; j++) { BasePacket packet = Packets[j]; if (packet.PacketType != PacketType.VideoPayload || ((VideoPacket)packet).FrameType != VideoFrameType.KeyFrame) { continue; } if (((VideoPacket)packet).IsHeader) { headerIndex = j; } if (packet.TimeStamp > start) { break; } keyframeIndex = j; } if (keyframeIndex == -1) { logger.Log("Keyframe not found."); return; } if (headerIndex == -1) { logger.Log("Header keyframe not found."); return; } logger.Log("Keyframe found at #{0}, header keyframe found at #{1}", keyframeIndex, headerIndex); int i = 0; Remover <BasePacket> remover = new Remover <BasePacket>(Packets, keyframeIndex); while (i < remover.Limit) { BasePacket packet = Packets[i]; if ((packet.PacketType == PacketType.VideoPayload || packet.PacketType == PacketType.AudioPayload) && i != headerIndex) { remover.Remove(ref i); } else { remover.Skip(ref i); } } remover.Finish(remover.Limit); logger.Log("Removed {0} packets", remover.RemovedCount); }