Hey Buzz/Agilix Team,
I am experiencing an issue that only began around the beginning/middle of April regarding uploaded Zoom recordings and embedded HTML video players within my course.
Each week, I host Zoom classes, record them, upload the recordings into the course Resources, and then use a custom HTML template where I plug in the SRC URL for the uploaded video. Prior to April, these SRC URLs remained stable indefinitely, allowing older recordings to continue functioning properly for students who needed to revisit lessons or catch up on work.
However, since approximately mid-April, the SRC URLs for these uploaded videos now appear to change daily. This has become highly problematic because every embedded lesson video breaks unless I manually update the SRC URL again. At this point, I have had to repeatedly update the HTML for the past four weeks of recordings, while all videos uploaded before this issue began continue functioning normally without any adjustments.
I have not changed my workflow or methodology in any way, so I am trying to understand what system or resource handling changes may have been implemented recently that could be causing this behavior.
The HTML setup is extremely important for my math classes because I use custom video controls to prevent students from skipping forward through lessons, which helps maintain instructional integrity for asynchronous students.
I would greatly appreciate the opportunity to meet with someone from your team so I can demonstrate exactly what I am seeing. A short video call would likely make the issue much easier to explain and troubleshoot together.
Please get back to me via email when possible so we can coordinate a time to connect.
Thank you,
Sam Martinez
Visions in Education (CA)
Comments (6)
Example HTML code....
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Reminder about Resources in IM1</title>
<style>
@font-face {
font-family: GothamPro;
src: url('FONT URL.woff'),
url('FONT URL.tff');
font-weight: 300;
font-style: normal;
}
body {
font-family: GothamPro, sans-serif;
background-color: #f5f5f5;
color: #333;
margin: 0;
padding: 0;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
background: #ffffff;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
border-radius: 8px;
}
h1 {
font-size: 1.75rem;
margin-bottom: 20px;
color: #2c3e50;
text-align: center;
}
ul {
margin: 20px 0;
padding-left: 20px;
}
ul li {
margin-bottom: 10px;
}
video {
width: 100%;
height: auto;
display: block;
border: 1px solid #ddd;
border-radius: 4px;
margin-bottom: 10px;
}
.section-break {
margin: 40px 0;
border-top: 2px dashed #ccc;
}
</style>
</head>
<body>
<div class="container">
<h1>Reminder about Resources in IM1</h1>
<p>If you missed our LIVE class this week, don't worry! Watch the recording to catch up on important information. I'll go over this week's announcements, show some examples, and review the POW (Problem of the Week) if needed.</p>
<p>Make sure to watch the entire video. Have a pen/pencil and a notebook ready to take notes. This video is meant to help you understand the material better and support your learning!</p>
<div class="video-container">
<video id="videoPlayer" controls preload="metadata">
<source src="VIDEO URL.mp4" type="video/mp4">
<!-- Subtitles / Closed Captions -->
<track src="Week 33 LIVE 2026a.vtt" kind="subtitles" srclang="en" label="English" default>
Your browser does not support the video tag.
</video>
</div>
<script>
const video = document.getElementById('videoPlayer');
// ✅ Force captions ON when the video metadata is loaded
video.addEventListener('loadedmetadata', () => {
for (let i = 0; i < video.textTracks.length; i++) {
video.textTracks[i].mode = 'showing'; // force captions visible
}
});
let lastTime = 0;
// Disable fast forward and seeking forward
video.addEventListener('timeupdate', function () {
if (video.currentTime > lastTime + 1) {
video.currentTime = lastTime;
} else {
lastTime = video.currentTime;
}
});
// Disable skipping with the seek bar
video.addEventListener('seeking', function () {
if (video.currentTime > lastTime) {
video.currentTime = lastTime;
}
});
// Reset playback rate on play
video.addEventListener('play', () => {
video.playbackRate = 1; // Default playback speed
});
// Disable right-click menu globally
document.addEventListener("contextmenu", (evt) => {
evt.preventDefault();
});
// Disable common shortcut keys
document.addEventListener("keydown", (evt) => {
// Block F12
if (evt.key === "F12") {
evt.preventDefault();
}
// Block Ctrl+Shift+I (DevTools), Ctrl+Shift+J (Console), Ctrl+U (View Source), Ctrl+S (Save), Ctrl+P (Print)
if ((evt.ctrlKey || evt.metaKey) && (
evt.key.toLowerCase() === "s" ||
evt.key.toLowerCase() === "u" ||
evt.key.toLowerCase() === "p")) {
evt.preventDefault();
}
if (evt.ctrlKey && evt.shiftKey && (
evt.key.toLowerCase() === "i" ||
evt.key.toLowerCase() === "j" ||
evt.key.toLowerCase() === "c")) {
evt.preventDefault();
}
});
</script>
</div>
</body>
</html>
CHAT GPT says that maybe you have dynamically changed the URL to update security on items. My thought is, maybe if I upload the video .mp4 file into the same directory I can reference it like I do with the VTT file here. Trying that now.
This seemed to work. Maybe I will try that from now on.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Reminder about Resources in IM1</title>
<style>
@font-face {
font-family: GothamPro;
src: url('FONT URL.woff'),
url('FONT URL.tff');
font-weight: 300;
font-style: normal;
}
body {
font-family: GothamPro, sans-serif;
background-color: #f5f5f5;
color: #333;
margin: 0;
padding: 0;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
background: #ffffff;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
border-radius: 8px;
}
h1 {
font-size: 1.75rem;
margin-bottom: 20px;
color: #2c3e50;
text-align: center;
}
ul {
margin: 20px 0;
padding-left: 20px;
}
ul li {
margin-bottom: 10px;
}
video {
width: 100%;
height: auto;
display: block;
border: 1px solid #ddd;
border-radius: 4px;
margin-bottom: 10px;
}
.section-break {
margin: 40px 0;
border-top: 2px dashed #ccc;
}
</style>
</head>
<body>
<div class="container">
<h1>Reminder about Resources in IM1</h1>
<p>If you missed our LIVE class this week, don't worry! Watch the recording to catch up on important information. I'll go over this week's announcements, show some examples, and review the POW (Problem of the Week) if needed.</p>
<p>Make sure to watch the entire video. Have a pen/pencil and a notebook ready to take notes. This video is meant to help you understand the material better and support your learning!</p>
<div class="video-container">
<video id="videoPlayer" controls preload="metadata">
<source src="Week 33 LIVE 2026a.mp4" type="video/mp4">
<!-- Subtitles / Closed Captions -->
<track src="Week 33 LIVE 2026a.vtt" kind="subtitles" srclang="en" label="English" default>
Your browser does not support the video tag.
</video>
</div>
<script>
const video = document.getElementById('videoPlayer');
// ✅ Force captions ON when the video metadata is loaded
video.addEventListener('loadedmetadata', () => {
for (let i = 0; i < video.textTracks.length; i++) {
video.textTracks[i].mode = 'showing'; // force captions visible
}
});
let lastTime = 0;
// Disable fast forward and seeking forward
video.addEventListener('timeupdate', function () {
if (video.currentTime > lastTime + 1) {
video.currentTime = lastTime;
} else {
lastTime = video.currentTime;
}
});
// Disable skipping with the seek bar
video.addEventListener('seeking', function () {
if (video.currentTime > lastTime) {
video.currentTime = lastTime;
}
});
// Reset playback rate on play
video.addEventListener('play', () => {
video.playbackRate = 1; // Default playback speed
});
// Disable right-click menu globally
document.addEventListener("contextmenu", (evt) => {
evt.preventDefault();
});
// Disable common shortcut keys
document.addEventListener("keydown", (evt) => {
// Block F12
if (evt.key === "F12") {
evt.preventDefault();
}
// Block Ctrl+Shift+I (DevTools), Ctrl+Shift+J (Console), Ctrl+U (View Source), Ctrl+S (Save), Ctrl+P (Print)
if ((evt.ctrlKey || evt.metaKey) && (
evt.key.toLowerCase() === "s" ||
evt.key.toLowerCase() === "u" ||
evt.key.toLowerCase() === "p")) {
evt.preventDefault();
}
if (evt.ctrlKey && evt.shiftKey && (
evt.key.toLowerCase() === "i" ||
evt.key.toLowerCase() === "j" ||
evt.key.toLowerCase() === "c")) {
evt.preventDefault();
}
});
</script>
</div>
</body>
</html>
Hi Sam!
The changes you made removed the session token from the media source files path. The method to embed the files looks like it appended a user session token to it and when the session expires, access to the file will no longer occur. There was another thread that touched on the subject of embedding content to avoid introducing session tokens that may be insightful. It is located here: https://support.agilix.com/hc/en-us/community/posts/47319183635092-Cannot-upload-video
Since this is a public forum accessible to anyone, I recommend that any support related questions containing potentially sensitive information, such as session tokens, be shared directly with your authorized support representative at School Pathways in the future.
Update,
I think that this is clever, but now I have to go and reprogram all of my HTML files, and I have to change all of my resource directories to house files differently. I would have liked to have been updated on this so that I was not figuring it out on my own.
Thanks,
Please let me know if I am missing something.
Sam
Hey Brian,
Thank you. I think I just need to re-tool all of my files for next academic year.
Sam