Repository navigation
Technical Plugin CDN
Connects AVideo media delivery and administration to its configured CDN service.
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: 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.
| 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.
| 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 |
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 |
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 | — |
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.
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 |
These symbols are grouped by source file; inspect the class declaration and visibility before calling them.
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 |
Declared classes: FtpException.
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 |
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 |
| Named symbol | Source |
|---|---|
getConnID($index) |
4 |
ftp_mlsd_recursive($ftp_stream, $directory) |
21 |
| Named symbol | Source |
|---|---|
download($videos_id) |
50 |
runLoop() |
57 |
- 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.
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.
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