Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/tutorials/Plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ The full interface is as follows:
- `onSubtitlesRenderError`
- `onSubtitlesDynamicLoadError`
- `onFragmentContentLengthMismatch`
- `onPlaybackRateChanged`
- `onPlaybackFrozen`

An example plugin may look like:

Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
"typescript-eslint": "^7.2.0"
},
"dependencies": {
"dashjs": "github:bbc/dash.js#smp-v4.7.3-8",
"dashjs": "github:bbc/dash.js#smp-v4.7.3-9",
"smp-imsc": "github:bbc/imscJS#v1.0.3"
},
"repository": {
Expand Down
16 changes: 9 additions & 7 deletions src/playbackstrategy/msestrategy.js
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ function MSEStrategy(
QUOTA_EXCEEDED: "quotaExceeded",
TEXT_TRACKS_ADDED: "allTextTracksAdded",
CURRENT_TRACK_CHANGED: "currentTrackChanged",
PLAYBACK_RATE_CHANGED: "playbackRateChanged",
PLAYBACK_FROZEN: "playbackFrozen",
}

function onLoadedMetaData() {
Expand Down Expand Up @@ -204,6 +204,7 @@ function MSEStrategy(
}

function onRateChange() {
Plugins.interface.onPlaybackRateChanged({ playbackRate: mediaElement.playbackRate })
DebugTool.dynamicMetric("playback-rate", mediaElement.playbackRate)
}

Expand Down Expand Up @@ -703,11 +704,7 @@ function MSEStrategy(
mediaPlayer.on(DashJSEvents.TEXT_TRACKS_ADDED, handleTextTracks)
mediaPlayer.on(DashJSEvents.MANIFEST_LOADING_FINISHED, manifestLoadingFinished)
mediaPlayer.on(DashJSEvents.CURRENT_TRACK_CHANGED, onCurrentTrackChanged)
mediaPlayer.on(DashJSEvents.PLAYBACK_RATE_CHANGED, onPlaybackRateChanged)
}

function onPlaybackRateChanged(event) {
Plugins.interface.onPlaybackRateChanged(event)
mediaPlayer.on(DashJSEvents.PLAYBACK_FROZEN, onPlaybackFrozen)
}

function handleTextTracks() {
Expand Down Expand Up @@ -896,7 +893,7 @@ function MSEStrategy(
mediaPlayer.off(DashJSEvents.GAP_JUMP_TO_END, onGapJump)
mediaPlayer.off(DashJSEvents.QUOTA_EXCEEDED, onQuotaExceeded)
mediaPlayer.off(DashJSEvents.CURRENT_TRACK_CHANGED, onCurrentTrackChanged)
mediaPlayer.off(DashJSEvents.PLAYBACK_RATE_CHANGED, onPlaybackRateChanged)
mediaPlayer.off(DashJSEvents.PLAYBACK_FROZEN, onPlaybackFrozen)
mediaPlayer = undefined
}

Expand Down Expand Up @@ -1017,6 +1014,11 @@ function MSEStrategy(
})
}

function onPlaybackFrozen(event) {
Plugins.interface.onPlaybackFrozen(event)
DebugTool.error(`${event.cause}. Total frames - ${event.totalVideoFrames}`)
}

return {
transitions: {
canBePaused: () => true,
Expand Down
1 change: 1 addition & 0 deletions src/plugins.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,6 @@ export default {
onFragmentContentLengthMismatch: (evt) => callOnAllPlugins("onFragmentContentLengthMismatch", evt),
onQuotaExceeded: (evt) => callOnAllPlugins("onQuotaExceeded", evt),
onPlaybackRateChanged: (evt) => callOnAllPlugins("onPlaybackRateChanged", evt),
onPlaybackFrozen: (evt) => callOnAllPlugins("onPlaybackFrozen", evt),
},
}