Repository navigation
Technical Plugin VideoPlaylistScheduler
Schedules playlist-based live programming and tracks scheduled sessions.
Audience: developers, advanced administrators and AI-assisted diagnosis. Plugin catalog.
- Review date: 2026-10-29. Method: static source analysis; runtime/provider behavior was not exercised.
- Code ownership: independently versioned plugin repository.
- Reported version:
6.5. - Source revision:
98fc0deda918a3cc9f74e588c2ec3ac01b4d5e0d. - Entry class file: VideoPlaylistScheduler.php.
Confirm the installed plugin version independently of the Streamer version. Configuration defaults below are not a dump of this installation's saved settings.
Playlist relays have a separate process identity from automatic restream destinations. Check schedule time, source playlist and relay identity before stopping processes; destination recovery must preserve unrelated playlist relays.
No literal dependency declaration was extracted. This does not prove the plugin is standalone.
Literal runtime plugin references: Live, PlayLists, Videops_logs. These calls do not mean every referenced plugin is mandatory.
| Override | Implementation |
|---|---|
updateScript() |
VideoPlaylistScheduler.php:44 |
getPluginMenu() |
VideoPlaylistScheduler.php:95 |
executeEveryMinute() |
VideoPlaylistScheduler.php:301 |
canRecordVideo($key) |
VideoPlaylistScheduler.php:709 |
canNotifyVideo($key) |
VideoPlaylistScheduler.php:715 |
on_publish_done($live_transmitions_history_id, $users_id, $key, $live_servers_id) |
VideoPlaylistScheduler.php:802 |
on_publish_denied($key) |
VideoPlaylistScheduler.php:866 |
on_publish($users_id, $live_servers_id, $liveTransmitionHistory_id, $key, $isReconnection) |
VideoPlaylistScheduler.php:877 |
getPermissionsOptions() |
VideoPlaylistScheduler.php:1000 |
These are direct assignments inside getEmptyDataObject(), not evaluated effective defaults. Stored plugins.object_data, globals, structured values and conditional branches may alter runtime behavior. Private/default credential values are omitted.
| Field | Literal default or expression type | Literal source label/help | Evidence |
|---|---|---|---|
afterCompleteChangeStatusTo |
Computed/structured; inspect source | After the video play in a show change its status | source |
playCalendarLive |
true |
— | source |
rebroadcastAlltoUsersId |
0 |
Rebroadcast to Users_Id: When it is set, it will rebroadcast all the calendar lives to this profile | source |
This inventory distinguishes implementation files from an API specification. Includes, templates, callbacks and CLI workers are not interchangeable HTTP endpoints. Request-field names below are direct source references, not a complete schema or permission declaration.
| File | Source role | Direct request fields observed |
|---|---|---|
| Objects/Videops_logs.php | class/helper implementation | — |
| Objects/Videops_notes.php | class/helper implementation | — |
| Objects/Videops_scheduler_timeslots.php | class/helper implementation | — |
| Objects/Videops_schedulers.php | class/helper implementation | — |
| VideoPlaylistScheduler.php | plugin entry class | sort |
| View/Videops_logs/add.json.php | JSON entry point; inspect caller and guard |
created_php_time, id, json, modified_php_time, playlist_index, timezone, videops_scheduler_timeslots_id, videops_schedulers_id, videos_id
|
| View/Videops_logs/delete.json.php | JSON entry point; inspect caller and guard | id |
| View/Videops_logs/index.php | PHP page/include/worker; inspect caller | — |
| View/Videops_logs/index_body.php | PHP page/include/worker; inspect caller | — |
| View/Videops_logs/list.json.php | JSON entry point; inspect caller and guard |
draw, status, videops_scheduler_timeslots_id, videops_schedulers_id
|
| View/Videops_logs/logs.php | PHP page/include/worker; inspect caller | — |
| View/Videops_notes/add.json.php | JSON entry point; inspect caller and guard |
bgColor, end, id, note, start, timezone
|
| View/Videops_notes/delete.json.php | JSON entry point; inspect caller and guard | id |
| View/Videops_notes/index.php | PHP page/include/worker; inspect caller | — |
| View/Videops_notes/index_body.php | PHP page/include/worker; inspect caller | — |
| View/Videops_notes/list.json.php | JSON entry point; inspect caller and guard | draw |
| View/Videops_scheduler_timeslots/add.json.php | JSON entry point; inspect caller and guard |
end, id, start, timezone, videops_schedulers_id
|
| View/Videops_scheduler_timeslots/delete.json.php | JSON entry point; inspect caller and guard | id |
| View/Videops_scheduler_timeslots/index.php | PHP page/include/worker; inspect caller | — |
| View/Videops_scheduler_timeslots/index_body.php | PHP page/include/worker; inspect caller | — |
| View/Videops_scheduler_timeslots/list.json.php | JSON entry point; inspect caller and guard | draw |
| View/Videops_schedulers/add.json.php | JSON entry point; inspect caller and guard |
color, custom_description, custom_title, id, onFinish, playBackMode, playlists_id
|
| View/Videops_schedulers/delete.json.php | JSON entry point; inspect caller and guard | id |
| View/Videops_schedulers/index.php | PHP page/include/worker; inspect caller | — |
| View/Videops_schedulers/index_body.php | PHP page/include/worker; inspect caller | — |
| View/Videops_schedulers/list.json.php | JSON entry point; inspect caller and guard | draw |
| View/editor.php | PHP page/include/worker; inspect caller | — |
| calendar.php | PHP page/include/worker; inspect caller | — |
| index.php | PHP page/include/worker; inspect caller | — |
| info.php | PHP page/include/worker; inspect caller | videops_scheduler_timeslots_id |
| infoShow.php | PHP page/include/worker; inspect caller | — |
| infoTimeslot.php | PHP page/include/worker; inspect caller | — |
| install/install.sql | schema/migration SQL | — |
| isRuning.ffmpeg.json.php | JSON entry point; inspect caller and guard | playlists_id |
| list.ffmpeg.json.php | JSON entry point; inspect caller and guard | playlists_id |
| list.json.php | JSON entry point; inspect caller and guard | — |
| playLiveInLoop.php | PHP page/include/worker; inspect caller | playlists_id |
| restart.json.php | JSON entry point; inspect caller and guard | — |
| start.json.php | JSON entry point; inspect caller and guard | videops_scheduler_timeslots_id |
| startConcat.json.php | JSON entry point; inspect caller and guard | playlists_id |
| stopConcat.json.php | JSON entry point; inspect caller and guard | playlists_id |
| stopLive.php | PHP page/include/worker; inspect caller | videops_logs_id |
| tabs/addEvent.php | PHP page/include/worker; inspect caller | — |
| tabs/addNote.php | PHP page/include/worker; inspect caller | — |
| tabs/calendar.php | PHP page/include/worker; inspect caller | — |
| tabs/createShow.php | PHP page/include/worker; inspect caller | — |
| tabs/displayTimes.php | PHP page/include/worker; inspect caller | — |
| tabs/editor.php | PHP page/include/worker; inspect caller | — |
| tabs/listNotes.php | PHP page/include/worker; inspect caller | — |
| tabs/listShow.php | PHP page/include/worker; inspect caller | — |
| test.php | PHP page/include/worker; inspect caller | — |
| tools/addTest.php | PHP page/include/worker; inspect caller | — |
Tables named in available CREATE TABLE statements: videops_logs, videops_notes, videops_scheduler_timeslots, videops_schedulers.
Apply installation/update behavior through the owning plugin; this reference is not a script for running historical migrations manually.
Visibility and implementation semantics must be checked in source. Nonempty string defaults are represented as . This is a symbol reference, not a stable public API promise.
| Function or method | Source |
|---|---|
getDescription() |
19 |
getName() |
29 |
getUUID() |
34 |
getPluginVersion() |
39 |
updateScript() |
44 |
getEmptyDataObject() |
56 |
getPluginMenu() |
95 |
getColor($row) |
103 |
getTitle($row) |
115 |
addJsonObj($row) |
134 |
getSchedulerEvents($users_id = 0) |
157 |
getTimestampsForWeekday($weekday, $startMinute, $endMinute, $timezone = VideoPlaylistScheduler::TIMEZONE) |
225 |
suggestColors($bgHexColor) |
278 |
executeEveryMinute() |
301 |
restartIfIsAllPlayingAndIsNotOnStats() |
307 |
executeOnHalfHourSchedule($testMode = false, $timezone = VideoPlaylistScheduler::TIMEZONE) |
356 |
broadCastNextEpisode($videops_scheduler_timeslots_id, $try = 0) |
397 |
getConcatTXT($playlists_id) |
515 |
checkVideosCompatibility($playlists_id) |
532 |
printVideosCompatibility($playlists_id) |
585 |
saveConcatTXT($playlists_id) |
598 |
getFFMPEGConcat($playlists_id) |
617 |
getConcatKeyword($playlists_id) |
627 |
generateFFmpegCommand($concatFilePath, $rtmpUrl) |
632 |
ensureMinimumLines($content, $minimumLines = 100000) |
686 |
canRecordVideo($key) |
709 |
canNotifyVideo($key) |
715 |
keyIsAPublic($key) |
720 |
keyIsAHidden($key) |
729 |
keyIsAPlaylistScheduler($key) |
738 |
keyIsAPlaylistLoop($key) |
746 |
formatEventDetails($eventData) |
753 |
minutesToTime($minutes) |
766 |
iskeyShowScheduledHidden($key) |
782 |
iskeyShowScheduledPublic($key) |
792 |
on_publish_done($live_transmitions_history_id, $users_id, $key, $live_servers_id) |
802 |
on_publish_denied($key) |
866 |
on_publish($users_id, $live_servers_id, $liveTransmitionHistory_id, $key, $isReconnection) |
877 |
restreamPublicToDestination($liveTransmitionHistory_id, $videops_scheduler_timeslots_id) |
901 |
getPublicRTMP($liveTransmitionHistory_id, $videops_scheduler_timeslots_id) |
912 |
getPublicIndex($videops_scheduler_timeslots_id) |
920 |
setScheduleStatus($key, $status) |
925 |
getFinishedTimeMessage($modified_php_time, $expect_to_finish_time) |
966 |
log($message) |
976 |
getPermissionsOptions() |
1000 |
canUseCalendar() |
1007 |
forbidIfCannotUseCalendar($videops_scheduler_timeslots_id, $checkIfTimeslotTimeIsValid = false) |
1012 |
These symbols are grouped by source file; inspect the class declaration and visibility before calling them.
Declared classes: Videops_logs.
| Named symbol | Source |
|---|---|
getSearchFieldsNames() |
31 |
getTableName() |
36 |
getAllVideops_schedulers() |
41 |
getAllVideos() |
66 |
getAllVideops_scheduler_timeslots() |
91 |
setId($id) |
117 |
setTimezone($timezone) |
122 |
setCreated_php_time($created_php_time) |
127 |
setModified_php_time($modified_php_time) |
132 |
setVideops_schedulers_id($videops_schedulers_id) |
137 |
setPlaylist_index($playlist_index) |
142 |
setVideos_id($videos_id) |
147 |
setVideops_scheduler_timeslots_id($videops_scheduler_timeslots_id) |
152 |
setJson($json) |
157 |
setStatus($status) |
165 |
getStatus() |
170 |
getId() |
175 |
getTimezone() |
180 |
getCreated_php_time() |
185 |
getModified_php_time() |
190 |
getVideops_schedulers_id() |
195 |
getPlaylist_index() |
200 |
getVideos_id() |
205 |
getVideops_scheduler_timeslots_id() |
210 |
getJson() |
215 |
getLastLog($videops_scheduler_timeslots_id, $fromShow = false, $status = array()) |
220 |
getAll($videops_scheduler_timeslots_id = 0, $videops_schedulers_id = 0, $status = '') |
260 |
getTotal($videops_scheduler_timeslots_id = 0, $videops_schedulers_id = 0) |
307 |
getFromDb($id, $refreshCache = true) |
349 |
save() |
354 |
Declared classes: Videops_notes.
| Named symbol | Source |
|---|---|
getSearchFieldsNames() |
10 |
getTableName() |
15 |
setId($id) |
20 |
setCreated_php_time($created_php_time) |
25 |
setNote($note) |
30 |
getId() |
36 |
getCreated_php_time() |
41 |
getNote() |
46 |
setStart($start, $timezone = VideoPlaylistScheduler::TIMEZONE) |
50 |
setEnd($end, $timezone = VideoPlaylistScheduler::TIMEZONE) |
75 |
setBgColor($bgColor) |
102 |
getBgColor() |
107 |
getAll() |
113 |
Declared classes: Videops_scheduler_timeslots.
| Named symbol | Source |
|---|---|
getSearchFieldsNames() |
10 |
getTableName() |
15 |
getAllVideops_schedulers() |
20 |
setId($id) |
46 |
setVideops_schedulers_id($videops_schedulers_id) |
51 |
setCreated_php_time($created_php_time) |
56 |
setModified_php_time($modified_php_time) |
61 |
setStart($start, $timezone = VideoPlaylistScheduler::TIMEZONE) |
66 |
setEnd($end, $timezone = VideoPlaylistScheduler::TIMEZONE) |
92 |
getEndMinute() |
123 |
getCurrentMinute() |
128 |
timeSlotIsValid() |
140 |
getId() |
213 |
getVideops_schedulers_id() |
218 |
getCreated_php_time() |
223 |
getModified_php_time() |
228 |
getStart() |
233 |
getEnd() |
238 |
getAllFromTimeslot($weekday, $hour, $minute, $testMode = false) |
243 |
getAllFromMinute($weekday, $start_minute, $testMode = false) |
251 |
getScheduledTimeslot($videops_scheduler_timeslots_id) |
275 |
getNextVideo($videops_scheduler_timeslots_id) |
289 |
getNextVideosId($videops_scheduler_timeslots_id) |
297 |
getNextPlaylistIndex($videops_scheduler_timeslots_id) |
324 |
getUsersId($videops_scheduler_timeslots_id) |
354 |
save() |
370 |
Declared classes: Videops_schedulers.
| Named symbol | Source |
|---|---|
getSearchFieldsNames() |
26 |
getTableName() |
30 |
getAllPlaylists() |
34 |
setId($id) |
60 |
setPlaylists_id($playlists_id) |
64 |
setCustom_title($custom_title) |
68 |
setCustom_description($custom_description) |
72 |
setStatus($status) |
76 |
setJson($json) |
80 |
getId() |
88 |
getPlaylists_id() |
92 |
getCustom_title() |
96 |
getCustom_description() |
100 |
getStatus() |
104 |
getJson() |
108 |
save() |
113 |
getAll($users_id=0) |
124 |
getTotal($users_id=0) |
151 |
- Check the installed/enabled version and the dependencies/settings above.
- Identify the actual failing page, request, callback or worker and correlate its timestamp with the AVideo log.
- Follow the linked method and caller. Check business-state changes and output artifacts as well as HTTP status.
- Reproduce the relevant workflow in a test environment. External provider, Encoder, live-server, storage, payment and authenticated flows require their real integrations.
Shared diagnostic workflow. This page is not a security audit or a claim of end-to-end validation.
Start
Install and update
- Install on Ubuntu 24.04 or 26.04
- Installation Setup Page
- Scheduler cron job (required)
- Set up email
- Use HTTPS
- Own Encoder
- Docker
- Update AVideo
- Backup
- Secure file permissions
- Server command-line tools
- Hidden configuration options
Videos
- Upload a video
- Local Encoder (on your computer)
- Bulk upload by FTP
- Import a channel
- Publish on YouTube and social media
- Privacy options
- Only for logged-in users
- Resolutions by user group
- Storage options
- Move and protect video files
- Video does not play
Users
Live
- Make a live stream
- Stream with OBS
- Own live server
- One live server, many sites
- Live server install errors
- Live does not play
Plugins
Problems
Other
- Translate your site
- Write a plugin (developers)
- Technical reference (developers and advanced administrators)
Old and retired guides