diff --git a/src/js/tech/html5.js b/src/js/tech/html5.js
index 355a68359f..2cb36ed4e7 100644
--- a/src/js/tech/html5.js
+++ b/src/js/tech/html5.js
@@ -257,6 +257,12 @@ class Html5 extends Tech {
proxyNativeTextTracks_() {
let tt = this.el().textTracks;
+ // Add tracks - if player is initialised after DOM loaded, textTracks
+ // will not trigger addtrack
+ for (let i = 0; i < tt.length; i++) {
+ this.textTracks().addTrack_(tt[i]);
+ }
+
if (tt && tt.addEventListener) {
tt.addEventListener('change', this.handleTextTrackChange_);
tt.addEventListener('addtrack', this.handleTextTrackAdd_);
@@ -504,7 +510,7 @@ class Html5 extends Tech {
* @return {Object}
* @method currentSrc
*/
- currentSrc() {
+ currentSrc() {
if (this.currentSource_) {
return this.currentSource_.src;
} else {
diff --git a/src/js/tracks/text-track-list.js b/src/js/tracks/text-track-list.js
index f4b9943312..336cffabb5 100644
--- a/src/js/tracks/text-track-list.js
+++ b/src/js/tracks/text-track-list.js
@@ -78,12 +78,16 @@ class TextTrackList extends EventTarget {
track.addEventListener('modechange', Fn.bind(this, function() {
this.trigger('change');
}));
- this.tracks_.push(track);
- this.trigger({
- track,
- type: 'addtrack'
- });
+ // Do not add duplicate tracks
+ if (!this.tracks_.includes(track)) {
+ this.tracks_.push(track);
+ this.trigger({
+ track,
+ type: 'addtrack'
+ });
+ }
+
}
/**