コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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;
            }
        }