using MediaBrowser.Common.IO; using MediaBrowser.Controller; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; using System; namespace MediaBrowser.Api.Playback.Hls { /// /// Class AudioHlsService /// public class AudioHlsService : BaseHlsService { public AudioHlsService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager) : base(appPaths, userManager, libraryManager, isoManager) { } /// /// Gets the audio arguments. /// /// The state. /// System.String. protected override string GetAudioArguments(StreamState state) { var codec = GetAudioCodec(state.Request); var args = "-codec:a " + codec; var channels = GetNumAudioChannelsParam(state.Request, state.AudioStream); if (channels.HasValue) { args += " -ac " + channels.Value; } if (state.Request.AudioSampleRate.HasValue) { args += " -ar " + state.Request.AudioSampleRate.Value; } if (state.Request.AudioBitRate.HasValue) { args += " -ab " + state.Request.AudioBitRate.Value; } return args; } /// /// Gets the video arguments. /// /// The state. /// System.String. protected override string GetVideoArguments(StreamState state) { // No video return string.Empty; } /// /// Gets the segment file extension. /// /// The state. /// System.String. /// Only aac and mp3 audio codecs are supported. protected override string GetSegmentFileExtension(StreamState state) { if (state.Request.AudioCodec == AudioCodecs.Aac) { return ".aac"; } if (state.Request.AudioCodec == AudioCodecs.Mp3) { return ".mp3"; } throw new InvalidOperationException("Only aac and mp3 audio codecs are supported."); } /// /// Gets the map args. /// /// The state. /// System.String. protected override string GetMapArgs(StreamState state) { return string.Format("-map 0:{0}", state.AudioStream.Index); } } }