123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- using MediaBrowser.Common.IO;
- using MediaBrowser.Common.Net.Handlers;
- using MediaBrowser.Controller.Entities.Audio;
- using MediaBrowser.Controller.Resolvers;
- using MediaBrowser.Model.Dto;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- namespace MediaBrowser.Api.Streaming
- {
- /// <summary>
- /// Providers a progressive streaming audio api
- /// </summary>
- public class AudioHandler : BaseProgressiveStreamingHandler<Audio>
- {
- /// <summary>
- /// Handleses the request.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
- public override bool HandlesRequest(HttpListenerRequest request)
- {
- return EntityResolutionHelper.AudioFileExtensions.Any(a => ApiService.IsApiUrlMatch("audio" + a, request));
- }
- /// <summary>
- /// Gets the audio codec.
- /// </summary>
- /// <value>The audio codec.</value>
- /// <exception cref="InvalidOperationException"></exception>
- protected override AudioCodecs? AudioCodec
- {
- get
- {
- var ext = OutputFileExtension;
- if (ext.Equals(".aac", StringComparison.OrdinalIgnoreCase) || ext.Equals(".m4a", StringComparison.OrdinalIgnoreCase))
- {
- return AudioCodecs.Aac;
- }
- if (ext.Equals(".mp3", StringComparison.OrdinalIgnoreCase))
- {
- return AudioCodecs.Mp3;
- }
- if (ext.Equals(".wma", StringComparison.OrdinalIgnoreCase))
- {
- return AudioCodecs.Wma;
- }
- if (ext.Equals(".oga", StringComparison.OrdinalIgnoreCase) || ext.Equals(".ogg", StringComparison.OrdinalIgnoreCase))
- {
- return AudioCodecs.Vorbis;
- }
- throw new InvalidOperationException();
- }
- }
- /// <summary>
- /// Creates arguments to pass to ffmpeg
- /// </summary>
- /// <param name="outputPath">The output path.</param>
- /// <param name="isoMount">The iso mount.</param>
- /// <returns>System.String.</returns>
- /// <exception cref="System.InvalidOperationException">Only aac and mp3 audio codecs are supported.</exception>
- /// <exception cref="InvalidOperationException">Only aac and mp3 audio codecs are supported.</exception>
- /// <exception cref="ArgumentException">Only aac and mp3 audio codecs are supported.</exception>
- protected override string GetCommandLineArguments(string outputPath, IIsoMount isoMount)
- {
- var audioTranscodeParams = new List<string>();
- var outputFormat = AudioCodec;
- if (outputFormat != AudioCodecs.Aac && outputFormat != AudioCodecs.Mp3)
- {
- throw new InvalidOperationException("Only aac and mp3 audio codecs are supported.");
- }
- if (AudioBitRate.HasValue)
- {
- audioTranscodeParams.Add("-ab " + AudioBitRate.Value);
- }
- var channels = GetNumAudioChannelsParam();
- if (channels.HasValue)
- {
- audioTranscodeParams.Add("-ac " + channels.Value);
- }
- var sampleRate = GetSampleRateParam();
- if (sampleRate.HasValue)
- {
- audioTranscodeParams.Add("-ar " + sampleRate.Value);
- }
- const string vn = " -vn";
- return string.Format("{0} -i {1}{2} -threads 0{5} {3} -id3v2_version 3 -write_id3v1 1 \"{4}\"",
- FastSeekCommandLineParameter,
- GetInputArgument(isoMount),
- SlowSeekCommandLineParameter,
- string.Join(" ", audioTranscodeParams.ToArray()),
- outputPath,
- vn).Trim();
- }
- }
- }
|