@amazon/vinyl 2.0.4 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/dist/index.cjs +624 -338
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/index.js +643 -350
  4. package/dist/index.js.map +4 -4
  5. package/dist/test/benchmark.es5.js +8 -5
  6. package/dist/test/benchmark.js +228 -0
  7. package/dist/test/benchmark.js.map +4 -4
  8. package/dist/test/integ.es5.js +183 -157
  9. package/dist/test/integ.js +1966 -817
  10. package/dist/test/integ.js.map +4 -4
  11. package/dist/types/current/index.d.ts +4 -0
  12. package/dist/types/current/index.d.ts.map +1 -1
  13. package/dist/types/current/index.js +4 -0
  14. package/dist/types/current/streaming/AudioOptions.d.ts +39 -0
  15. package/dist/types/current/streaming/AudioOptions.d.ts.map +1 -0
  16. package/dist/types/current/streaming/AudioOptions.js +15 -0
  17. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts +2 -2
  18. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts.map +1 -1
  19. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.js +5 -5
  20. package/dist/types/current/text/HtmlTextTrackRenderer.d.ts +60 -0
  21. package/dist/types/current/text/HtmlTextTrackRenderer.d.ts.map +1 -0
  22. package/dist/types/current/text/HtmlTextTrackRenderer.js +231 -0
  23. package/dist/types/current/text/SidecarTextTrackController.d.ts +65 -53
  24. package/dist/types/current/text/SidecarTextTrackController.d.ts.map +1 -1
  25. package/dist/types/current/text/SidecarTextTrackController.js +167 -154
  26. package/dist/types/current/text/SidecarTextTrackLoader.d.ts +5 -0
  27. package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -1
  28. package/dist/types/current/text/SidecarTextTrackLoader.js +13 -7
  29. package/dist/types/current/text/TextTrack.d.ts +74 -20
  30. package/dist/types/current/text/TextTrack.d.ts.map +1 -1
  31. package/dist/types/current/text/TextTrack.js +20 -0
  32. package/dist/types/current/text/TextTrackRenderer.d.ts +24 -0
  33. package/dist/types/current/text/TextTrackRenderer.d.ts.map +1 -0
  34. package/dist/types/current/text/TextTrackRenderer.js +5 -0
  35. package/dist/types/current/text/mediaTextTrackProvider.d.ts +34 -0
  36. package/dist/types/current/text/mediaTextTrackProvider.d.ts.map +1 -0
  37. package/dist/types/current/text/mediaTextTrackProvider.js +42 -0
  38. package/dist/types/current/text/parseWebVtt.d.ts +16 -2
  39. package/dist/types/current/text/parseWebVtt.d.ts.map +1 -1
  40. package/dist/types/current/text/parseWebVtt.js +176 -48
  41. package/dist/types/current/text/pickPreferredTextTrack.d.ts +2 -1
  42. package/dist/types/current/text/pickPreferredTextTrack.d.ts.map +1 -1
  43. package/dist/types/current/text/pickPreferredTextTrack.js +6 -3
  44. package/dist/types/current/track/Track.d.ts +1 -1
  45. package/dist/types/current/track/TrackController.d.ts.map +1 -1
  46. package/dist/types/current/track/TrackController.js +30 -30
  47. package/dist/types/current/track/dash/createDashFactories.d.ts +21 -10
  48. package/dist/types/current/track/dash/createDashFactories.d.ts.map +1 -1
  49. package/dist/types/current/track/dash/createDashFactories.js +9 -21
  50. package/dist/types/current/track/hls/createHlsFactories.d.ts +21 -10
  51. package/dist/types/current/track/hls/createHlsFactories.d.ts.map +1 -1
  52. package/dist/types/current/track/hls/createHlsFactories.js +9 -21
  53. package/dist/types/current/track/mse/MseTrack.d.ts +1 -2
  54. package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
  55. package/dist/types/current/track/mse/MseTrack.js +3 -7
  56. package/dist/types/current/tsconfig.tsbuildinfo +1 -1
  57. package/dist/types/current/vinyl/VinylOptions.d.ts +18 -40
  58. package/dist/types/current/vinyl/VinylOptions.d.ts.map +1 -1
  59. package/dist/types/current/vinyl/VinylOptions.js +12 -11
  60. package/dist/types/current/vinyl/VinylPlayer.d.ts +0 -6
  61. package/dist/types/current/vinyl/VinylPlayer.d.ts.map +1 -1
  62. package/dist/types/current/vinyl/VinylPlayer.js +2 -23
  63. package/dist/types/current/vinyl/createVinylFactories.d.ts +32 -18
  64. package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
  65. package/dist/types/current/vinyl/createVinylFactories.js +6 -0
  66. package/dist/types/ts3.7/index.d.ts +4 -0
  67. package/dist/types/ts3.7/streaming/AudioOptions.d.ts +39 -0
  68. package/dist/types/ts3.7/streaming/createDefaultMediaTimelineTransformer.d.ts +2 -2
  69. package/dist/types/ts3.7/text/HtmlTextTrackRenderer.d.ts +60 -0
  70. package/dist/types/ts3.7/text/SidecarTextTrackController.d.ts +65 -53
  71. package/dist/types/ts3.7/text/SidecarTextTrackLoader.d.ts +5 -0
  72. package/dist/types/ts3.7/text/TextTrack.d.ts +74 -20
  73. package/dist/types/ts3.7/text/TextTrackRenderer.d.ts +24 -0
  74. package/dist/types/ts3.7/text/mediaTextTrackProvider.d.ts +34 -0
  75. package/dist/types/ts3.7/text/parseWebVtt.d.ts +16 -2
  76. package/dist/types/ts3.7/text/pickPreferredTextTrack.d.ts +2 -1
  77. package/dist/types/ts3.7/track/Track.d.ts +1 -1
  78. package/dist/types/ts3.7/track/dash/createDashFactories.d.ts +21 -10
  79. package/dist/types/ts3.7/track/hls/createHlsFactories.d.ts +21 -10
  80. package/dist/types/ts3.7/track/mse/MseTrack.d.ts +1 -2
  81. package/dist/types/ts3.7/vinyl/VinylOptions.d.ts +18 -40
  82. package/dist/types/ts3.7/vinyl/VinylPlayer.d.ts +0 -6
  83. package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +32 -18
  84. package/dist/types/ts4.1/index.d.ts +4 -0
  85. package/dist/types/ts4.1/streaming/AudioOptions.d.ts +39 -0
  86. package/dist/types/ts4.1/streaming/createDefaultMediaTimelineTransformer.d.ts +2 -2
  87. package/dist/types/ts4.1/text/HtmlTextTrackRenderer.d.ts +60 -0
  88. package/dist/types/ts4.1/text/SidecarTextTrackController.d.ts +65 -53
  89. package/dist/types/ts4.1/text/SidecarTextTrackLoader.d.ts +5 -0
  90. package/dist/types/ts4.1/text/TextTrack.d.ts +74 -20
  91. package/dist/types/ts4.1/text/TextTrackRenderer.d.ts +24 -0
  92. package/dist/types/ts4.1/text/mediaTextTrackProvider.d.ts +34 -0
  93. package/dist/types/ts4.1/text/parseWebVtt.d.ts +16 -2
  94. package/dist/types/ts4.1/text/pickPreferredTextTrack.d.ts +2 -1
  95. package/dist/types/ts4.1/track/Track.d.ts +1 -1
  96. package/dist/types/ts4.1/track/dash/createDashFactories.d.ts +21 -10
  97. package/dist/types/ts4.1/track/hls/createHlsFactories.d.ts +21 -10
  98. package/dist/types/ts4.1/track/mse/MseTrack.d.ts +1 -2
  99. package/dist/types/ts4.1/vinyl/VinylOptions.d.ts +18 -40
  100. package/dist/types/ts4.1/vinyl/VinylPlayer.d.ts +0 -6
  101. package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +32 -18
  102. package/dist/types/ts4.7/index.d.ts +4 -0
  103. package/dist/types/ts4.7/streaming/AudioOptions.d.ts +39 -0
  104. package/dist/types/ts4.7/streaming/createDefaultMediaTimelineTransformer.d.ts +2 -2
  105. package/dist/types/ts4.7/text/HtmlTextTrackRenderer.d.ts +60 -0
  106. package/dist/types/ts4.7/text/SidecarTextTrackController.d.ts +65 -53
  107. package/dist/types/ts4.7/text/SidecarTextTrackLoader.d.ts +5 -0
  108. package/dist/types/ts4.7/text/TextTrack.d.ts +74 -20
  109. package/dist/types/ts4.7/text/TextTrackRenderer.d.ts +24 -0
  110. package/dist/types/ts4.7/text/mediaTextTrackProvider.d.ts +34 -0
  111. package/dist/types/ts4.7/text/parseWebVtt.d.ts +16 -2
  112. package/dist/types/ts4.7/text/pickPreferredTextTrack.d.ts +2 -1
  113. package/dist/types/ts4.7/track/Track.d.ts +1 -1
  114. package/dist/types/ts4.7/track/dash/createDashFactories.d.ts +21 -10
  115. package/dist/types/ts4.7/track/hls/createHlsFactories.d.ts +21 -10
  116. package/dist/types/ts4.7/track/mse/MseTrack.d.ts +1 -2
  117. package/dist/types/ts4.7/vinyl/VinylOptions.d.ts +18 -40
  118. package/dist/types/ts4.7/vinyl/VinylPlayer.d.ts +0 -6
  119. package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +32 -18
  120. package/dist/unit/types/current/index.d.ts +2 -0
  121. package/dist/unit/types/current/index.d.ts.map +1 -1
  122. package/dist/unit/types/current/index.js +2 -0
  123. package/dist/unit/types/current/streaming/MseTrack.test.js +13 -7
  124. package/dist/unit/types/current/streaming/createDefaultMediaTimelineTransformer.test.js +8 -4
  125. package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts +2 -0
  126. package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts.map +1 -0
  127. package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.js +231 -0
  128. package/dist/unit/types/current/text/SidecarTextTrackController.test.js +432 -333
  129. package/dist/unit/types/current/text/SidecarTextTrackLoader.test.js +29 -0
  130. package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts +2 -0
  131. package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts.map +1 -0
  132. package/dist/unit/types/current/text/mediaTextTrackProvider.test.js +86 -0
  133. package/dist/unit/types/current/text/parseWebVtt.test.js +187 -6
  134. package/dist/unit/types/current/text/pickPreferredTextTrack.test.js +12 -1
  135. package/dist/unit/types/current/track/TrackController.test.js +36 -0
  136. package/dist/unit/types/current/track/dash/createDashFactories.test.js +1 -2
  137. package/dist/unit/types/current/track/hls/buildHlsMediaTimeline.test.js +1 -2
  138. package/dist/unit/types/current/track/hls/createHlsFactories.test.js +1 -2
  139. package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
  140. package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.js +102 -177
  141. package/dist/unit/types/current/vinyl/createVinylFactories.test.js +2 -0
  142. package/dist/vinylTestUtil/index.js +14 -8
  143. package/dist/vinylTestUtil/index.js.map +2 -2
  144. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts +3 -2
  145. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts.map +1 -1
  146. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.js +5 -2
  147. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts +3 -3
  148. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts.map +1 -1
  149. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.js +3 -3
  150. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts +1 -2
  151. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts.map +1 -1
  152. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.js +3 -2
  153. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts +1 -2
  154. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts.map +1 -1
  155. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.js +3 -2
  156. package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
  157. package/dist/vinylTestUtil/types/ts3.7/mock/player/MockVinylPlayerDependencies.d.ts +3 -2
  158. package/dist/vinylTestUtil/types/ts3.7/mock/text/MockTextTrackController.d.ts +3 -3
  159. package/dist/vinylTestUtil/types/ts3.7/mock/track/dash/createMockDashDependencies.d.ts +1 -2
  160. package/dist/vinylTestUtil/types/ts3.7/mock/track/hls/createMockHlsDependencies.d.ts +1 -2
  161. package/dist/vinylTestUtil/types/ts4.1/mock/player/MockVinylPlayerDependencies.d.ts +3 -2
  162. package/dist/vinylTestUtil/types/ts4.1/mock/text/MockTextTrackController.d.ts +3 -3
  163. package/dist/vinylTestUtil/types/ts4.1/mock/track/dash/createMockDashDependencies.d.ts +1 -2
  164. package/dist/vinylTestUtil/types/ts4.1/mock/track/hls/createMockHlsDependencies.d.ts +1 -2
  165. package/dist/vinylTestUtil/types/ts4.7/mock/player/MockVinylPlayerDependencies.d.ts +3 -2
  166. package/dist/vinylTestUtil/types/ts4.7/mock/text/MockTextTrackController.d.ts +3 -3
  167. package/dist/vinylTestUtil/types/ts4.7/mock/track/dash/createMockDashDependencies.d.ts +1 -2
  168. package/dist/vinylTestUtil/types/ts4.7/mock/track/hls/createMockHlsDependencies.d.ts +1 -2
  169. package/docs/USAGE.md +82 -31
  170. package/package.json +9 -9
@@ -19,6 +19,8 @@ export declare function createMockVinylDependencies(): {
19
19
  readonly capabilities: MockCapabilities;
20
20
  readonly drmController: MockDrmController;
21
21
  readonly media: HTMLMediaElement;
22
+ readonly textTrackProvider: import("@amazon/vinyl").MediaTextTrackProvider;
23
+ readonly textTrackRenderer: null;
22
24
  readonly createDashFactories: (_loadOptions: import("@amazon/vinyl").DashTrackLoadOptions) => import("@amazon/vinyl-di").Factories<{
23
25
  readonly textTrackController: import("../..").MockTextTrackController;
24
26
  readonly contentTypesValue: import("@amazon/vinyl-observable").MutableValueImpl<Promise<Set<import("@amazon/vinyl").ContentType>>>;
@@ -32,9 +34,8 @@ export declare function createMockVinylDependencies(): {
32
34
  readonly playbackController: MockPlaybackController;
33
35
  readonly drmController: MockDrmController;
34
36
  readonly mediaQualityMetadataResolver: jasmine.Spy<import("@amazon/vinyl").DashMediaQualityMetadataResolver>;
35
- readonly preferredAudioLanguage: import("@amazon/vinyl-observable").MutableValueImpl<string | readonly string[] | null>;
37
+ readonly audio: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").AudioOptions>;
36
38
  readonly allowedContentTypes: import("@amazon/vinyl-observable").MutableValueImpl<readonly import("@amazon/vinyl").RestrictableContentType[] | null>;
37
- readonly preferDescriptiveAudio: import("@amazon/vinyl-observable").MutableValueImpl<boolean>;
38
39
  readonly abr: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").QualitySelectorImplOptions>;
39
40
  }>;
40
41
  readonly createHlsFactories: (_loadOptions: import("@amazon/vinyl").HlsTrackLoadOptions) => any;
@@ -3,8 +3,8 @@ import { MockEventHost } from '@amazon/vinyl-util/testUtil';
3
3
  export declare class MockTextTrackController extends MockEventHost implements TextTrackController {
4
4
  textTracks: readonly TextTrackInfo[];
5
5
  activeTextTrack: TextTrackInfo | null;
6
- setActiveTextTrack: import("@amazon/vinyl-util/browserTestUtil").Spy2<(id: string | null) => void>;
7
- suspend: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
8
- resume: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
6
+ active: boolean;
7
+ deactivate: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
8
+ activate: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
9
9
  }
10
10
  //# sourceMappingURL=MockTextTrackController.d.ts.map
@@ -18,9 +18,8 @@ export declare function createMockDashDependencies(): {
18
18
  readonly playbackController: MockPlaybackController;
19
19
  readonly drmController: MockDrmController;
20
20
  readonly mediaQualityMetadataResolver: jasmine.Spy<DashMediaQualityMetadataResolver>;
21
- readonly preferredAudioLanguage: import("@amazon/vinyl-observable").MutableValueImpl<string | readonly string[] | null>;
21
+ readonly audio: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").AudioOptions>;
22
22
  readonly allowedContentTypes: import("@amazon/vinyl-observable").MutableValueImpl<readonly import("@amazon/vinyl").RestrictableContentType[] | null>;
23
- readonly preferDescriptiveAudio: import("@amazon/vinyl-observable").MutableValueImpl<boolean>;
24
23
  readonly abr: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").QualitySelectorImplOptions>;
25
24
  };
26
25
  export type MockDashDependencies = ReturnType<typeof createMockDashDependencies>;
@@ -16,9 +16,8 @@ export declare function createMockHlsDependencies(): {
16
16
  readonly playbackController: MockPlaybackController;
17
17
  readonly drmController: MockDrmController;
18
18
  readonly mediaQualityMetadataResolver: jasmine.Spy<HlsMediaQualityMetadataResolver>;
19
- readonly preferredAudioLanguage: import("@amazon/vinyl-observable").MutableValueImpl<string | readonly string[] | null>;
19
+ readonly audio: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").AudioOptions>;
20
20
  readonly allowedContentTypes: import("@amazon/vinyl-observable").MutableValueImpl<readonly import("@amazon/vinyl").RestrictableContentType[] | null>;
21
- readonly preferDescriptiveAudio: import("@amazon/vinyl-observable").MutableValueImpl<boolean>;
22
21
  readonly abr: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").QualitySelectorImplOptions>;
23
22
  };
24
23
  export type MockHlsDependencies = ReturnType<typeof createMockHlsDependencies>;
@@ -19,6 +19,8 @@ export declare function createMockVinylDependencies(): {
19
19
  readonly capabilities: MockCapabilities;
20
20
  readonly drmController: MockDrmController;
21
21
  readonly media: HTMLMediaElement;
22
+ readonly textTrackProvider: import("@amazon/vinyl").MediaTextTrackProvider;
23
+ readonly textTrackRenderer: null;
22
24
  readonly createDashFactories: (_loadOptions: import("@amazon/vinyl").DashTrackLoadOptions) => import("@amazon/vinyl-di").Factories<{
23
25
  readonly textTrackController: import("../..").MockTextTrackController;
24
26
  readonly contentTypesValue: import("@amazon/vinyl-observable").MutableValueImpl<Promise<Set<import("@amazon/vinyl").ContentType>>>;
@@ -32,9 +34,8 @@ export declare function createMockVinylDependencies(): {
32
34
  readonly playbackController: MockPlaybackController;
33
35
  readonly drmController: MockDrmController;
34
36
  readonly mediaQualityMetadataResolver: jasmine.Spy<import("@amazon/vinyl").DashMediaQualityMetadataResolver>;
35
- readonly preferredAudioLanguage: import("@amazon/vinyl-observable").MutableValueImpl<string | readonly string[] | null>;
37
+ readonly audio: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").AudioOptions>;
36
38
  readonly allowedContentTypes: import("@amazon/vinyl-observable").MutableValueImpl<readonly import("@amazon/vinyl").RestrictableContentType[] | null>;
37
- readonly preferDescriptiveAudio: import("@amazon/vinyl-observable").MutableValueImpl<boolean>;
38
39
  readonly abr: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").QualitySelectorImplOptions>;
39
40
  }>;
40
41
  readonly createHlsFactories: (_loadOptions: import("@amazon/vinyl").HlsTrackLoadOptions) => any;
@@ -3,8 +3,8 @@ import { MockEventHost } from '@amazon/vinyl-util/testUtil';
3
3
  export declare class MockTextTrackController extends MockEventHost implements TextTrackController {
4
4
  textTracks: readonly TextTrackInfo[];
5
5
  activeTextTrack: TextTrackInfo | null;
6
- setActiveTextTrack: import("@amazon/vinyl-util/browserTestUtil").Spy2<(id: string | null) => void>;
7
- suspend: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
8
- resume: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
6
+ active: boolean;
7
+ deactivate: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
8
+ activate: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
9
9
  }
10
10
  //# sourceMappingURL=MockTextTrackController.d.ts.map
@@ -18,9 +18,8 @@ export declare function createMockDashDependencies(): {
18
18
  readonly playbackController: MockPlaybackController;
19
19
  readonly drmController: MockDrmController;
20
20
  readonly mediaQualityMetadataResolver: jasmine.Spy<DashMediaQualityMetadataResolver>;
21
- readonly preferredAudioLanguage: import("@amazon/vinyl-observable").MutableValueImpl<string | readonly string[] | null>;
21
+ readonly audio: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").AudioOptions>;
22
22
  readonly allowedContentTypes: import("@amazon/vinyl-observable").MutableValueImpl<readonly import("@amazon/vinyl").RestrictableContentType[] | null>;
23
- readonly preferDescriptiveAudio: import("@amazon/vinyl-observable").MutableValueImpl<boolean>;
24
23
  readonly abr: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").QualitySelectorImplOptions>;
25
24
  };
26
25
  export type MockDashDependencies = ReturnType<typeof createMockDashDependencies>;
@@ -16,9 +16,8 @@ export declare function createMockHlsDependencies(): {
16
16
  readonly playbackController: MockPlaybackController;
17
17
  readonly drmController: MockDrmController;
18
18
  readonly mediaQualityMetadataResolver: jasmine.Spy<HlsMediaQualityMetadataResolver>;
19
- readonly preferredAudioLanguage: import("@amazon/vinyl-observable").MutableValueImpl<string | readonly string[] | null>;
19
+ readonly audio: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").AudioOptions>;
20
20
  readonly allowedContentTypes: import("@amazon/vinyl-observable").MutableValueImpl<readonly import("@amazon/vinyl").RestrictableContentType[] | null>;
21
- readonly preferDescriptiveAudio: import("@amazon/vinyl-observable").MutableValueImpl<boolean>;
22
21
  readonly abr: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").QualitySelectorImplOptions>;
23
22
  };
24
23
  export type MockHlsDependencies = ReturnType<typeof createMockHlsDependencies>;
@@ -19,6 +19,8 @@ export declare function createMockVinylDependencies(): {
19
19
  readonly capabilities: MockCapabilities;
20
20
  readonly drmController: MockDrmController;
21
21
  readonly media: HTMLMediaElement;
22
+ readonly textTrackProvider: import("@amazon/vinyl").MediaTextTrackProvider;
23
+ readonly textTrackRenderer: null;
22
24
  readonly createDashFactories: (_loadOptions: import("@amazon/vinyl").DashTrackLoadOptions) => import("@amazon/vinyl-di").Factories<{
23
25
  readonly textTrackController: import("../..").MockTextTrackController;
24
26
  readonly contentTypesValue: import("@amazon/vinyl-observable").MutableValueImpl<Promise<Set<import("@amazon/vinyl").ContentType>>>;
@@ -32,9 +34,8 @@ export declare function createMockVinylDependencies(): {
32
34
  readonly playbackController: MockPlaybackController;
33
35
  readonly drmController: MockDrmController;
34
36
  readonly mediaQualityMetadataResolver: jasmine.Spy<import("@amazon/vinyl").DashMediaQualityMetadataResolver>;
35
- readonly preferredAudioLanguage: import("@amazon/vinyl-observable").MutableValueImpl<string | readonly string[] | null>;
37
+ readonly audio: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").AudioOptions>;
36
38
  readonly allowedContentTypes: import("@amazon/vinyl-observable").MutableValueImpl<readonly import("@amazon/vinyl").RestrictableContentType[] | null>;
37
- readonly preferDescriptiveAudio: import("@amazon/vinyl-observable").MutableValueImpl<boolean>;
38
39
  readonly abr: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").QualitySelectorImplOptions>;
39
40
  }>;
40
41
  readonly createHlsFactories: (_loadOptions: import("@amazon/vinyl").HlsTrackLoadOptions) => any;
@@ -3,8 +3,8 @@ import { MockEventHost } from '@amazon/vinyl-util/testUtil';
3
3
  export declare class MockTextTrackController extends MockEventHost implements TextTrackController {
4
4
  textTracks: readonly TextTrackInfo[];
5
5
  activeTextTrack: TextTrackInfo | null;
6
- setActiveTextTrack: import("@amazon/vinyl-util/browserTestUtil").Spy2<(id: string | null) => void>;
7
- suspend: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
8
- resume: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
6
+ active: boolean;
7
+ deactivate: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
8
+ activate: import("@amazon/vinyl-util/browserTestUtil").Spy2<() => void>;
9
9
  }
10
10
  //# sourceMappingURL=MockTextTrackController.d.ts.map
@@ -18,9 +18,8 @@ export declare function createMockDashDependencies(): {
18
18
  readonly playbackController: MockPlaybackController;
19
19
  readonly drmController: MockDrmController;
20
20
  readonly mediaQualityMetadataResolver: jasmine.Spy<DashMediaQualityMetadataResolver>;
21
- readonly preferredAudioLanguage: import("@amazon/vinyl-observable").MutableValueImpl<string | readonly string[] | null>;
21
+ readonly audio: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").AudioOptions>;
22
22
  readonly allowedContentTypes: import("@amazon/vinyl-observable").MutableValueImpl<readonly import("@amazon/vinyl").RestrictableContentType[] | null>;
23
- readonly preferDescriptiveAudio: import("@amazon/vinyl-observable").MutableValueImpl<boolean>;
24
23
  readonly abr: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").QualitySelectorImplOptions>;
25
24
  };
26
25
  export type MockDashDependencies = ReturnType<typeof createMockDashDependencies>;
@@ -16,9 +16,8 @@ export declare function createMockHlsDependencies(): {
16
16
  readonly playbackController: MockPlaybackController;
17
17
  readonly drmController: MockDrmController;
18
18
  readonly mediaQualityMetadataResolver: jasmine.Spy<HlsMediaQualityMetadataResolver>;
19
- readonly preferredAudioLanguage: import("@amazon/vinyl-observable").MutableValueImpl<string | readonly string[] | null>;
19
+ readonly audio: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").AudioOptions>;
20
20
  readonly allowedContentTypes: import("@amazon/vinyl-observable").MutableValueImpl<readonly import("@amazon/vinyl").RestrictableContentType[] | null>;
21
- readonly preferDescriptiveAudio: import("@amazon/vinyl-observable").MutableValueImpl<boolean>;
22
21
  readonly abr: import("@amazon/vinyl-observable").MutableValueImpl<import("@amazon/vinyl").QualitySelectorImplOptions>;
23
22
  };
24
23
  export type MockHlsDependencies = ReturnType<typeof createMockHlsDependencies>;
package/docs/USAGE.md CHANGED
@@ -454,37 +454,63 @@ text track URL. Segmented text codecs (`stpp`, `wvtt`) are not surfaced in v1.
454
454
  Discovery happens automatically when a track loads — applications need only
455
455
  listen for the `textTracksChange` event or read `player.textTracks`.
456
456
 
457
- ### Forced subtitles
457
+ ### Selecting captions
458
458
 
459
- A track flagged `forced` carries essential text (e.g. translations of
460
- foreign-language dialogue) that is meant to display even when the user has not
461
- enabled subtitles. A `forced` track shares its `language` with the full track,
462
- so selection distinguishes them by the `forced` flag rather than language alone.
463
- Media characteristics / accessibility roles are surfaced in `characteristics`
464
- (HLS `CHARACTERISTICS`, DASH `Role`/`Accessibility`).
459
+ Caption selection is **declarative**: it is driven entirely by the `text` option
460
+ (`VinylOptions.text`), so a choice persists across track changes (e.g. across an
461
+ ad break) and re-resolves against whatever the next source exposes. There is no
462
+ imperative `setActiveTextTrack` call.
463
+
464
+ ```typescript
465
+ type CaptionMode = 'on' | 'off' | 'forced'
465
466
 
466
- Until the application makes an explicit selection, the player auto-selects a
467
- forced track when one is discovered (preferring the default track's language).
468
- Any `setActiveTextTrack` call — including `setActiveTextTrack(null)` to turn
469
- captions off — is treated as an explicit choice and disables the auto-select.
467
+ interface TextTrackSelection {
468
+ id?: string | null // exact track id (wins over the other criteria)
469
+ kind?: TextTrackKind | null // restrict to a kind, e.g. 'captions'
470
+ language?: string | readonly string[] | null // preferred language(s)
471
+ forced?: boolean | null // explicit forced-ness filter (overrides the mode)
472
+ }
470
473
 
471
- ### API
474
+ interface TextTrackControllerOptions {
475
+ enabled?: CaptionMode | null // default 'forced'
476
+ selection?: TextTrackSelection | null
477
+ }
478
+ ```
479
+
480
+ - `enabled` gates rendering: `'off'` shows nothing, `'forced'` shows only forced
481
+ (narrative) tracks, `'on'` shows the full subtitle track. The default is
482
+ `'forced'`.
483
+ - `selection.language` unset (or empty) falls back to the platform's
484
+ `navigator.languages`.
485
+ - `selection.forced`, when set, is an explicit filter that overrides the
486
+ forced/full split implied by `enabled`.
487
+
488
+ ```typescript
489
+ // Default (no config): forced captions in the platform's preferred languages.
490
+
491
+ // Full subtitles in a specific language:
492
+ player.configure({ text: { enabled: 'on', selection: { language: 'en' } } })
493
+
494
+ // Forced narrative captions only, for a language:
495
+ player.configure({ text: { enabled: 'forced', selection: { language: 'es' } } })
496
+
497
+ // A specific discovered track by id:
498
+ player.configure({ text: { enabled: 'on', selection: { id: someTrack.id } } })
499
+
500
+ // Turn captions off:
501
+ player.configure({ text: { enabled: 'off' } })
502
+ ```
503
+
504
+ The player still exposes the discovered list, the active selection, and change
505
+ events (read-only):
472
506
 
473
507
  ```typescript
474
- // Inspect available text tracks for the current media.
475
508
  console.log(player.textTracks)
476
509
  // → [{ id, kind: 'subtitles', language: 'en', label: 'English', default: true,
477
510
  // forced: false, characteristics: [], uri: 'https://.../subs/en.vtt',
478
511
  // mimeType: 'text/vtt' }, ...]
479
-
480
- // Activate a track.
481
- player.setActiveTextTrack(player.textTracks[0].id)
482
-
483
- // Inspect or clear the active track.
484
512
  console.log(player.activeTextTrack)
485
- player.setActiveTextTrack(null)
486
513
 
487
- // React to changes.
488
514
  player.on('textTracksChange', (event) => {
489
515
  console.log('Text tracks updated:', event.current)
490
516
  })
@@ -496,19 +522,44 @@ player.on('textTrackError', (event) => {
496
522
  })
497
523
  ```
498
524
 
499
- When a track is activated, Vinyl fetches the WebVTT, parses it, and adds the
500
- resulting cues to a `TextTrack` on the underlying `<video>` / `<audio>` element
501
- via `HTMLMediaElement.addTextTrack`. The browser handles cue rendering according
502
- to the `default` controls or any custom UI you build on top of the DOM
503
- `TextTrack` API.
525
+ ### Forced subtitles
526
+
527
+ A track flagged `forced` carries essential text (e.g. translations of
528
+ foreign-language dialogue) that is meant to display even when the user has not
529
+ enabled full subtitles. A `forced` track shares its `language` with the full
530
+ track, so selection distinguishes them by the `forced` flag rather than language
531
+ alone. Media characteristics / accessibility roles are surfaced in
532
+ `characteristics` (HLS `CHARACTERISTICS`, DASH `Role`/`Accessibility`).
504
533
 
505
- ### Generating Test Content
534
+ Because `enabled` defaults to `'forced'`, out of the box the player shows a
535
+ forced track for the platform's preferred languages when one is discovered, and
536
+ nothing otherwise.
537
+
538
+ ### Rendering
539
+
540
+ When a track is selected, Vinyl fetches the WebVTT, parses it, and adds the cues
541
+ to a `TextTrack` on the underlying media element via
542
+ `HTMLMediaElement.addTextTrack`. By default that track is `'showing'` and the
543
+ **browser renders** the cues (styleable only through the limited `::cue`
544
+ pseudo-element).
545
+
546
+ For full control over caption styling and placement, inject a
547
+ `TextTrackRenderer` — Vinyl ships `HtmlTextTrackRenderer`, which paints cues as
548
+ an HTML overlay you position yourself:
549
+
550
+ ```typescript
551
+ import { createVinylPlayer, HtmlTextTrackRenderer } from '@amazon/vinyl'
552
+
553
+ const captions = new HtmlTextTrackRenderer()
554
+ const player = createVinylPlayer({ media, textTrackRenderer: captions })
555
+ videoContainer.appendChild(captions.element) // position it over the video
556
+ ```
506
557
 
507
- `DMTestAssetBuilder` generates English / Spanish / Japanese sidecar VTT files
508
- for every produced HLS and DASH asset. The text-track wiring lives in
509
- `src/addTextTracks.ts`; running `npm run generate` produces VTT files in
510
- `subs/<lang>.vtt` next to each manifest, with the manifest patched to reference
511
- them.
558
+ With a renderer injected, the DOM `TextTrack` is kept `'hidden'` (used only for
559
+ cue timing) and the renderer paints the active cues, honoring each cue's WebVTT
560
+ settings (`position` / `line` / `size` / `align` / `vertical`), cue payload tags
561
+ (`<c.class>`, `<i>`, `<b>`, `<v>`, `<lang>`, …), and `STYLE`-block `::cue`
562
+ rules. Implement the `TextTrackRenderer` interface for a fully custom renderer.
512
563
 
513
564
  ## Ad Breaks (Server-Guided Ad Insertion)
514
565
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amazon/vinyl",
3
- "version": "2.0.4",
3
+ "version": "3.0.1",
4
4
  "description": "An HTML5 streaming media player",
5
5
  "repository": {
6
6
  "type": "git",
@@ -90,17 +90,17 @@
90
90
  "oxlint:write": "oxlint --type-aware --fix"
91
91
  },
92
92
  "devDependencies": {
93
- "@amazon/vinyl-build-utils": "^2.0.4",
93
+ "@amazon/vinyl-build-utils": "^3.0.1",
94
94
  "commander": "^9.5.0"
95
95
  },
96
96
  "dependencies": {
97
- "@amazon/vinyl-di": "^2.0.4",
98
- "@amazon/vinyl-hls-parser": "^2.0.4",
99
- "@amazon/vinyl-mpd-parser": "^2.0.4",
100
- "@amazon/vinyl-observable": "^2.0.4",
101
- "@amazon/vinyl-transmux": "^2.0.4",
102
- "@amazon/vinyl-util": "^2.0.4",
103
- "@amazon/vinyl-validation": "^2.0.4"
97
+ "@amazon/vinyl-di": "^3.0.1",
98
+ "@amazon/vinyl-hls-parser": "^3.0.1",
99
+ "@amazon/vinyl-mpd-parser": "^3.0.1",
100
+ "@amazon/vinyl-observable": "^3.0.1",
101
+ "@amazon/vinyl-transmux": "^3.0.1",
102
+ "@amazon/vinyl-util": "^3.0.1",
103
+ "@amazon/vinyl-validation": "^3.0.1"
104
104
  },
105
105
  "publishConfig": {
106
106
  "access": "public"