private static string GetStreamedPath(BaseItemDto item, IApiClient apiClient, long? startTimeTicks, int? maxBitrate) { var profile = new MediaBrowserTheaterProfile(); StreamInfo info; if (item.IsAudio) { var options = new AudioOptions { Context = EncodingContext.Streaming, DeviceId = apiClient.DeviceId, ItemId = item.Id, // TODO: Reduce to 2 is user only has stereo speakers MaxAudioChannels = 6, MaxBitrate = maxBitrate, MediaSources = item.MediaSources, Profile = profile }; info = new StreamBuilder().BuildAudioItem(options); info.StartPositionTicks = startTimeTicks ?? 0; return info.ToUrl(apiClient.ServerAddress + "/mediabrowser"); } else { var options = new VideoOptions { Context = EncodingContext.Streaming, DeviceId = apiClient.DeviceId, ItemId = item.Id, // TODO: Reduce to 2 is user only has stereo speakers MaxAudioChannels = 6, MaxBitrate = maxBitrate, MediaSources = item.MediaSources, Profile = profile }; info = new StreamBuilder().BuildVideoItem(options); info.StartPositionTicks = startTimeTicks ?? 0; return info.ToUrl(apiClient.ServerAddress + "/mediabrowser") + "&EnableAdaptiveBitrateStreaming=false"; } }
private static PlayableItem GetStreamedItem(BaseItemDto item, List<MediaSourceInfo> mediaSources, IApiClient apiClient, long? startTimeTicks, int? maxBitrate) { var profile = new MediaBrowserTheaterProfile(); StreamInfo info; if (item.IsAudio) { var options = new AudioOptions { Context = EncodingContext.Streaming, DeviceId = apiClient.DeviceId, ItemId = item.Id, // TODO: Reduce to 2 is user only has stereo speakers MaxAudioChannels = 6, MaxBitrate = maxBitrate, MediaSources = mediaSources, Profile = profile }; info = new StreamBuilder().BuildAudioItem(options); info.StartPositionTicks = startTimeTicks ?? 0; if (info.MediaSource.Protocol == MediaProtocol.File && File.Exists(info.MediaSource.Path)) { return new PlayableItem { OriginalItem = item, PlayablePath = info.MediaSource.Path, MediaSource = info.MediaSource, StreamInfo = info }; } return new PlayableItem { OriginalItem = item, PlayablePath = info.ToUrl(apiClient.ServerAddress + "/mediabrowser"), MediaSource = info.MediaSource, StreamInfo = info }; } else { var options = new VideoOptions { Context = EncodingContext.Streaming, DeviceId = apiClient.DeviceId, ItemId = item.Id, // TODO: Reduce to 2 is user only has stereo speakers MaxAudioChannels = 6, MaxBitrate = maxBitrate, MediaSources = mediaSources, Profile = profile }; info = new StreamBuilder().BuildVideoItem(options); info.StartPositionTicks = startTimeTicks ?? 0; if (info.MediaSource.Protocol == MediaProtocol.File && File.Exists(info.MediaSource.Path)) { return new PlayableItem { OriginalItem = item, PlayablePath = info.MediaSource.Path, MediaSource = info.MediaSource, StreamInfo = info }; } //info.Container = "ts"; //info.VideoCodec = "copy"; //info.AudioCodec = "copy"; //info.Protocol = "http"; //if (item.IsType("tvchannel")) //{ // info.VideoCodec = "copy"; //} var playable = new PlayableItem { OriginalItem = item, PlayablePath = info.ToUrl(apiClient.ServerAddress + "/mediabrowser"), MediaSource = info.MediaSource, StreamInfo = info }; if (!info.IsDirectStream) { playable.PlayablePath += "&EnableAdaptiveBitrateStreaming=false"; } return playable; } }