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