public G726AudioPayloadParser(G726CodecInfo g726CodecInfo) { if (g726CodecInfo == null) { throw new ArgumentNullException(nameof(g726CodecInfo)); } _bitsPerCodedSample = GetBitsPerCodedSample(g726CodecInfo.Bitrate); }
public void Parse_TestData_ReturnsValidFrame(int bitrate) { var testCodecInfo = new G726CodecInfo(bitrate); byte[] testBytes = { 1, 2, 3, 4, 5, 6, 7, 8 }; RawG726Frame frame = null; var parser = new G726AudioPayloadParser(testCodecInfo); parser.FrameGenerated = rawFrame => frame = (RawG726Frame)rawFrame; parser.Parse(TimeSpan.Zero, new ArraySegment <byte>(testBytes), true); Assert.IsNotNull(frame); Assert.AreEqual(FrameType.Audio, frame.Type); Assert.AreEqual(bitrate / 8000, frame.BitsPerCodedSample); Assert.IsTrue(frame.FrameSegment.SequenceEqual(testBytes)); }
public void Parse_SDPWithG726Track_ReturnsWithG726CodecTrack(int bitrate) { string testInput = "m=audio 0 RTP/AVP 97\r\n" + "a=control:trackID=1\r\n" + $"a=rtpmap:97 G726-{bitrate}/8000\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(); G726CodecInfo codecInfo = (G726CodecInfo)audioTrack.Codec; Assert.AreEqual(1, codecInfo.Channels); Assert.AreEqual(8000, codecInfo.SampleRate); Assert.AreEqual(bitrate * 1000, codecInfo.Bitrate); }
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); }