You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

292 lines
11 KiB

  1. # Supported Features
  2. ## Browsers
  3. Any browser that supports [MSE] (media source extensions). See
  4. https://caniuse.com/#feat=mediasource
  5. Note that browsers with native HLS support may play content with the native player, unless
  6. the [overrideNative] option is used. Some notable browsers with native HLS players are:
  7. * Safari (macOS and iOS)
  8. * Chrome Android
  9. * Firefox Android
  10. However, due to the limited features offered by some of the native players, the only
  11. browser on which VHS defaults to using the native player is Safari (macOS and iOS).
  12. ## Streaming Formats and Media Types
  13. ### Streaming Formats
  14. VHS aims to be mostly streaming format agnostic. So long as the manifest can be parsed to
  15. a common JSON representation, VHS should be able to play it. However, due to some large
  16. differences between the major streaming formats (HLS and DASH), some format specific code
  17. is included in VHS. If you have another format you would like supported, please reach out
  18. to us (e.g., file an issue).
  19. * [HLS] (HTTP Live Streaming)
  20. * [MPEG-DASH] (Dynamic Adaptive Streaming over HTTP)
  21. ### Media Container Formats
  22. * [TS] (MPEG Transport Stream)
  23. * [MP4] (MPEG-4 Part 14: MP4, M4A, M4V, M4S, MPA), ISOBMFF
  24. * [AAC] (Advanced Audio Coding)
  25. ### Codecs
  26. If the content is packaged in an [MP4] container, then any codec supported by the browser
  27. is supported. If the content is packaged in a [TS] container, then the codec must be
  28. supported by [the transmuxer]. The following codecs are supported by the transmuxer:
  29. * [AVC] (Advanced Video Coding, h.264)
  30. * [AVC1] (Advnced Video Coding, h.265)
  31. * [HE-AAC] (High Efficiency Advanced Audio Coding, mp4a.40.5)
  32. * LC-AAC (Low Complexity Advanced Audio Coding, mp4a.40.2)
  33. ## General Notable Features
  34. The following is a list of some, but not all, common streaming features supported by VHS.
  35. It is meant to highlight some common use cases (and provide for easy searching), but is
  36. not meant serve as an exhaustive list.
  37. * VOD (video on demand)
  38. * LIVE
  39. * Multiple audio tracks
  40. * Timed [ID3] Metadata is automatically translated into HTML5 metedata text tracks
  41. * Cross-domain credentials support with [CORS]
  42. * Any browser supported resolution (e.g., 4k)
  43. * Any browser supported framerate (e.g., 60fps)
  44. * [DRM] via [videojs-contrib-eme]
  45. * Audio only (non DRM)
  46. * Video only (non DRM)
  47. * In-manifest [WebVTT] subtitles are automatically translated into standard HTML5 subtitle
  48. tracks
  49. * [AES-128] and SAMPLE-AES segment encryption
  50. ## Notable Missing Features
  51. Note that the following features have not yet been implemented or may work but are not
  52. currently suppported in browsers that do not rely on the native player. For browsers that
  53. use the native player (e.g., Safari for HLS), please refer to their documentation.
  54. ### Container Formats
  55. * [WebM]
  56. * [WAV]
  57. * [MP3]
  58. * [OGG]
  59. ### Codecs
  60. If the content is packaged within an [MP4] container and the browser supports the codec, it
  61. will play. However, the following are some codecs that are not routinely tested, or are not
  62. supported when packaged within [TS].
  63. * [MP3]
  64. * [Vorbis]
  65. * [WAV]
  66. * [FLAC]
  67. * [Opus]
  68. * [VP8]
  69. * [VP9]
  70. * [Dolby Vision] (DVHE)
  71. * [Dolby Digital] Audio (AC-3)
  72. * [Dolby Digital Plus] (E-AC-3)
  73. ### General Missing Features
  74. * Audio/video only DRM streams
  75. ### HLS Missing Features
  76. Note: features for low latency HLS in the [2nd edition of HTTP Live Streaming] are on the
  77. roadmap, but not currently available.
  78. VHS strives to support all of the features in the HLS specification, however, some have
  79. not yet been implemented. VHS currently supports everything in the
  80. [HLS specification v7, revision 23], except the following:
  81. * Use of [EXT-X-MAP] with [TS] segments
  82. * [EXT-X-MAP] is currently supported for [MP4] segments, but not yet for TS
  83. * I-Frame playlists via [EXT-X-I-FRAMES-ONLY] and [EXT-X-I-FRAME-STREAM-INF]
  84. * [MP3] Audio
  85. * [Dolby Digital] Audio (AC-3)
  86. * [Dolby Digital Plus] Audio (E-AC-3)
  87. * KEYFORMATVERSIONS of [EXT-X-KEY]
  88. * [EXT-X-DATERANGE]
  89. * [EXT-X-SESSION-DATA]
  90. * [EXT-X-SESSION-KEY]
  91. * [EXT-X-INDEPENDENT-SEGMENTS]
  92. * Use of [EXT-X-START] (value parsed but not used)
  93. * Alternate video via [EXT-X-MEDIA] of type video
  94. * ASSOC-LANGUAGE in [EXT-X-MEDIA]
  95. * CHANNELS in [EXT-X-MEDIA]
  96. * Use of AVERAGE-BANDWIDTH in [EXT-X-STREAM-INF] (value parsed but not used)
  97. * Use of FRAME-RATE in [EXT-X-STREAM-INF] (value parsed but not used)
  98. * Use of HDCP-LEVEL in [EXT-X-STREAM-INF]
  99. In the event of encoding changes within a playlist (see
  100. https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-6.3.3), the
  101. behavior will depend on the browser.
  102. ### DASH Missing Features
  103. DASH support is more recent than HLS support in VHS, however, VHS strives to achieve as
  104. complete compatibility as possible with the DASH spec. The following are some notable
  105. features in the DASH specification that are not yet implemented in VHS:
  106. Note that many of the following are parsed by [mpd-parser] but are either not yet used, or
  107. simply take on their default values (in the case where they have valid defaults).
  108. * Audio rendition switching
  109. * Each video rendition is paired with an audio rendition for the duration of playback.
  110. * MPD
  111. * @id
  112. * @profiles
  113. * @availabilityStartTime
  114. * @availabilityEndTime
  115. * @minBufferTime
  116. * @maxSegmentDuration
  117. * @maxSubsegmentDuration
  118. * ProgramInformation
  119. * Location
  120. * Metrics
  121. * Period
  122. * @xlink:href
  123. * @xlink:actuate
  124. * @id
  125. * @duration
  126. * Normally used for determing the PeriodStart of the next period, VHS instead relies
  127. on segment durations to determine timing of each segment and timeline
  128. * @bitstreamSwitching
  129. * Subset
  130. * AdaptationSet
  131. * @xlink:href
  132. * @xlink:actuate
  133. * @id
  134. * @group
  135. * @par (picture aspect ratio)
  136. * @minBandwidth
  137. * @maxBandwidth
  138. * @minWidth
  139. * @maxWidth
  140. * @minHeight
  141. * @maxHeight
  142. * @minFrameRate
  143. * @maxFrameRate
  144. * @segmentAlignment
  145. * @bitstreamSwitching
  146. * @subsegmentAlignment
  147. * @subsegmentStartsWithSAP
  148. * Accessibility
  149. * Rating
  150. * Viewpoint
  151. * ContentComponent
  152. * Representation
  153. * @id (used for SegmentTemplate but not exposed otherwise)
  154. * @qualityRanking
  155. * @dependencyId (dependent representation)
  156. * @mediaStreamStructureId
  157. * SubRepresentation
  158. * CommonAttributesElements (for AdaptationSet, Representation and SubRepresentation elements)
  159. * @profiles
  160. * @sar
  161. * @frameRate
  162. * @audioSamplingRate
  163. * @segmentProfiles
  164. * @maximumSAPPeriod
  165. * @startWithSAP
  166. * @maxPlayoutRate
  167. * @codingDependency
  168. * @scanType
  169. * FramePacking
  170. * AudioChannelConfiguration
  171. * SegmentBase
  172. * @presentationTimeOffset
  173. * @indexRangeExact
  174. * RepresentationIndex
  175. * MultipleSegmentBaseInformation elements
  176. * SegmentList
  177. * @xlink:href
  178. * @xlink:actuate
  179. * MultipleSegmentBaseInformation
  180. * SegmentURL
  181. * @index
  182. * @indexRange
  183. * SegmentTemplate
  184. * MultipleSegmentBaseInformation
  185. * @index
  186. * @bitstreamSwitching
  187. * BaseURL
  188. * @serviceLocation
  189. * Template-based Segment URL construction
  190. * Live DASH assets that use $Time$ in a SegmentTemplate, and also have a SegmentTimeline
  191. where only the first S has a t and the rest only have a d do not update on playlist
  192. refreshes
  193. See: https://github.com/videojs/http-streaming#dash-assets-with-time-interpolation-and-segmenttimelines-with-no-t
  194. * ContentComponent elements
  195. * Right now manifests are assumed to have a single content component, with the properties
  196. described directly on the AdaptationSet element
  197. * SubRepresentation elements
  198. * Subset elements
  199. * Early Available Periods (may work, but has not been tested)
  200. * Access to subsegments via a subsegment index ('ssix')
  201. * The @profiles attribute is ignored (best support for all profiles is attempted, without
  202. consideration of the specific profile). For descriptions on profiles, see section 8 of
  203. the DASH spec.
  204. * Construction of byte range URLs via a BaseURL byteRange template (Annex E.2)
  205. * Multiperiod content where the representation sets are not the same across periods
  206. * In the event that an S element has a t attribute that is greater than what is expected,
  207. it is not treated as a discontinuity, but instead retains its segment value, and may
  208. result in a gap in the content
  209. [MSE]: https://www.w3.org/TR/media-source/
  210. [HLS]: https://en.wikipedia.org/wiki/HTTP_Live_Streaming
  211. [MPEG-DASH]: https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP
  212. [TS]: https://en.wikipedia.org/wiki/MPEG_transport_stream
  213. [MP4]: https://en.wikipedia.org/wiki/MPEG-4_Part_14
  214. [AAC]: https://en.wikipedia.org/wiki/Advanced_Audio_Coding
  215. [AVC]: https://en.wikipedia.org/wiki/Advanced_Video_Coding
  216. [AVC1]: https://en.wikipedia.org/wiki/Advanced_Video_Coding
  217. [HE-AAC]: https://en.wikipedia.org/wiki/High-Efficiency_Advanced_Audio_Coding
  218. [ID3]: https://en.wikipedia.org/wiki/ID3
  219. [CORS]: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
  220. [DRM]: https://en.wikipedia.org/wiki/Digital_rights_management
  221. [WebVTT]: https://www.w3.org/TR/webvtt1/
  222. [AES-128]: https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
  223. [WebM]: https://en.wikipedia.org/wiki/WebM
  224. [WAV]: https://en.wikipedia.org/wiki/WAV
  225. [MP3]: https://en.wikipedia.org/wiki/MP3
  226. [OGG]: https://en.wikipedia.org/wiki/Ogg
  227. [Vorbis]: https://en.wikipedia.org/wiki/Vorbis
  228. [FLAC]: https://en.wikipedia.org/wiki/FLAC
  229. [Opus]: https://en.wikipedia.org/wiki/Opus_(audio_format)
  230. [VP8]: https://en.wikipedia.org/wiki/VP8
  231. [VP9]: https://en.wikipedia.org/wiki/VP9
  232. [overrideNative]: https://github.com/videojs/http-streaming#overridenative
  233. [the transmuxer]: https://github.com/videojs/mux.js
  234. [videojs-contrib-eme]: https://github.com/videojs/videojs-contrib-eme
  235. [2nd edition of HTTP Live Streaming]: https://tools.ietf.org/html/draft-pantos-hls-rfc8216bis-07.html
  236. [HLS specification v7, revision 23]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23
  237. [EXT-X-MAP]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.2.5
  238. [EXT-X-STREAM-INF]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.4.2
  239. [EXT-X-SESSION-DATA]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.4.4
  240. [EXT-X-DATERANGE]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.2.7
  241. [EXT-X-KEY]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.2.7
  242. [EXT-X-I-FRAMES-ONLY]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.6
  243. [EXT-X-I-FRAME-STREAM-INF]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.4.3
  244. [EXT-X-SESSION-KEY]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.4.5
  245. [EXT-X-INDEPENDENT-SEGMENTS]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.5.1
  246. [EXT-X-START]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.5.2
  247. [EXT-X-MEDIA]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.4.1
  248. [Dolby Vision]: https://en.wikipedia.org/wiki/High-dynamic-range_video#Dolby_Vision
  249. [Dolby Digital]: https://en.wikipedia.org/wiki/Dolby_Digital
  250. [Dolby Digital Plus]: https://en.wikipedia.org/wiki/Dolby_Digital_Plus
  251. [mpd-parser]: https://github.com/videojs/mpd-parser