Getting Video State from the EmbedAPI does not work
Dear Panopto Team,
I am trying to use your Embed API. I need to read the currentTime the of the Video playing. The getCurrentTime
function of the embedApi just returns this.currentTime
. I unminified the embedApi and this is the code that seems to be responsible for setting embedAPI.currentTime
:
window.addEventListener( "message", function (e) { try { var o = e.data, n = JSON.parse(o); if (n.source === PanoptoSource && (n.id === t.iframeId || "*" === n.id)) switch (n.msg) { case "embedIframeReady": t.onIframeReady && t.onIframeReady(); break; case "iframeError": t.onError && t.onError(); break; case LoginShownMessage: t.onLoginShown && t.onLoginShown(); break; case "iframeState": var i = n.data; (t.volume = i.volume), (t.isVideoMuted = i.isMuted), (t.currentTime = i.currentTime), (t.duration = i.duration), (t.speed = i.speed), (t.isPaused = i.isPaused), (t.isFinished = i.isFinished), (t.captionLanguages = i.captionLanguages), (t.selectedLanguage = i.selectedLanguage), (t.areCaptionsDisplayed = i.areCaptionsEnabled), "iframeStateUpdate" === i.trigger ? (t.isReady || (t.onReady && t.onReady(), (t.isReady = !0)), t.onStateChange && t.onStateChange(t.getState())) : "iframeSpeedUpdate" === i.trigger && t.onPlaybackRateChange && t.onPlaybackRateChange(); } } catch (e) {} },
There are some problems with this code. First of all the messages send by the iframe have no n.id
set. Therefore the if
statement always returns false, since the n.id === "*"
and n.id===t.iframeId
conditions both evaluate to false.
Removing that check, i.e. replacing the if
condition by
if (n.source === PanoptoSource)
also does not work. For some reason, as soon as I do that the speed of the video gets set to 2. Setting it back to 1 does not help. As soon as I start the video again, the speed it at 2
. Even uncommenting the line `t.speed = i.speed` does not change this behaviour.
For reproducibility, this is the code I use to initialize the panopto-player.
const embedApi = new EmbedApi("panopto-player", { width: "750", height: "422", //This is the URL of your Panopto site serverName: "...url...", sessionId: "...some-id...", videoParams: { // Optional parameters //interactivity parameter controls if the user sees table of contents, discussions, notes, & in-video search "interactivity": "none", "showtitle": "false" }, events: { "onIframeReady": onPanoptoIframeReady, "onReady": onPanoptoVideoReady, "onStateChange": onPanoptoStateUpdate } });
Afterwards calling `embedApi.getCurrentTime` will return undefined
(and same for all the other state checks like embedApi.getDuration
etc.)
Answers
Jacob,
Thank you for posting a question and I apologize the extreme delay of response here.
One of our developers looked at your question but he thinks that we need more information to address your issue.
Please open a support ticket through your organization's Panopto administrator and refer to this forum post.