Skip to content

Technical Plugin VideoPlaylistScheduler

Daniel Neto edited this page Oct 29, 2026 · 1 revision

Technical: VideoPlaylistScheduler plugin

Schedules playlist-based live programming and tracks scheduled sessions.

Audience: developers, advanced administrators and AI-assisted diagnosis. Plugin catalog.

Source baseline

  • 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.

Behavior and operational checks

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.

Dependencies

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.

Hook integration

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

Configuration assignments

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

Files and request surface

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 —

Data and migrations

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.

Main-file named symbols

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

Supporting PHP declarations

These symbols are grouped by source file; inspect the class declaration and visibility before calling them.

Objects/Videops_logs.php

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

Objects/Videops_notes.php

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

Objects/Videops_scheduler_timeslots.php

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

Objects/Videops_schedulers.php

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

Diagnostics and validation

  1. Check the installed/enabled version and the dependencies/settings above.
  2. Identify the actual failing page, request, callback or worker and correlate its timestamp with the AVideo log.
  3. Follow the linked method and caller. Check business-state changes and output artifacts as well as HTTP status.
  4. 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.

Clone this wiki locally