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);
        }