Fixed errors

This commit is contained in:
Divarion-D
2025-12-09 21:44:11 +03:00
parent 8ef8ce771d
commit 5fe5576a92
4 changed files with 50 additions and 58 deletions
+1 -1
View File
@@ -562,7 +562,7 @@ if ($rStream['type'] == 1) {
$rFPS = '--';
}
$rStreamInfoText = "<table class='table-data nowrap' align='center'><tbody><tr><td class='double'>" . number_format($rTrack['stream_info']['bitrate'] / 1024, 0) . " Kbps</td><td style='color: #20a009;'><i class='mdi mdi-video' data-name='mdi-video'></i></td><td style='color: #20a009;'><i class='mdi mdi-volume-high' data-name='mdi-volume-high'></i></td>";
$rStreamInfoText = "<table class='table-data nowrap' align='center'><tbody><tr><td class='double'>" . number_format(intval($rTrack['stream_info']['bitrate']) / 1024, 0) . " Kbps</td><td style='color: #20a009;'><i class='mdi mdi-video' data-name='mdi-video'></i></td><td style='color: #20a009;'><i class='mdi mdi-volume-high' data-name='mdi-volume-high'></i></td>";
$rStreamInfoText .= "<td style='color: #20a009;'><i class='mdi mdi-layers' data-name='mdi-layers'></i></td></tr><tr><td class='double'>" . $rTrack['stream_info']['codecs']['video']['width'] . ' x ' . $rTrack['stream_info']['codecs']['video']['height'] . '</td><td>' . $rTrack['stream_info']['codecs']['video']['codec_name'] . '</td><td>' . $rTrack['stream_info']['codecs']['audio']['codec_name'] . '</td>';
$rStreamInfoText .= '<td>' . $rFPS . '</td></tr></tbody></table>';
+18 -12
View File
@@ -1471,24 +1471,32 @@ class CoreUtilities {
if (substr($rSource, 0, 2) == 's:') {
$rSplit = explode(':', $rSource, 3);
$rServerID = intval($rSplit[1]);
$rSourcePath = $rSplit[2]; // File path
if ($rServerID != SERVER_ID) {
$rSourcePath = self::$rServers[$rServerID]['api_url'] . '&action=getFile&filename=' . urlencode($rSplit[2]);
} else {
$rSourcePath = $rSplit[2];
// File on another server - needs to be retrieved via API.
if (is_array(self::$rServers) && isset(self::$rServers[$rServerID])) {
$rSourcePath = self::$rServers[$rServerID]['api_url'] . '&action=getFile&filename=' . urlencode($rSplit[2]);
} else {
// Server not found, use local path.
$rSourcePath = $rSplit[2];
}
}
} else {
$rServerID = SERVER_ID;
$rSourcePath = $rSource;
}
if ($rServerID == SERVER_ID && $rStream['stream_info']['movie_symlink'] == 1) {
if ($rServerID == SERVER_ID && intval($rStream['stream_info']['movie_symlink']) == 1) {
$rExtension = pathinfo($rSource)['extension'];
if (strlen($rExtension) != 0) {
} else {
if (strlen($rExtension) == 0) {
$rExtension = 'mp4';
}
// Create symlink
$rCommand = 'ln -sfn ' . escapeshellarg($rSourcePath) . ' "' . CREATED_PATH . intval($rStreamID) . '_' . $rMD5 . '.' . escapeshellcmd($rExtension) . '" >/dev/null 2>/dev/null & echo $! > "' . CREATED_PATH . intval($rStreamID) . '_' . $rMD5 . '.pid"';
} else {
$rStream['stream_info']['transcode_attributes'] = json_decode($rStream['stream_info']['profile_options'], true);
if (!is_array($rStream['stream_info']['transcode_attributes'])) {
$rStream['stream_info']['transcode_attributes'] = array();
}
$rLogoOptions = (isset($rStream['stream_info']['transcode_attributes'][16]) && !$rLoopback ? $rStream['stream_info']['transcode_attributes'][16]['cmd'] : '');
$rGPUOptions = (isset($rStream['stream_info']['transcode_attributes']['gpu']) ? $rStream['stream_info']['transcode_attributes']['gpu']['cmd'] : '');
$rInputCodec = '';
@@ -1501,16 +1509,14 @@ class CoreUtilities {
}
}
$rCommand = ((isset($rStream['stream_info']['transcode_attributes']['gpu']) ? self::$rFFMPEG_GPU : self::$rFFMPEG_CPU)) . ' -y -nostdin -hide_banner -loglevel ' . ((self::$rSettings['ffmpeg_warnings'] ? 'warning' : 'error')) . ' -err_detect ignore_err {GPU} -fflags +genpts -async 1 -i {STREAM_SOURCE} {LOGO} ';
if (array_key_exists('-acodec', $rStream['stream_info']['transcode_attributes'])) {
} else {
if (!array_key_exists('-acodec', $rStream['stream_info']['transcode_attributes'])) {
$rStream['stream_info']['transcode_attributes']['-acodec'] = 'copy';
}
if (array_key_exists('-vcodec', $rStream['stream_info']['transcode_attributes'])) {
} else {
if (!array_key_exists('-vcodec', $rStream['stream_info']['transcode_attributes'])) {
$rStream['stream_info']['transcode_attributes']['-vcodec'] = 'copy';
}
if (!isset($rStream['stream_info']['transcode_attributes']['gpu'])) {
} else {
if (isset($rStream['stream_info']['transcode_attributes']['gpu'])) {
$rCommand .= '-gpu ' . intval($rStream['stream_info']['transcode_attributes']['gpu']['device']) . ' ';
}
$rCommand .= implode(' ', self::parseTranscode($rStream['stream_info']['transcode_attributes'])) . ' ';
+9 -6
View File
@@ -65,7 +65,7 @@ class API {
return !empty($rData['stream_display_name']) || isset($rData['review']) || isset($_FILES['m3u_file']);
case 'processEpisode':
return !empty($rData['series']) && is_numeric($rData['season_num']) && is_numeric($rData['episode']);
return !empty($rData['series']) && is_numeric($rData['season_num']) && (isset($rData['multi']) || is_numeric($rData['episode']));
case 'processSeries':
return !empty($rData['title']);
@@ -564,7 +564,12 @@ class API {
$rArray['stream_source'] = $rPlaylist;
$rArray['series_no'] = intval($rData['series_no']);
} else {
$rArray['stream_source'] = $rData['video_files'];
// video_files comes as a JSON string from the form, it needs to be decoded
$rVideoFiles = $rData['video_files'];
if (is_string($rVideoFiles)) {
$rVideoFiles = json_decode($rVideoFiles, true);
}
$rArray['stream_source'] = is_array($rVideoFiles) ? $rVideoFiles : [];
$rArray['series_no'] = 0;
}
@@ -681,15 +686,13 @@ class API {
}
}
if (!$rReencode) {
} else {
if ($rReencode) {
APIRequest(array('action' => 'stream', 'sub' => 'stop', 'stream_ids' => array($rInsertID)));
self::$db->query("UPDATE `streams_servers` SET `pids_create_channel` = '[]', `cchannel_rsources` = '[]' WHERE `stream_id` = ?;", $rInsertID);
CoreUtilities::queueChannel($rInsertID);
}
if (!$rRestart) {
} else {
if ($rRestart) {
APIRequest(array('action' => 'stream', 'sub' => 'start', 'stream_ids' => array($rInsertID)));
}
+22 -39
View File
@@ -36,56 +36,46 @@ if (posix_getpwuid(posix_geteuid())['name'] == 'xc_vm') {
exec('kill -9 ' . $rCurrentPID);
}
}
echo 'Processing source: ' . $rSource . '...' . "\n";
$rItemPID = CoreUtilities::createChannelItem($rStreamID, $rSource);
$db->close_mysql();
while (CoreUtilities::isPIDRunning(SERVER_ID, $rItemPID, CoreUtilities::$rFFMPEG_CPU)) {
sleep(1);
// Only wait if a transcoding process is running.
if ($rItemPID > 0) {
while (CoreUtilities::isPIDRunning(SERVER_ID, $rItemPID, CoreUtilities::$rFFMPEG_CPU)) {
sleep(1);
}
}
$db->db_connect();
@unlink(CREATED_PATH . intval($rStreamID) . '_' . $rMD5 . '.pid');
@unlink(CREATED_PATH . intval($rStreamID) . '_' . $rMD5 . '.errors');
$rServerInfo['cchannel_rsources'][] = $rSource;
$db->db_connect();
$db->query(
'UPDATE `streams_servers` SET `cchannel_rsources` = ? WHERE `server_stream_id` = ?',
json_encode($rServerInfo['cchannel_rsources']),
$rServerInfo['server_stream_id']
);
if (file_exists(CREATED_PATH . intval($rStreamID) . '_' . $rMD5 . '.pid')) {
unlink(CREATED_PATH . intval($rStreamID) . '_' . $rMD5 . '.pid');
}
if (file_exists(CREATED_PATH . intval($rStreamID) . '_' . $rMD5 . '.errors')) {
unlink(CREATED_PATH . intval($rStreamID) . '_' . $rMD5 . '.errors');
}
$db->query('UPDATE `streams_servers` SET `cchannel_rsources` = ? WHERE `server_stream_id` = ?', json_encode($rServerInfo['cchannel_rsources']), $rServerInfo['server_stream_id']);
}
$rOutputList = '';
foreach ($rStreamInfo['stream_source'] as $rSource) {
// Extract server and path from source.
if (substr($rSource, 0, 2) == 's:') {
$rSplit = explode(':', $rSource, 3);
$rServerID = intval($rSplit[1]);
$rSourcePath = $rSplit[2];
} else {
$rServerID = SERVER_ID;
$rSourcePath = $rSource;
}
if ($rServerID == SERVER_ID && $rStreamInfo['movie_symlink'] == 1) {
$rExtension = pathinfo($rSource)['extension'];
if (strlen($rExtension) == 0) {
$rExtension = 'mp4';
// If movie_symlink == 1 and the file is local, use the direct original path.
if ($rServerID == SERVER_ID && intval($rStreamInfo['movie_symlink']) == 1) {
if (file_exists($rSourcePath)) {
$rOutputList .= "file '" . $rSourcePath . "'" . "\n";
}
} else {
$rExtension = 'ts';
}
if (file_exists(CREATED_PATH . $rStreamID . '_' . md5($rSource) . '.' . $rExtension)) {
$rOutputList .= "file '" . CREATED_PATH . $rStreamID . '_' . md5($rSource) . '.' . $rExtension . "'" . "\n";
// Uses transcoded file in CREATED_PATH
$rCreatedFile = CREATED_PATH . $rStreamID . '_' . md5($rSource) . '.ts';
if (file_exists($rCreatedFile)) {
$rOutputList .= "file '" . $rCreatedFile . "'" . "\n";
}
}
}
@@ -125,14 +115,7 @@ if (posix_getpwuid(posix_geteuid())['name'] == 'xc_vm') {
file_put_contents(CREATED_PATH . $rStreamID . '_.info', json_encode($rReturn, JSON_UNESCAPED_UNICODE));
echo 'Completed!' . "\n";
$createFile = CREATED_PATH . $rStreamID . '_.create';
if (file_exists($createFile)) {
$savedPID = intval(file_get_contents($createFile));
if ($savedPID === getmypid()) {
unlink($createFile);
}
}
@unlink(CREATED_PATH . $rStreamID . '_.create', getmypid());
}
} else {
echo "Channel doesn't exist on this server." . "\n";