create-text-tracks-if-necessary.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /**
  2. * @file create-text-tracks-if-necessary.js
  3. */
  4. /**
  5. * Create text tracks on video.js if they exist on a segment.
  6. *
  7. * @param {Object} sourceBuffer the VSB or FSB
  8. * @param {Object} mediaSource the HTML or Flash media source
  9. * @param {Object} segment the segment that may contain the text track
  10. * @private
  11. */
  12. 'use strict';
  13. Object.defineProperty(exports, '__esModule', {
  14. value: true
  15. });
  16. var createTextTracksIfNecessary = function createTextTracksIfNecessary(sourceBuffer, mediaSource, segment) {
  17. var player = mediaSource.player_;
  18. // create an in-band caption track if one is present in the segment
  19. if (segment.captions && segment.captions.length) {
  20. if (!sourceBuffer.inbandTextTracks_) {
  21. sourceBuffer.inbandTextTracks_ = {};
  22. }
  23. for (var trackId in segment.captionStreams) {
  24. if (!sourceBuffer.inbandTextTracks_[trackId]) {
  25. player.tech_.trigger({ type: 'usage', name: 'hls-608' });
  26. var track = player.textTracks().getTrackById(trackId);
  27. if (track) {
  28. // Resuse an existing track with a CC# id because this was
  29. // very likely created by videojs-contrib-hls from information
  30. // in the m3u8 for us to use
  31. sourceBuffer.inbandTextTracks_[trackId] = track;
  32. } else {
  33. // Otherwise, create a track with the default `CC#` label and
  34. // without a language
  35. sourceBuffer.inbandTextTracks_[trackId] = player.addRemoteTextTrack({
  36. kind: 'captions',
  37. id: trackId,
  38. label: trackId
  39. }, false).track;
  40. }
  41. }
  42. }
  43. }
  44. if (segment.metadata && segment.metadata.length && !sourceBuffer.metadataTrack_) {
  45. sourceBuffer.metadataTrack_ = player.addRemoteTextTrack({
  46. kind: 'metadata',
  47. label: 'Timed Metadata'
  48. }, false).track;
  49. sourceBuffer.metadataTrack_.inBandMetadataTrackDispatchType = segment.metadata.dispatchType;
  50. }
  51. };
  52. exports['default'] = createTextTracksIfNecessary;
  53. module.exports = exports['default'];