public static StreamParams ParseFromUrl(string url, ILibraryManager libraryManager, IMediaSourceManager mediaSourceManager)
            {
                if (string.IsNullOrEmpty(url))
                {
                    throw new ArgumentNullException("url");
                }

                var request = new StreamParams
                {
                    ItemId = GetItemId(url)
                };

                Guid parsedId;

                if (string.IsNullOrWhiteSpace(request.ItemId) || !Guid.TryParse(request.ItemId, out parsedId))
                {
                    return(request);
                }

                var index = url.IndexOf('?');

                if (index == -1)
                {
                    return(request);
                }

                var query = url.Substring(index + 1);
                QueryParamCollection values = MyHttpUtility.ParseQueryString(query);

                request.DeviceProfileId = values.Get("DeviceProfileId");
                request.DeviceId        = values.Get("DeviceId");
                request.MediaSourceId   = values.Get("MediaSourceId");
                request.LiveStreamId    = values.Get("LiveStreamId");
                request.IsDirectStream  = string.Equals("true", values.Get("Static"), StringComparison.OrdinalIgnoreCase);

                request.AudioStreamIndex    = GetIntValue(values, "AudioStreamIndex");
                request.SubtitleStreamIndex = GetIntValue(values, "SubtitleStreamIndex");
                request.StartPositionTicks  = GetLongValue(values, "StartPositionTicks");

                request.Item = string.IsNullOrEmpty(request.ItemId)
                    ? null
                    : libraryManager.GetItemById(parsedId);

                request._mediaSourceManager = mediaSourceManager;

                return(request);
            }
Пример #2
0
        private static long GetLongValue(QueryParamCollection values, string name)
        {
            var value = values.Get(name);

            if (long.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var result))
            {
                return(result);
            }

            return(0);
        }
Пример #3
0
        private static int?GetIntValue(QueryParamCollection values, string name)
        {
            var value = values.Get(name);

            if (int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var result))
            {
                return(result);
            }

            return(null);
        }