public void Parse_TestData_ReturnsValidFrame()
        {
            var testCodecInfo = new G711UCodecInfo();

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

            RawG711UFrame frame  = null;
            var           parser = new G711AudioPayloadParser(testCodecInfo);

            parser.FrameGenerated = rawFrame => frame = (RawG711UFrame)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));
        }
        public void Parse_SDPWithG711UTrack_ReturnsWithG711UCodecTrack()
        {
            string testInput = "m=audio 0 RTP/AVP 0\r\n" +
                               "a=rtpmap:0 PCMU/16000/2\r\n" +
                               "a=control:trackID=2\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();

            G711UCodecInfo codecInfo = (G711UCodecInfo)audioTrack.Codec;

            Assert.AreEqual(2, codecInfo.Channels);
            Assert.AreEqual(16000, codecInfo.SampleRate);
        }
Esempio n. 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);
        }
        private static CodecInfo TryCreateCodecInfo(string codecName, int samplesFrequency, int channels)
        {
            if (codecName == "JPEG")
            {
                return(new MJPEGCodecInfo());
            }

            if (codecName == "H264")
            {
                return(new H264CodecInfo());
            }

            bool isPcmu = codecName == "PCMU";
            bool isPcma = codecName == "PCMA";

            if (isPcmu || isPcma)
            {
                G711CodecInfo g711CodecInfo;

                if (isPcmu)
                {
                    g711CodecInfo = new G711UCodecInfo();
                }
                else
                {
                    g711CodecInfo = new G711ACodecInfo();
                }

                if (samplesFrequency != 0)
                {
                    g711CodecInfo.SampleRate = samplesFrequency;
                }
                if (channels != 0)
                {
                    g711CodecInfo.Channels = channels;
                }

                return(g711CodecInfo);
            }

            if (codecName == "L16" || codecName == "L8")
            {
                return(new PCMCodecInfo(samplesFrequency != 0 ? samplesFrequency : 8000,
                                        codecName == "L16" ? 16 : 8, channels != 0 ? channels : 1));
            }

            if (codecName == "MPEG4-GENERIC")
            {
                return(new AACCodecInfo());
            }

            if (codecName.Contains("726"))
            {
                int bitrate;

                if (codecName.Contains("16"))
                {
                    bitrate = 16000;
                }
                else if (codecName.Contains("24"))
                {
                    bitrate = 24000;
                }
                else if (codecName.Contains("32"))
                {
                    bitrate = 32000;
                }
                else if (codecName.Contains("40"))
                {
                    bitrate = 40000;
                }
                else
                {
                    return(null);
                }

                var g726CodecInfo = new G726CodecInfo(bitrate);

                if (samplesFrequency != 0)
                {
                    g726CodecInfo.SampleRate = samplesFrequency;
                }
                else if (channels != 0)
                {
                    g726CodecInfo.Channels = channels;
                }

                return(g726CodecInfo);
            }

            return(null);
        }