/// <summary> /// Gets the state. /// </summary> /// <param name="request">The request.</param> /// <returns>StreamState.</returns> protected StreamState GetState(StreamRequest request) { var item = DtoService.GetItemByDtoId(request.Id); var media = (IHasMediaStreams)item; var url = RequestContext.PathInfo; if (!request.AudioCodec.HasValue) { request.AudioCodec = InferAudioCodec(url); } var state = new StreamState { Item = item, Request = request, Url = url }; var videoRequest = request as VideoStreamRequest; if (videoRequest != null) { if (!videoRequest.VideoCodec.HasValue) { videoRequest.VideoCodec = InferVideoCodec(url); } state.VideoStream = GetMediaStream(media.MediaStreams, videoRequest.VideoStreamIndex, MediaStreamType.Video); state.SubtitleStream = GetMediaStream(media.MediaStreams, videoRequest.SubtitleStreamIndex, MediaStreamType.Subtitle, false); state.AudioStream = GetMediaStream(media.MediaStreams, videoRequest.AudioStreamIndex, MediaStreamType.Audio); } else { state.AudioStream = GetMediaStream(media.MediaStreams, null, MediaStreamType.Audio, true); } return(state); }