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); }
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); }
public PCMAudioPayloadParser(PCMCodecInfo pcmCodecInfo) { _pcmCodecInfo = pcmCodecInfo ?? throw new ArgumentNullException(nameof(pcmCodecInfo)); }