diff --git a/css/styles.css b/css/styles.css
index 93577a0..86e462d 100644
--- a/css/styles.css
+++ b/css/styles.css
@@ -641,7 +641,7 @@ img {
.hero-video-info {
position: absolute;
- bottom: 70px;
+ bottom: 0;
left: 0;
width: 100%;
background: linear-gradient(transparent, rgba(0, 0, 0, 0.7));
diff --git a/direct.php b/direct.php
index cd55d09..30f8768 100644
--- a/direct.php
+++ b/direct.php
@@ -14,8 +14,9 @@ require_once 'includes/structured-data.php';
// Appliquer les en-têtes de sécurité
setSecurityHeaders();
-// Vérifier s'il y a un direct en cours
-$liveStream = getLiveStream();
+// Récupérer la vidéo à afficher selon le mode configuré
+$displayData = getDisplayVideo();
+$video = $displayData['video'];
?>
@@ -113,40 +114,54 @@ $liveStream = getLiveStream();
-
- EN DIRECT
+
+
+
+
+
-
-
+
-
+
-
![<?php echo $liveStream['channel']; ?>](<?php echo $liveStream['channelAvatar']; ?>)
+
![<?php echo $video['channel']; ?>](<?php echo $video['channelAvatar']; ?>)
-
+
-
+
-
+
diff --git a/includes/config.default.php b/includes/config.default.php
index 10322d6..c104575 100644
--- a/includes/config.default.php
+++ b/includes/config.default.php
@@ -98,6 +98,15 @@ if (!defined('CACHE_DURATION')) define('CACHE_DURATION', 3600); // En secondes (
// Compte pour les lives
if (!defined('LIVE_ACCOUNT_NAME')) define('LIVE_ACCOUNT_NAME', 'admin');
+// Mode d'affichage de la section live/vidéo : 'auto' (détection automatique du direct) ou 'static' (vidéo fixe)
+if (!defined('LIVE_MODE')) define('LIVE_MODE', 'auto');
+
+// ID de la vidéo à afficher en mode 'static' (ex: 'abc123-def456-ghi789')
+if (!defined('STATIC_VIDEO_ID')) define('STATIC_VIDEO_ID', '');
+
+// Texte du badge à afficher en mode 'static' (ex: 'À LA UNE', 'REPLAY', etc.)
+if (!defined('STATIC_VIDEO_BADGE')) define('STATIC_VIDEO_BADGE', 'À LA UNE');
+
// Tags pour filtrer les vidéos selon les catégories
if (!defined('TAG_SHORT')) define('TAG_SHORT', 'short');
diff --git a/includes/config.local.php.sample b/includes/config.local.php.sample
index 6686af9..32b3804 100644
--- a/includes/config.local.php.sample
+++ b/includes/config.local.php.sample
@@ -26,6 +26,20 @@
// Compte PeerTube pour les lives
// define('LIVE_ACCOUNT_NAME', 'admin');
+// Mode d'affichage de la section live/vidéo
+// 'auto' : Détection automatique du direct en cours
+// 'static' : Afficher une vidéo spécifique (définie par STATIC_VIDEO_ID)
+// define('LIVE_MODE', 'auto');
+
+// ID de la vidéo à afficher en mode 'static'
+// Pour trouver l'ID : https://votre-instance.fr/videos/watch/ID_DE_LA_VIDEO
+// Exemple : '9c9de5e8-0a1e-484a-b099-e80766180a6d'
+// define('STATIC_VIDEO_ID', '');
+
+// Texte du badge à afficher en mode 'static'
+// Exemples : 'À LA UNE', 'REPLAY', 'VIDÉO SPÉCIALE', etc.
+// define('STATIC_VIDEO_BADGE', 'À LA UNE');
+
// =========================================
// Filtres et tags
// =========================================
diff --git a/includes/config.php b/includes/config.php
index 617be78..2e04073 100644
--- a/includes/config.php
+++ b/includes/config.php
@@ -397,6 +397,67 @@ function getLiveStream() {
return !empty($activeLives) ? reset($activeLives) : null;
}
+/**
+ * Récupère une vidéo spécifique par son ID
+ *
+ * @param string $videoId ID de la vidéo
+ * @return array|null Informations sur la vidéo ou null si non trouvée
+ */
+function getVideoById($videoId) {
+ if (empty($videoId)) {
+ return null;
+ }
+
+ $data = callPeerTubeApi('videos/' . $videoId);
+
+ // Vérifier si on a des résultats
+ if (empty($data)) {
+ return null;
+ }
+
+ // Formater les données de la vidéo
+ $videoData = formatVideosData([$data]);
+
+ // Retourner la première vidéo formatée
+ return !empty($videoData) ? reset($videoData) : null;
+}
+
+/**
+ * Récupère la vidéo à afficher selon le mode configuré (auto ou static)
+ *
+ * En mode 'auto' : détecte automatiquement un direct en cours
+ * En mode 'static' : affiche une vidéo spécifique définie par STATIC_VIDEO_ID
+ *
+ * @return array|null Tableau avec 'video' (données de la vidéo ou null), 'mode' ('auto'|'static'), 'isLive' (bool), 'badge' (texte du badge)
+ */
+function getDisplayVideo() {
+ $mode = defined('LIVE_MODE') ? LIVE_MODE : 'auto';
+
+ if ($mode === 'static') {
+ // Mode vidéo statique
+ $videoId = defined('STATIC_VIDEO_ID') ? STATIC_VIDEO_ID : '';
+ $video = getVideoById($videoId);
+ $badge = defined('STATIC_VIDEO_BADGE') ? STATIC_VIDEO_BADGE : 'À LA UNE';
+
+ return [
+ 'video' => $video,
+ 'mode' => 'static',
+ 'isLive' => false,
+ 'badge' => $badge
+ ];
+ } else {
+ // Mode automatique (détection de direct)
+ $video = getLiveStream();
+
+ return [
+ 'video' => $video,
+ 'mode' => 'auto',
+ 'isLive' => $video !== null,
+ 'badge' => 'DIRECT'
+ ];
+ }
+}
+
/**
* Formate les données brutes des vidéos venant de l'API
*
diff --git a/index.php b/index.php
index dc65f41..41d622f 100644
--- a/index.php
+++ b/index.php
@@ -105,39 +105,55 @@ setSecurityHeaders();
Diffusion en direct
- DIRECT
+
+
+
+
+
-
- Lecteur vidéo pour la diffusion en direct de
+
+ Lecteur vidéo pour de
-
+
-
+
-
![Avatar de la chaîne <?php echo htmlspecialchars($liveStream['channel']); ?>](<?php echo $liveStream['channelAvatar']; ?>)
+
![Avatar de la chaîne <?php echo htmlspecialchars($video['channel']); ?>](<?php echo $video['channelAvatar']; ?>)
-
+