HlsAudioPlaylistHandler.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using MediaBrowser.Common.Net.Handlers;
  2. using MediaBrowser.Controller.Entities.Audio;
  3. using MediaBrowser.Model.Dto;
  4. using System;
  5. using System.ComponentModel.Composition;
  6. using System.Net;
  7. namespace MediaBrowser.Api.Streaming
  8. {
  9. /// <summary>
  10. /// Class HlsAudioPlaylistHandler
  11. /// </summary>
  12. [Export(typeof(IHttpServerHandler))]
  13. public class HlsAudioPlaylistHandler : BaseHlsPlaylistHandler<Audio>
  14. {
  15. /// <summary>
  16. /// Handleses the request.
  17. /// </summary>
  18. /// <param name="request">The request.</param>
  19. /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
  20. public override bool HandlesRequest(HttpListenerRequest request)
  21. {
  22. return ApiService.IsApiUrlMatch("audio.m3u8", request);
  23. }
  24. /// <summary>
  25. /// Gets the segment file extension.
  26. /// </summary>
  27. /// <value>The segment file extension.</value>
  28. /// <exception cref="InvalidOperationException">Only aac and mp3 audio codecs are supported.</exception>
  29. protected override string SegmentFileExtension
  30. {
  31. get
  32. {
  33. if (AudioCodec == AudioCodecs.Aac)
  34. {
  35. return ".aac";
  36. }
  37. if (AudioCodec == AudioCodecs.Mp3)
  38. {
  39. return ".mp3";
  40. }
  41. throw new InvalidOperationException("Only aac and mp3 audio codecs are supported.");
  42. }
  43. }
  44. /// <summary>
  45. /// Gets the video arguments.
  46. /// </summary>
  47. /// <returns>System.String.</returns>
  48. protected override string GetVideoArguments()
  49. {
  50. // No video
  51. return string.Empty;
  52. }
  53. /// <summary>
  54. /// Gets the map args.
  55. /// </summary>
  56. /// <value>The map args.</value>
  57. protected override string MapArgs
  58. {
  59. get
  60. {
  61. return string.Format("-map 0:{0}", AudioStream.Index);
  62. }
  63. }
  64. /// <summary>
  65. /// Gets the audio arguments.
  66. /// </summary>
  67. /// <returns>System.String.</returns>
  68. protected override string GetAudioArguments()
  69. {
  70. var codec = GetAudioCodec();
  71. var args = "-codec:a " + codec;
  72. var channels = GetNumAudioChannelsParam();
  73. if (channels.HasValue)
  74. {
  75. args += " -ac " + channels.Value;
  76. }
  77. var sampleRate = GetSampleRateParam();
  78. if (sampleRate.HasValue)
  79. {
  80. args += " -ar " + sampleRate.Value;
  81. }
  82. if (AudioBitRate.HasValue)
  83. {
  84. args += " -ab " + AudioBitRate.Value;
  85. }
  86. return args;
  87. }
  88. }
  89. }