public override void Parse(TimeSpan timeOffset, ArraySegment <byte> byteSegment, bool markerBit) { Debug.Assert(byteSegment.Array != null, "byteSegment.Array != null"); if (!markerBit && timeOffset != _timeOffset) { #if DEBUG Console.WriteLine($"[H264VideoPayloadParser] Generate frame from offset: {timeOffset} != {_timeOffset}"); #endif _h264Parser.TryGenerateFrame(); } _timeOffset = timeOffset; PackModeType packMode = (PackModeType)(byteSegment.Array[byteSegment.Offset] & 0x1F); switch (packMode) { case PackModeType.FU_A: ParseFU(byteSegment, 0, markerBit); break; case PackModeType.FU_B: ParseFU(byteSegment, DecodingOrderNumberFieldSize, markerBit); break; case PackModeType.STAP_A: ParseSTAP(byteSegment, 0, markerBit); break; case PackModeType.STAP_B: ParseSTAP(byteSegment, DecodingOrderNumberFieldSize, markerBit); break; case PackModeType.MTAP16: ParseMTAP(byteSegment, 2, markerBit); break; case PackModeType.MTAP24: ParseMTAP(byteSegment, 3, markerBit); break; default: #if DEBUG Console.WriteLine($"[H264VideoPayloadParser] Parsing default packet type."); #endif _h264Parser.Parse(byteSegment, markerBit); break; } }
public override void Parse(TimeSpan timeOffset, int mediaId, ArraySegment <byte> byteSegment, bool markerBit) { Debug.Assert(byteSegment.Array != null, "byteSegment.Array != null"); //Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " - H264Parser - previous _timeOffset: " + _timeOffset.ToString()); if (!markerBit && timeOffset != _timeOffset) { _h264Parser.TryGenerateFrame(mediaId); } _timeOffset = timeOffset; PackModeType packMode = (PackModeType)(byteSegment.Array[byteSegment.Offset] & 0x1F); switch (packMode) { case PackModeType.FU_A: ParseFU(mediaId, byteSegment, 0, markerBit); break; case PackModeType.FU_B: ParseFU(mediaId, byteSegment, DecodingOrderNumberFieldSize, markerBit); break; case PackModeType.STAP_A: ParseSTAP(mediaId, byteSegment, 0, markerBit); break; case PackModeType.STAP_B: ParseSTAP(mediaId, byteSegment, DecodingOrderNumberFieldSize, markerBit); break; case PackModeType.MTAP16: ParseMTAP(mediaId, byteSegment, 2, markerBit); break; case PackModeType.MTAP24: ParseMTAP(mediaId, byteSegment, 3, markerBit); break; default: _h264Parser.Parse(mediaId, byteSegment, markerBit); break; } }
public override void Parse(TimeSpan timeOffset, ArraySegment <byte> byteSegment, bool markerBit) { Debug.Assert(byteSegment.Array != null, "byteSegment.Array != null"); if (!markerBit && timeOffset != _timeOffset) { _h264Parser.TryGenerateFrame(); } _timeOffset = timeOffset; PackModeType packMode = (PackModeType)(byteSegment.Array[byteSegment.Offset] & 0x1F); switch (packMode) { case PackModeType.FU_A: ParseFU(byteSegment, 0, markerBit); break; case PackModeType.FU_B: ParseFU(byteSegment, DecodingOrderNumberFieldSize, markerBit); break; case PackModeType.STAP_A: ParseSTAP(byteSegment, 0, markerBit); break; case PackModeType.STAP_B: ParseSTAP(byteSegment, DecodingOrderNumberFieldSize, markerBit); break; case PackModeType.MTAP16: ParseMTAP(byteSegment, 2, markerBit); break; case PackModeType.MTAP24: ParseMTAP(byteSegment, 3, markerBit); break; default: _h264Parser.Parse(byteSegment, false, markerBit); break; } }
public override void Parse(TimeSpan timeOffset, ArraySegment <byte> byteSegment, bool markerBit) { Debug.Assert(byteSegment.Array != null, "byteSegment.Array != null"); PackModeType packMode = (PackModeType)(byteSegment.Array[byteSegment.Offset] & 0x1F); DateTime frameTimestamp = GetFrameTimestamp(timeOffset); switch (packMode) { case PackModeType.FU_A: ParseFU(frameTimestamp, byteSegment, 0, markerBit); break; case PackModeType.FU_B: ParseFU(frameTimestamp, byteSegment, DecodingOrderNumberFieldSize, markerBit); break; case PackModeType.STAP_A: ParseSTAP(frameTimestamp, byteSegment, 0, markerBit); break; case PackModeType.STAP_B: ParseSTAP(frameTimestamp, byteSegment, DecodingOrderNumberFieldSize, markerBit); break; case PackModeType.MTAP16: ParseMTAP(frameTimestamp, byteSegment, 2, markerBit); break; case PackModeType.MTAP24: ParseMTAP(frameTimestamp, byteSegment, 3, markerBit); break; default: _h264Parser.Parse(frameTimestamp, byteSegment, false, markerBit); break; } }