public void Parse_TestData_ReturnsValidFrame()
        {
            var testCodecInfo = new PCMCodecInfo(44100, 16, 2);

            byte[] testBytes = { 1, 2, 3, 4, 5, 6, 7, 8 };

            RawPCMFrame frame  = null;
            var         parser = new PCMAudioPayloadParser(testCodecInfo);

            parser.FrameGenerated = rawFrame => frame = (RawPCMFrame)rawFrame;
            parser.Parse(TimeSpan.Zero, new ArraySegment <byte>(testBytes), true);

            Assert.IsNotNull(frame);
            Assert.AreEqual(FrameType.Audio, frame.Type);
            Assert.IsTrue(frame.FrameSegment.SequenceEqual(testBytes));
            Assert.AreEqual(44100, frame.SampleRate);
            Assert.AreEqual(16, frame.BitsPerSample);
            Assert.AreEqual(2, frame.Channels);
        }
        public void Parse_SDPWithPCMTrack_ReturnsWithPCMCodecTrack(int bitsPerSample)
        {
            string testInput = "m=audio 0 RTP/AVP 97\r\n" +
                               "c=IN IP4 0.0.0.0\r\n" +
                               "b=AS:0\r\n" +
                               $"a=rtpmap:97 L{bitsPerSample}/16000\r\n" +
                               "a=control:track2\r\n";

            var testBytes = Encoding.ASCII.GetBytes(testInput);

            var parser = new SdpParser();
            RtspMediaTrackInfo audioTrack = parser.Parse(testBytes).Where(t => t is RtspMediaTrackInfo)
                                            .Cast <RtspMediaTrackInfo>().First();

            PCMCodecInfo codecInfo = (PCMCodecInfo)audioTrack.Codec;

            Assert.AreEqual(1, codecInfo.Channels);
            Assert.AreEqual(16000, codecInfo.SampleRate);
            Assert.AreEqual(bitsPerSample, codecInfo.BitsPerSample);
        }
示例#3
0
        private static CodecInfo TryCreateCodecInfo(int payloadFormatNumber)
        {
            CodecInfo codecInfo = null;

            switch (payloadFormatNumber)
            {
            case 0:
                codecInfo = new G711UCodecInfo();
                break;

            case 2:
                codecInfo = new G726CodecInfo(32 * 1000);
                break;

            case 8:
                codecInfo = new G711ACodecInfo();
                break;

            case 10:
                codecInfo = new PCMCodecInfo(44100, 16, 2);
                break;

            case 11:
                codecInfo = new PCMCodecInfo(44100, 16, 1);
                break;

            case 26:
                codecInfo = new MJPEGCodecInfo();
                break;

            case 98:
                codecInfo = new MetadataCodecInfo();
                break;

            case 105:
                codecInfo = new H264CodecInfo();
                break;
            }

            return(codecInfo);
        }
示例#4
0
 public PCMAudioPayloadParser(PCMCodecInfo pcmCodecInfo)
 {
     _pcmCodecInfo = pcmCodecInfo ?? throw new ArgumentNullException(nameof(pcmCodecInfo));
 }