Skip to content

Technical Plugin SendRecordedToEncoder

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

Technical: SendRecordedToEncoder plugin

Starts/stops live recording and sends recordings or DVR clips to the Encoder.

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: 13.6.
  • Source revision: fe2c3ae9411e109d10ed680a24e35a188ef147ce.
  • Entry class file: SendRecordedToEncoder.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

The on_publish hook can start recording through Live::controlRecordingAsync(). on_record_done processes completed recordings. Correlate each physical recording, live session and Encoder job. Multiple publishes can create separate files; recording presence does not prove conversion/publication succeeded.

Dependencies

Plugin Required by declaration Source reason
Live Required Sends finished Live recordings to the encoder, its core purpose
Scheduler Optional Optional scheduled recording processing

Literal runtime plugin references: Chat2, Live. These calls do not mean every referenced plugin is mandatory.

Hook integration

Override Implementation
getTags() SendRecordedToEncoder.php:20
on_publish($users_id, $live_servers_id, $liveTransmitionHistory_id, $key, $isReconnection) SendRecordedToEncoder.php:517
getPluginMenu() SendRecordedToEncoder.php:540
getUserOptions() SendRecordedToEncoder.php:546
getFooterCode() SendRecordedToEncoder.php:662
getWatchActionButton($videos_id) SendRecordedToEncoder.php:668
getVideosManagerListButton() SendRecordedToEncoder.php:1068

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
webSiteRootURL "" — source
secretRecorderKey Private setting; value omitted — source
automaticRecord Computed/structured; inspect source — source
saveDVREnable true — source
saveDVRLabel 'Save Live Now' — source
saveDVROnDVRTitle 'on DVR' — source
saveTheMomentEnable true Enable save the moment: This will save the specified total of segments from your DVR, for example if your nginx.conf hls_fragment=4s and you select 6 you will save the total of 24 seconds of your video source
saveTheMomentLabel 'Save The moment' — source
saveTheMomentSegmentsCount 6 Save The moment Segments Count: This will save the specified total of segments from your DVR, for example if your nginx.conf hls_fragment=4s and you select 6 you will save the total of 24 seconds of your video source
convertChatIntoCommentsAfterLive false — source
maxSavesPerMinute Computed/structured; inspect source Maximum saves per minute: This will reflect on save the moment and save DVR feature, set 0 to unlimited source
downloadTheMomentEnable true — source
downloadTheMomentLabel 'Download The moment' — source
downloadTheMomentSegmentsCount 6 Download The moment Segments Count: This will save the specified total of segments from your DVR, for example if your nginx.conf hls_fragment=4s and you select 6 you will save the total of 24 seconds of your video source
usersCanSelectAutoRecord true — source
maxRecorderTimeInMinutes 180 — source
startRecorderCallback Computed/structured; inspect source Start Recorder Callback: This URL expect to encode source
doNotDeleteRecordedIfItIsOnSameServer false — source
showActionButton false — source
encoderFormat Computed/structured; inspect source Encoder Format: Select the encoding format for recorded live streams. "Use Global Default" will follow the VideoHLS plugin setting. 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/Send_recorder.php class/helper implementation —
SendRecordedToEncoder.php plugin entry class domain, name, p, path, swfurl, tcurl
View/Send_recorder/add.json.php JSON entry point; inspect caller and guard id, json, key, live_transmitions_id, scheduler_commands_id, status, users_id, videos_id
View/Send_recorder/delete.json.php JSON entry point; inspect caller and guard id
View/Send_recorder/index.php PHP page/include/worker; inspect caller —
View/Send_recorder/index_body.php PHP page/include/worker; inspect caller —
View/Send_recorder/index_head.php PHP page/include/worker; inspect caller —
View/Send_recorder/list.json.php JSON entry point; inspect caller and guard —
View/editor.php PHP page/include/worker; inspect caller —
actionButtonLive.php PHP page/include/worker; inspect caller live_index
callback.json.php JSON entry point; inspect caller and guard avideoToken, key
chatToComments.json.php JSON entry point; inspect caller and guard messages
chatToComments.list.json.php JSON entry point; inspect caller and guard —
chatToComments.php PHP page/include/worker; inspect caller —
footer.php PHP page/include/worker; inspect caller —
install/install.sql schema/migration SQL —
monitor.json.php JSON entry point; inspect caller and guard —
monitor.php PHP page/include/worker; inspect caller —
recordStart.json.php JSON entry point; inspect caller and guard avideoToken, key, live_servers_id
recordStop.json.php JSON entry point; inspect caller and guard key, live_servers_id, scheduler_commands_id, token
saveDVR.json.php JSON entry point; inspect caller and guard download, howManySegments, key, live_servers_id
verifyDVRTokenVerification.json.php JSON entry point; inspect caller and guard saveDVR

Data and migrations

Tables named in available CREATE TABLE statements: send_recorder. 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
getPluginDependencies() 13
getTags() 20
getDescription() 28
getName() 50
getUUID() 55
getPluginVersion() 60
getEmptyDataObject() 65
getEncoderFormat() 134
on_record_done() 143
copyLivePosterToVideo($liveTransmitionRow, $latestHistory, $videoFilename) 323
onStartRecorder($key, $recordLimitInSeconds, $username, $password = '', $live_servers_id = 0) 385
onStopRecorder($send_recorder_id) 448
cancelSchedule($key) 460
isRecording($key) 476
tokenStopRecorder($token) 485
on_publish($users_id, $live_servers_id, $liveTransmitionHistory_id, $key, $isReconnection) 517
getPluginMenu() 540
getUserOptions() 546
canRecord($users_id) 558
canAutoRecord($users_id) 584
canApprove($users_id) 598
recordOptionIsChecked($users_id) 603
userApproved($users_id) 614
canRecordAndRecordOptionIsChecked($users_id) 635
shouldRecordAllLives() 644
allUsersCanRecord() 650
onlySelectedUsersCanRecord() 656
getFooterCode() 662
getWatchActionButton($videos_id) 668
saveDVR($key, $live_servers_id = 0, $howManySegments = 0, $downloadOnly = false, $allowOfflineUser = false) 677
getSaveDVRButton($key, $live_servers_id = 0, $class = '') 822
getsaveTheMomentButton($key, $live_servers_id = 0, $class = '') 839
getdownloadTheMomentButton($key, $live_servers_id = 0, $class = '') 856
chatToComments($live_transmitions_history_id, $videos_id) 873
messageToComments($message, $live_transmitions_history_id, $videos_id) 904
getCommentFromChatMessageId($chat_messages_id) 928
getFromChatMessageId($chat_messages_id) 939
getCommentsFromChatLiveHistory($live_transmitions_history_id) 954
getAllMessagesFromLive($live_transmitions_history_id) 965
API_set_saveDVR($parameters) 1052
useRecorder($key) 1063
getVideosManagerListButton() 1068

Supporting PHP declarations

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

Objects/Send_recorder.php

Declared classes: Send_recorder.

Named symbol Source
getSearchFieldsNames() 13
getTableName() 17
getAllUsers() 21
getAllLive_transmitions() 41
getAllVideos() 61
getAllScheduler_commands() 81
setId($id) 101
setKey($key) 105
setUsers_id($users_id) 109
setLive_transmitions_id($live_transmitions_id) 113
setVideos_id($videos_id) 117
setStatus($status) 121
setJson($json) 125
setScheduler_commands_id($scheduler_commands_id) 129
getId() 133
getKey() 137
getUsers_id() 141
getLive_transmitions_id() 145
getVideos_id() 149
getStatus() 153
getJson() 157
getScheduler_commands_id() 161
getFromKey($key) 165
isRecording($key) 191
getAllRecording() 214
save() 233

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