Overview
Stream integration with Moodle enables:
- Automatic sync of meeting recordings (Zoom, Teams, Unicko, etc.) to the Stream server.
- Automatic embedding of recordings in the relevant Moodle course (via the
local_streamplugin). - Stream activity in a course — playlist and video player inside Moodle (via the
mod_streamplugin).
The two plugins work together: local_stream handles the flow of recordings from the cloud; mod_stream displays videos from Stream to students.
Required plugins
-
local_stream — central integration (Local plugin)
Syncs meetings and recordings, uploads to the Stream server, and embeds them in the course.
GitHub – moodle-local_stream · Moodle.org -
mod_stream — Stream activity (Activity module)
Adds a «STREAM» activity to a course: playlist, embedded player, and automatic recording collection per course.
GitHub – moodle-mod_stream · Moodle.org
Prerequisites
- An up-to-date Moodle site with Site administrator permissions.
- An active Stream server (e.g.
https://stream.example.ac.il) with an API key (Account ID). - SSH/FTP or deployment access to the Moodle directory, or installation via the «Install plugins» interface.
- For Zoom sync: a Zoom account with Cloud Recording and API credentials (OAuth / Server-to-Server, depending on your organization’s setup).
Moodle versions and Git branches
In moodle-mod_stream, the following branches are defined:
| Moodle version | Recommended Git branch |
|---|---|
| Moodle 3.4 – 4.1 | MOODLE_401 |
| Moodle 4.2 | MOODLE_402 |
For local_stream, use the master branch or a branch that matches your Moodle version (check the repository README).
Installation
Install local_stream first, then mod_stream.
Step 1 — Download the files
- Download a ZIP from GitHub (Code → Download ZIP) or clone:
git clone https://github.com/mattan-d/moodle-local_stream.git git clone https://github.com/mattan-d/moodle-mod_stream.git - For
mod_stream, switch to the branch that matches your Moodle version (e.g.MOODLE_402).
Step 2 — Copy to Moodle directories
| Plugin | Path on the Moodle server |
|---|---|
| local_stream | moodle/local/stream/ |
| mod_stream | moodle/mod/stream/ |
Make sure the folder name is stream (lowercase) and that all plugin files sit directly inside it (including version.php).
Step 3 — Complete installation in Moodle
- Log in as a site administrator.
- Go to Site administration → Notifications.
- Moodle will detect the new plugins — click Continue and complete the database upgrade.
- Repeat for each plugin if you installed them one at a time.
Stream server settings (VideoTube)
Before configuring the Moodle plugins, make sure the Stream system has an API key the plugins will use:
- Log in to System settings (
/admin/settings) on the Stream server. - Find the Account ID / API Key field (the value in
$CONFIG->apikey). - Copy the key — it will be entered in both Moodle plugins as Account ID.
- Ensure the Stream server URL is reachable from Moodle (HTTPS, no firewall blocking).
Configuring local_stream
Path: Site administration → Plugins → Local plugins → Stream
Main settings
- Platform — choose the recording source:
Zoom— sync cloud recordings from Zoom.Microsoft Teams— Teams recordings.Unicko— via LTI (depending on your organization’s setup).
- Stream server / API — Stream server URL and Account ID (API key).
- Zoom API (when the platform is Zoom):
- Client ID / Client Secret or JWT / Server-to-Server credentials — depending on the app type in Zoom Marketplace.
- Cloud Recording must be enabled on the Zoom account.
- Embed order — whether to place the recording activity below the original meeting activity (e.g. below Zoom).
- Based grouping / duplicate handling — prevent embedding the same recording twice (by Zoom UUID).
- Notifications (optional) — notify course participants when a new recording is embedded.
Connection test
After saving settings, use the connection status check (if available on the screen) to verify that Moodle can communicate with Stream and Zoom.
Zoom flow (summary)
- A lecturer creates a Zoom activity in a Moodle course.
- The meeting takes place with cloud recording enabled.
- A scheduled task in
local_streampulls the list of recordings. - The recording is uploaded to Stream (via
webservice/api.php) and/or a course activity is created with a link to watch it.
Configuring mod_stream
Path: Site administration → Plugins → Activity modules → Stream
Site-level settings
- Stream API endpoint — base URL of the Stream server (e.g.
https://stream.smkb.ac.il). - Account ID — the same API key as in
local_streamand Stream settings. - Connection status — verify that Moodle can reach
api2.phpand retrieve the video list. - Defaults (version-dependent):
- Whether to include audio / an audio player for certain courses.
- Automatic recording collection mode for the activity.
What mod_stream does in a course
- Adds a STREAM activity to the course.
- Displays a playlist of videos from the Stream server (manual selection or automatic collection).
- Sends limited user details (name, email, ID) to Stream for security, statistics, and view restrictions — according to Stream settings.
Scheduled tasks (Cron)
local_stream requires Moodle Cron to run:
- Go to Site administration → Server → Scheduled tasks.
- Find the task Embedded recordings (local_stream) — class
local_stream\task\embed. - Ensure it is enabled and runs at a suitable frequency (e.g. every 5–15 minutes, or hourly).
- Ensure Moodle Cron runs on the server (crontab):
* * * * * php /path/to/moodle/admin/cli/cron.php
You can run it manually for testing:
php /path/to/moodle/admin/cli/scheduled_task.php --execute='\local_stream\task\embed'
Check the Moodle log for API errors (Zoom / Stream).
How it works
Downloading videos from Zoom cloud
Once local_stream is configured, the system connects to Zoom cloud, identifies recordings of meetings linked to Moodle courses, and uploads them to the Stream server. Recordings are centralized in one system for management, editing, and transcription.
Automatic embedding in the course
Synced videos are embedded automatically in the relevant course — the one from which the Zoom meeting was created. The lecturer does not need to upload files manually.
Stream activity for students
With mod_stream you can add a Stream activity with all course videos (including those collected automatically), arrange a playlist, and control availability.
For lecturers (summary)
After the administrator has configured the plugins:
- Zoom + automatic recording — create a Zoom activity in the course, record to the cloud; after Zoom processing the recording will appear in the course (via local_stream).
- STREAM activity — in the course: «Add an activity or resource» → STREAM:
- Set a title and description.
- Enable «Recording collection» or choose videos manually from the Stream server.
- Reorder the playlist by drag and drop.
- Set open/close dates if needed.
Detailed lecturer guide: Quick guide for lecturers – STREAM in Moodle.
Creating questions from a video: Creating questions from a Stream video in Moodle.
Troubleshooting
| Issue | What to check |
|---|---|
| Recording does not appear in the course | Cloud Recording in Zoom; local_stream\task\embed task enabled; Cron running; Zoom and Stream credentials. |
| «Account ID is missing» / API error | Account ID in Moodle matches apikey on the Stream server; HTTPS reachable. |
| Titles / Hebrew displayed as ???? | UTF-8 in Moodle and MySQL; latest Stream server update (charset fix in API). |
| Recording in the wrong course | courseid / course name mapping in settings; Zoom meeting topic. |
| Duplicate recordings | Enable «based grouping» / dedup in local_stream. |
| Empty mod_stream activity | Connection to api2.php; user/lecturer has videos in Stream; video privacy (public/authenticated). |
For advanced diagnosis: enable debug in Moodle, run the scheduled task manually, and check the log.