UNPKG

11.1 kBMarkdownView Raw
1# Supported Features
2
3## Browsers
4
5Any browser that supports [MSE] (media source extensions). See
6https://caniuse.com/#feat=mediasource
7
8Note that browsers with native HLS support may play content with the native player, unless
9the [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
15However, due to the limited features offered by some of the native players, the only
16browser 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
22VHS aims to be mostly streaming format agnostic. So long as the manifest can be parsed to
23a common JSON representation, VHS should be able to play it. However, due to some large
24differences between the major streaming formats (HLS and DASH), some format specific code
25is included in VHS. If you have another format you would like supported, please reach out
26to 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
39If the content is packaged in an [MP4] container, then any codec supported by the browser
40is supported. If the content is packaged in a [TS] container, then the codec must be
41supported 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
50The following is a list of some, but not all, common streaming features supported by VHS.
51It is meant to highlight some common use cases (and provide for easy searching), but is
52not 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
70Note that the following features have not yet been implemented or may work but are not
71currently suppported in browsers that do not rely on the native player. For browsers that
72use 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
83If the content is packaged within an [MP4] container and the browser supports the codec, it
84will play. However, the following are some codecs that are not routinely tested, or are not
85supported 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
100Note: features for low latency HLS in the [2nd edition of HTTP Live Streaming] are on the
101roadmap, but not currently available.
102
103VHS strives to support all of the features in the HLS specification, however, some have
104not 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
127In the event of encoding changes within a playlist (see
128https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-6.3.3), the
129behavior will depend on the browser.
130
131### DASH Missing Features
132
133DASH support is more recent than HLS support in VHS, however, VHS strives to achieve as
134complete compatibility as possible with the DASH spec. The following are some notable
135features in the DASH specification that are not yet implemented in VHS:
136
137Note that many of the following are parsed by [mpd-parser] but are either not yet used, or
138simply 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