mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-03 01:39:24 +02:00
This commit is contained in:
parent
95d3dfc895
commit
8a6a1f448b
9 changed files with 108 additions and 28 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -106,4 +106,6 @@ plugin/WebAuthnLogin/
|
|||
plugin/UserOTPLogin/
|
||||
test*
|
||||
CreatePlugin/plugins/
|
||||
vendor/james-heinrich/getid3/demos/
|
||||
vendor/james-heinrich/getid3/demos/
|
||||
AVideoStorage/
|
||||
plugin/HLSOverlay/
|
|
@ -5,25 +5,36 @@ header("Content-Type: application/rss+xml;");
|
|||
$cacheFeedName = "feedCacheMRSS" . json_encode($_REQUEST);
|
||||
$lifetime = 43200;
|
||||
$feed = ObjectYPT::getCache($cacheFeedName, $lifetime);
|
||||
$link = "{$link}/mrss";
|
||||
if (empty($feed)) {
|
||||
_ob_start();
|
||||
echo'<?xml version="1.0" encoding="UTF-8"?>'; ?>
|
||||
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"
|
||||
xmlns:georss="http://www.georss.org/georss"
|
||||
xmlns:gml="http://www.opengis.net/gml">
|
||||
xmlns:gml="http://www.opengis.net/gml"
|
||||
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom" >
|
||||
<channel>
|
||||
<atom:link href="<?php echo $global['webSiteRootURL'] . ltrim($_SERVER["REQUEST_URI"], "/"); ?>" rel="self" type="application/rss+xml" />
|
||||
|
||||
<title><?php echo feedText($title); ?></title>
|
||||
<description><?php echo feedText($description); ?></description>
|
||||
<link><?php echo $link; ?></link>
|
||||
<image>
|
||||
<title><?php echo feedText($title); ?></title>
|
||||
<url><?php echo $logo; ?></url>
|
||||
<link><?php echo $link; ?></link>
|
||||
<width>144</width>
|
||||
<height>40</height>
|
||||
<description>AVideo version rss</description>
|
||||
</image>
|
||||
<link><?php echo $global['webSiteRootURL']; ?></link>
|
||||
|
||||
<language>en-us</language>
|
||||
<itunes:image href="<?php echo $logo; ?>" />
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
|
||||
<itunes:category text="Technology" />
|
||||
|
||||
<image>
|
||||
<title><?php echo feedText($title); ?></title>
|
||||
<url><?php echo $logo; ?></url>
|
||||
<link><?php echo $link; ?></link>
|
||||
<width>144</width>
|
||||
<height>40</height>
|
||||
<description>AVideo version rss</description>
|
||||
</image>
|
||||
<?php
|
||||
foreach ($rows as $row) {
|
||||
$video = Video::getVideoFromFileName($row['filename']);
|
||||
|
@ -36,18 +47,28 @@ if (empty($feed)) {
|
|||
foreach ($files as $value) {
|
||||
if ($value["type"] === "video" && file_exists($value['path'])) {
|
||||
$path_parts = pathinfo($value['path']);
|
||||
$value['mime'] = "video/{$path_parts['extension']}";
|
||||
if($path_parts['extension'] === 'm3u8'){
|
||||
$resp = VideoHLS::convertM3U8ToMP4($row['id']);
|
||||
if(!empty($resp)){
|
||||
$value['url'] = $resp['url'];
|
||||
$value['path'] = $resp['path'];
|
||||
$value['mime'] = "video/mp4";
|
||||
}
|
||||
}else{
|
||||
$value['mime'] = "video/{$path_parts['extension']}";
|
||||
}
|
||||
|
||||
$value['size'] = filesize($value['path']);
|
||||
// replace to validate
|
||||
$value['url'] = str_replace("http://", "https://", $value['url']);
|
||||
$enclosure = '<enclosure url="' . $value['url'] . '" length="' . $value['size'] . '" type="' . $value['mime'] . '" />';
|
||||
$enclosure = '<enclosure url="' . str_replace('&', '&', $value['url']) . '" length="' . $value['size'] . '" type="' . $value['mime'] . '" />';
|
||||
break;
|
||||
}
|
||||
} ?>
|
||||
<item>
|
||||
<title><?php echo feedText($row['title']); ?></title>
|
||||
<description><?php echo feedText($row['title']); ?></description>
|
||||
<link> <?php echo Video::getLink($row['id'], $row['clean_title']); ?></link>
|
||||
<link><![CDATA[<?php echo Video::getLink($row['id'], $row['clean_title']); ?>]]></link>
|
||||
<?php echo $enclosure; ?>
|
||||
<pubDate><?php echo date('r', strtotime($row['created'])); ?></pubDate>
|
||||
<guid isPermaLink="true"><?php echo Video::getLinkToVideo($row['id'], $row['clean_title'], false, "permalink"); ?></guid>
|
||||
|
@ -59,8 +80,6 @@ if (empty($feed)) {
|
|||
<media:description type="html"><![CDATA[<?php echo Video::htmlDescription($row['title']); ?>]]></media:description>
|
||||
<media:thumbnail url="<?php echo Video::getPoster($row['id']); ?>" />
|
||||
</media:content>
|
||||
<media:embed url="<?php echo str_replace('&', '&', Video::getLinkToVideo($row['id'], $row['clean_title'], true)); ?>"/>
|
||||
<media:status state="active" />
|
||||
</item>
|
||||
<?php
|
||||
} ?>
|
||||
|
|
|
@ -1152,6 +1152,7 @@ abstract class CacheHandler
|
|||
|
||||
if(isCommandLineInterface()){
|
||||
echo "public function setCache({$this->suffix}) name=".$name.PHP_EOL;
|
||||
//echo json_encode(debug_backtrace());
|
||||
}
|
||||
$return = ObjectYPT::setCacheGlobal($name, $value);
|
||||
/*
|
||||
|
@ -1172,6 +1173,7 @@ abstract class CacheHandler
|
|||
$name = $this->getCacheName($this->suffix);
|
||||
if(isCommandLineInterface()){
|
||||
echo "public function getCache($suffix) name=".$name.PHP_EOL;
|
||||
//echo json_encode(debug_backtrace());
|
||||
}
|
||||
if (isset($_getCache[$name])) {
|
||||
if ($logInfo) {
|
||||
|
|
|
@ -959,9 +959,9 @@ function getVideosURLAudio($fileName, $fileNameisThePath = false)
|
|||
return $files;
|
||||
}
|
||||
|
||||
function getVideosURL($fileName, $cache = true)
|
||||
function getVideosURL($fileName, $recreateCache = false)
|
||||
{
|
||||
return getVideosURL_V2($fileName); // disable this function soon
|
||||
return getVideosURL_V2($fileName, $recreateCache); // disable this function soon
|
||||
}
|
||||
|
||||
function getVideosURLMP4Only($fileName)
|
||||
|
|
|
@ -162,10 +162,27 @@ function getSelfUserAgent()
|
|||
{
|
||||
global $global, $AVideoStreamer_UA;
|
||||
$agent = $AVideoStreamer_UA . "_";
|
||||
$agent .= md5($global['salt']);
|
||||
$agent .= md5($global['salt'].date('i'));
|
||||
return $agent;
|
||||
}
|
||||
|
||||
function isSelfUserAgent()
|
||||
{
|
||||
global $global, $AVideoStreamer_UA;
|
||||
|
||||
// Generate the current and 1-minute previous user agent strings
|
||||
$currentAgent = $AVideoStreamer_UA . "_" . md5($global['salt'] . date('i'));
|
||||
$previousAgent = $AVideoStreamer_UA . "_" . md5($global['salt'] . date('i', strtotime('-1 minute')));
|
||||
|
||||
// Check if the provided user agent matches either the current or previous
|
||||
if ($_SERVER['HTTP_USER_AGENT'] === $currentAgent || $_SERVER['HTTP_USER_AGENT'] === $previousAgent) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function requestComesFromSameDomainAsMyAVideo()
|
||||
{
|
||||
global $global;
|
||||
|
|
|
@ -37,7 +37,6 @@ function get_ffprobe()
|
|||
|
||||
function convertVideoToMP3FileIfNotExists($videos_id, $forceTry = 0)
|
||||
{
|
||||
_error_log("convertVideoToMP3FileIfNotExists: start videos_id=$videos_id try=$forceTry ");
|
||||
global $global;
|
||||
if (!empty($global['disableMP3'])) {
|
||||
_error_log('convertVideoToMP3FileIfNotExists: $global[disableMP3] isset');
|
||||
|
@ -62,6 +61,7 @@ function convertVideoToMP3FileIfNotExists($videos_id, $forceTry = 0)
|
|||
}else {
|
||||
$f = convertVideoFileWithFFMPEGIsLockedInfo($mp3File);
|
||||
if ($f['isUnlocked']) {
|
||||
_error_log("convertVideoToMP3FileIfNotExists: start videos_id=$videos_id try=$forceTry ");
|
||||
$sources = getVideosURLOnly($video['filename'], false);
|
||||
if (!empty($sources)) {
|
||||
if(!empty($sources['m3u8'])){
|
||||
|
@ -137,14 +137,21 @@ function cleanupDownloadsDirectory($resolution = 720)
|
|||
}
|
||||
}
|
||||
|
||||
function m3u8ToMP4($input)
|
||||
function m3u8ToMP4($input, $makeItPermanent = false)
|
||||
{
|
||||
$videosDir = getVideosDir();
|
||||
$outputfilename = str_replace($videosDir, "", $input);
|
||||
$parts = explode("/", $outputfilename);
|
||||
$resolution = Video::getResolutionFromFilename($input);
|
||||
$outputfilename = $parts[0] . "_{$resolution}_.mp4";
|
||||
$outputpathDir = "{$videosDir}downloads/";
|
||||
$video_filename = $parts[count($parts)-2];
|
||||
if($makeItPermanent){
|
||||
$outputfilename = "index.mp4";
|
||||
$outputpathDir = "{$videosDir}{$video_filename}/";
|
||||
}else{
|
||||
$outputfilename = $video_filename . "_{$resolution}_.mp4";
|
||||
$outputpathDir = "{$videosDir}downloads/";
|
||||
}
|
||||
//var_dump($outputfilename, $parts, $outputpathDir);exit;
|
||||
make_path($outputpathDir);
|
||||
$outputpath = "{$outputpathDir}{$outputfilename}";
|
||||
$msg = '';
|
||||
|
@ -166,7 +173,7 @@ function m3u8ToMP4($input)
|
|||
$token = getToken(60);
|
||||
$filepath = addQueryStringParameter($filepath, 'globalToken', $token);
|
||||
} else {
|
||||
$filepath = escapeshellcmd($input);
|
||||
$filepath = escapeshellcmdURL($input);
|
||||
}
|
||||
|
||||
if (is_dir($filepath)) {
|
||||
|
@ -185,7 +192,13 @@ function m3u8ToMP4($input)
|
|||
_error_log($msg3);
|
||||
return ['error' => $error, 'msg' => $finalMsg];
|
||||
} else {
|
||||
return $return;
|
||||
return [
|
||||
'error' => false,
|
||||
'msg' => implode(', ', $return['output']),
|
||||
'path' => $return['toFileLocation'],
|
||||
'filename' => basename($return['toFileLocation']),
|
||||
'return' => $return
|
||||
];
|
||||
}
|
||||
} else {
|
||||
$msg = "downloadHLS: outputpath already exists ({$outputpath})";
|
||||
|
|
|
@ -1089,4 +1089,25 @@ function getVideosDirectoryUsageInfo() {
|
|||
'used_percentage' => $usedPercentageFormatted,
|
||||
'used_percentage_number' => $usedPercentage
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
function findMP4File($folderPath)
|
||||
{
|
||||
// Ensure the folder path ends with a slash
|
||||
$folderPath = addLastSlash($folderPath);
|
||||
|
||||
// Open the folder and iterate over files
|
||||
if (is_dir($folderPath)) {
|
||||
$files = scandir($folderPath);
|
||||
foreach ($files as $file) {
|
||||
// Check if the file has a .mp4 extension
|
||||
if (pathinfo($file, PATHINFO_EXTENSION) === 'mp4') {
|
||||
// Return the absolute path to the first .mp4 file found
|
||||
return $folderPath . $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Return false if no .mp4 file is found
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -501,3 +501,9 @@ function ddosProtection()
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
function escapeshellcmdURL(string $command)
|
||||
{
|
||||
return str_replace('\?', '?', escapeshellcmd($command));
|
||||
}
|
||||
|
||||
|
|
|
@ -48,8 +48,8 @@ class Live extends PluginAbstract
|
|||
$desc .= "<div class='alert alert-danger'>You MUST update your LiveUsers plugin to version 2.0 or greater</div>";
|
||||
}
|
||||
}
|
||||
$desc .= "<br><strong>Start Self hosted WebRTC server:</strong> <code>php {$global['systemRootPath']}plugin/Live/standAloneFiles/WebRTCServer/server.php</code> ";
|
||||
$desc .= "<br><small><a href='https://github.com/WWBN/AVideo/wiki/WebRTC-Server' target='_blank'><i class='fas fa-question-circle'></i> Help</a></small>";
|
||||
//$desc .= "<br><strong>Start Self hosted WebRTC server:</strong> <code>php {$global['systemRootPath']}plugin/Live/standAloneFiles/WebRTCServer/server.php</code> ";
|
||||
//$desc .= "<br><small><a href='https://github.com/WWBN/AVideo/wiki/WebRTC-Server' target='_blank'><i class='fas fa-question-circle'></i> Help</a></small>";
|
||||
return $desc;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue