Skip to content

Technical Plugin CDN

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

Technical: CDN plugin

Connects AVideo media delivery and administration to its configured CDN service.

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: AVideo Streamer repository.
  • Reported version: 2.0.
  • Source revision: 7d48f2dfc0289236718a3f9fba7c5ffecff4a37f.
  • Entry class file: CDN.php.

Confirm the installed plugin version independently of the Streamer version. Configuration defaults below are not a dump of this installation's saved settings.

Dependencies

Plugin Required by declaration Source reason
AWS_S3 Optional Optional S3-backed CDN storage integration

Literal runtime plugin references: AWS_S3, Blackblaze_B2, Live, VideoHLS, YPTStorage. These calls do not mean every referenced plugin is mandatory.

Hook integration

Override Implementation
getTags() CDN.php:14
getDataObjectAdvanced() CDN.php:51
getVideosManagerListButton() CDN.php:98
getPluginMenu() CDN.php:107
getVideoTags($videos_id) CDN.php:261
onEncoderNotifyIsDone($videos_id) CDN.php:291
onUploadIsDone($videos_id) CDN.php:296
getFooterCode() CDN.php:326

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
enable_cdn true Enable CDN: If you disable the CDN and you still have a storage, your storage will be used as a backup for the videos only, you wtill need a database backup source
key Private setting; value omitted — source
CDN "" — source
CDN_S3 "" — source
CDN_B2 "" — source
CDN_FTP "" — source
CDN_YPTStorage "" — source
CDN_Live "" — source
CDN_LiveServers "" — source
enable_storage false — source
storage_autoupload_new_videos true — source
storage_users_can_choose_storage true — source
storage_keep_original_files false — source
storage_username "" — source
storage_password Private setting; value omitted — source
storage_hostname "" — source
storage_pullzone "" Storage Pullzone URL: Custom CDN pullzone URL(s) for storage files. Separate multiple URLs with semicolons (;) for load balancing — a random valid URL will be chosen on each request. If empty, the URL will be auto-generated from the storage username as {username}.cdn.ypt.me 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
CDN.php plugin entry class —
FtpClient/FtpClient.php class/helper implementation —
FtpClient/FtpException.php class/helper implementation —
FtpClient/FtpWrapper.php class/helper implementation —
Storage/CDNStorage.php class/helper implementation file
Storage/footer.php PHP page/include/worker; inspect caller —
Storage/getVideoManagerButton.php PHP page/include/worker; inspect caller —
Storage/moveLocalToRemote.json.php JSON entry point; inspect caller and guard videos_id
Storage/moveRemoteToLocal.json.php JSON entry point; inspect caller and guard videos_id
Storage/panelIsMoving.php PHP page/include/worker; inspect caller —
Storage/panelMove.php PHP page/include/worker; inspect caller —
Storage/syncVideo.php PHP page/include/worker; inspect caller videos_id
Storage/test.php PHP page/include/worker; inspect caller —
disable.json.php JSON entry point; inspect caller and guard key
download.json.php JSON entry point; inspect caller and guard delete, token
downloadButtons.php PHP page/include/worker; inspect caller videos_id
downloadProgress.json.php JSON entry point; inspect caller and guard token
purgeCache.json.php JSON entry point; inspect caller and guard —
status.json.php JSON entry point; inspect caller and guard key, par
tools/deleteCDNKeys.php PHP page/include/worker; inspect caller —
tools/downloadAllFilesFromCDN.php PHP page/include/worker; inspect caller —
tools/downloadAllFilesFromS3.php PHP page/include/worker; inspect caller —
tools/findEncKeys.php PHP page/include/worker; inspect caller —
tools/fixDummyFiles.php PHP page/include/worker; inspect caller —
tools/fixIndexMP4.php PHP page/include/worker; inspect caller debug
tools/fixM3U8DummyFiles.php PHP page/include/worker; inspect caller —
tools/functions.php PHP page/include/worker; inspect caller —
tools/listRemoteFiles.php PHP page/include/worker; inspect caller path
tools/moveFilesCDNToLocal.php PHP page/include/worker; inspect caller —
tools/moveFilesToCDN.php PHP page/include/worker; inspect caller —
tools/moveMP3ToCDN.php PHP page/include/worker; inspect caller —
tools/moveMP4ToCDN.php PHP page/include/worker; inspect caller —
tools/moveMissingFiles.php PHP page/include/worker; inspect caller —
tools/uploadFilesAPI.php PHP page/include/worker; inspect caller —

Data and migrations

No CREATE TABLE names were extracted from available plugin SQL. The plugin can still use core tables, PHP-created schema or another component's data. 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() 8
getTags() 14
getDescription() 24
getName() 36
getUUID() 41
getPluginVersion() 46
getDataObjectAdvanced() 51
getEmptyDataObject() 69
getVideosManagerListButton() 98
getPluginMenu() 107
pickRandomURL($rawValue) 137
getValidURLs($rawValue) 146
getURL($type = '<string>', $id = 0) 168
getCDN_S3URL() 217
getCDN_B2URL() 237
getCDN_FTPURL() 251
getVideoTags($videos_id) 261
onEncoderNotifyIsDone($videos_id) 291
onUploadIsDone($videos_id) 296
processNewVideo($videos_id) 301
userCanMoveVideoStorage() 311
getFooterCode() 326
purgeCache() 334

Supporting PHP declarations

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

FtpClient/FtpClient.php

Declared classes: FtpClient.

Named symbol Source
__construct($connection = null) 71
__destruct() 87
__call($method, array $arguments) 105
setPhpLimit($memory = null, $time_limit = 0, $ignore_user_abort = true) 118
help() 135
connect($host, $ssl = false, $port = 21, $timeout = 90) 151
close() 171
getConnection() 184
getWrapper() 194
login($username = '<string>', $password = '') 208
modifiedTime($remoteFile, $format = null) 228
up() 245
nlist($directory = '<string>', $recursive = false, $filter = '<string>') 272
mkdir($directory, $recursive = false) 362
rmdir($directory, $recursive = true) 400
cleanDir($directory) 425
remove($path, $recursive = false) 449
isDir($directory) 470
isEmpty($directory) 494
scanDir($directory = '<string>', $recursive = false) 510
dirSize($directory = '<string>', $recursive = true) 522
count($directory = '<string>', $type = null, $recursive = true): int 542
putFromString($remote_file, $content) 565
putFromPath($local_file) 586
putAll($source_directory, $target_directory, $mode = FTP_BINARY) 609
put($source_directory, $target_directory, $mode = FTP_BINARY) 648
rawlist($directory = '<string>', $recursive = false) 667
parseRawList(array $rawlist) 770
rawToType($permission) 847
setWrapper(FtpWrapper $wrapper) 879

FtpClient/FtpException.php

Declared classes: FtpException.

FtpClient/FtpWrapper.php

Declared classes: FtpWrapper.

Named symbol Source
__construct(&$connection) 67
__call($function, array $arguments) 80
connect($host, $port = 21, $timeout = 90) 100
ssl_connect($host, $port = 21, $timeout = 90) 112

Storage/CDNStorage.php

Declared classes: CDNStorage.

Named symbol Source
getClient($try = 0) 14
getStorageClient($try = 0) 19
xsendfilePreVideoPlay() 48
getFilesListBoth($videos_id) 67
getPZ() 111
getPZURLs() 120
getValidPullZoneURLs($rawValue) 136
getURLFromPZ($relativeFilename) 155
getRelativeFilenameFromURL($url) 165
getFilesListRemote($videos_id, $client = null) 190
getRemoteDirectorySize($videos_id, $client = null) 265
getFilesListInfo($local_path, $videos_id, $skipDummyFiles = true) 275
getLocalFolder($videos_id) 319
getOrCreateSite() 335
setSite($videos_id, $isOnTheStorage) 356
moveRemoteToLocal($videos_id, $runInBackground = true, $deleteWhenIsDone = true) 370
deleteRemoteDirectory($videos_id, $client = null, $recursive = true) 440
deleteRemoteDirectoryFromFilename($filename, $client = null, $recursive = true) 452
filenameToRemotePath($filename, $addUsernameFolder = true) 469
moveLocalToRemote($videos_id, $runInBackground = true) 480
put($videos_id, $totalSameTime, $onlyExtension = '') 586
putUsingAPI($filesToUpload) 662
putUsingFTP($filesToUpload, $totalSameTime) 697
ftp_get($videos_id) 791
get($videos_id, $totalSameTime) 870
getConnID($index, &$conn_id) 998
downloadFromCDNStorage($local_path, $index, &$conn_id, &$ret) 1025
uploadToCDNStorage($local_path, $index, &$conn_id, &$ret) 1066
createDummyFiles($videos_id) 1099
sendSocketNotification($videos_id, $msg) 1162
setProgress($videos_id, $isOnTheStorage, $finished) 1179
isMoving($videos_id) 1188
createDummy($file_path) 1211
getFilesListLocal($videos_id, $skipDummyFiles = true) 1228
processFileOrDirectory($value, &$filesList, &$acumulative, $videos_id, $skipDummyFiles) 1255
getAddress($filename) 1272
getURL($filename) 1281
getLogFile($videos_id) 1330
addToLog($videos_id, $message) 1347
deleteLog($videos_id) 1363
file_get_contents($remote_filename) 1375
file_exists_on_cdn($remote_filename) 1382
convertCDNHLSVideoToDownload($videos_id, $format = '<string>', $logFile = '') 1413
convertCDNHLSVideoToDownloadProgress($videos_id, $format = '<string>') 1528

tools/functions.php

Named symbol Source
getConnID($index) 4
ftp_mlsd_recursive($ftp_stream, $directory) 21

tools/moveFilesCDNToLocal.php

Named symbol Source
download($videos_id) 50
runLoop() 57

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.

Related test filenames (name matches only; not executed by generation):

Shared diagnostic workflow. This page is not a security audit or a claim of end-to-end validation.

Clone this wiki locally