Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        /// <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);
        }