public void Specificationhelper_CreateSessionMedia_Success() { // *** ARRANGE *** string smField = "m=audio 49170 RTP/AVP 0 8 97"; string[] smaFields = new string[] { "a=rtpmap:0 PCMU/8000", "a=rtpmap:8 PCMA/8000", "a=rtpmap:97 iLBC/8000" }; SessionMedia expected = new SessionMedia("audio", 49170, "RTP/AVP", "0", "8", "97"); expected.AddMediaValueAttribute("rtpmap", "0 PCMU/8000"); expected.AddMediaValueAttribute("rtpmap", "8 PCMA/8000"); expected.AddMediaValueAttribute("rtpmap", "97 iLBC/8000"); // *** ACT *** SessionMedia result = SpecificationHelpers.CreateMedia(smField, smaFields); // *** ASSERT *** string eEncoded = expected.Encode(); string rEncoded = result.Encode(); Assert.Equal(eEncoded, rEncoded); }
/// <summary> /// Create new session media from sessdion description fields. /// </summary> /// <param name="mediaSessionDescriptionField">Session media description field.</param> /// <param name="mediaAttributesFields">Media attributes fields.</param> /// <returns>Session media object.</returns> /// <exception cref="SdpFormatException">Invalid format of session description field.</exception> public static SessionMedia CreateMedia(string mediaSessionDescriptionField, params string[] mediaAttributesFields) { // handle media description field string mediaFieldValue = GetFieldValue(mediaSessionDescriptionField); SessionMedia sm; try { // m=<media> <port> <proto> <fmt> string[] mediaValues = mediaFieldValue.Split(' '); bool portParsed = Int32.TryParse(mediaValues[1], out int port); // port is expected on second position if (mediaValues.Length < 3 || !portParsed) { throw new SdpFormatException(); } if (mediaValues.Length > 3) { // create session media with fmt int fmtCount = mediaValues.Length - 3; string[] fmt = new string[fmtCount]; Array.Copy(mediaValues, 3, fmt, 0, fmtCount); sm = new SessionMedia(mediaValues[0], port, mediaValues[2], fmt); } else { // create session media without fmt sm = new SessionMedia(mediaValues[0], port, mediaValues[2]); } sm.OriginalField = mediaSessionDescriptionField; } catch (Exception e) { if (e is IndexOutOfRangeException || e is SdpFormatException) { throw new SdpFormatException("Invalid format of session media field field."); } throw; } // handle meddia attributes foreach (string mediaAttribute in mediaAttributesFields) { sm.AddMediaAttribute(CreateAttribute(mediaAttribute)); } return(sm); }