First commit
This commit is contained in:
195
.ash_history
Normal file
195
.ash_history
Normal file
@@ -0,0 +1,195 @@
|
||||
apk add nano docker curl wget
|
||||
nano docker-compose.yml
|
||||
wget https://rr1---sn-cv0tb0xn-nmce.googlevideo.com/videoplayback?expire=1775606696&ei=SEfVadCsDdSv0u8PjL6RqQE&ip=45.93.45.182&id=o-AHxkrp8z86DyimYL4j4SE-cexyb6BZMkdWMxh-qzLfN1&itag=18&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=au%2Cau&bui=AUUZDGL7wLqbHE9WID58bEvAxu6lHPqxonUHl-dyAy1UZqzbiD6y6Pg6JSY0nO0WweCYGbkDWRhMHqqy&spc=jlWavVp5J1DFbMd9E12QpRVIHirXBWxCpgjIwkfNJpU4nbJrloq7jvnxqgJ1WS4Hsl0&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&cnr=14&ratebypass=yes&dur=110.898&lmt=1658907839264578&fexp=51565115,51565682&c=ANDROID&txp=5318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AHEqNM4wRgIhAP15kI8AwJU8Bc-PwMq5hoG0kYloyjIEtgZWUHMxcN0XAiEAng1bnnuiQYN13OiTebG4u_WnlVlKnCGxB_BaWeo6jwY%3D&redirect_counter=1&rm=sn-h5qzy7s&rrc=104&req_id=16f1aa8a55b1a3ee&cms_redirect=yes&cps=224&ipbypass=yes&met=1775585099,&mh=iU&mip=2001:861:3e81:b3c0:996c:8e1e:f720:cc34&mm=31&mn=sn-cv0tb0xn-nmce&ms=au&mt=1775584651&mv=m&mvi=1&pl=45&lsparams=cps,ipbypass,met,mh,mip,mm,mn,ms,mv,mvi,pl,rms&lsig=APaTxxMwRgIhAIC_rugLss_vGXiK-sTiUZMjM_imQj2h_xcIS5z23XtTAiEAg9Q_PBXcHXtF3uBd4gcW_1rrg7lprxpI25TIAql7TL4%3D
|
||||
ls
|
||||
wget 'https://rr1---sn-cv0tb0xn-nmce.googlevideo.com/videoplayback?expire=1775606696&ei=SEfVadCsDdSv0u8PjL6RqQE&ip=45.93.45.182&id=o-AHxkrp8z86DyimYL4j4SE-cexyb6BZMkdWMxh-qzLfN1&itag=18&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=au%2Cau&bui=AUUZDGL7wLqbHE9WID58bEvAxu6lHPqxonUHl-dyAy1UZqzbiD6y6Pg6JSY0nO0WweCYGbkDWRhMHqqy&spc=jlWavVp5J1DFbMd9E12QpRVIHirXBWxCpgjIwkfNJpU4nbJrloq7jvnxqgJ1WS4Hsl0&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&cnr=14&ratebypass=yes&dur=110.898&lmt=1658907839264578&fexp=51565115,51565682&c=ANDROID&txp=5318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AHEqNM4wRgIhAP15kI8AwJU8Bc-PwMq5hoG0kYloyjIEtgZWUHMxcN0XAiEAng1bnnuiQYN13OiTebG4u_WnlVlKnCGxB_BaWeo6jwY%3D&redirect_counter=1&rm=sn-h5qzy7s&rrc=104&req_id=16f1aa8a55b1a3ee&cms_redirect=yes&cps=224&ipbypass=yes&met=1775585099,&mh=iU&mip=2001:861:3e81:b3c0:996c:8e1e:f720:cc34&mm=31&mn=sn-cv0tb0xn-nmce&ms=au&mt=1775584651&mv=m&mvi=1&pl=45&lsparams=cps,ipbypass,met,mh,mip,mm,mn,ms,mv,mvi,pl,rms&lsig=APaTxxMwRgIhAIC_rugLss_vGXiK-sTiUZMjM_imQj2h_xcIS5z23XtTAiEAg9Q_PBXcHXtF3uBd4gcW_1rrg7lprxpI25TIAql7TL4%3D'
|
||||
ls
|
||||
file videoplayback\?expire=1775606696\&ei=SEfVadCsDdSv0u8PjL6RqQE\&ip=45.93.45.182\&id=o-AHxkrp8z86DyimYL4j4SE-cexyb6BZMkdWMxh-qzLfN1\&itag=18\&source=youtube\&requiressl=yes\&xpc=EgVo2aDSNQ==\&rms=au,au\&bui=AUUZDGL7wLqbHE9WID58bEvAxu6lHPqxonUHl-dyAy
|
||||
apk add docker
|
||||
apk add docker§compose
|
||||
apk add docker-compose file
|
||||
file videoplayback\?expire=1775606696\&ei=SEfVadCsDdSv0u8PjL6RqQE\&ip=45.93.45.182\&id=o-AHxkrp8z86DyimYL4j4SE-cexyb6BZMkdWMxh-qzLfN1\&itag=18\&source=youtube\&requiressl=yes\&xpc=EgVo2aDSNQ==\&rms=au,au\&bui=AUUZDGL7wLqbHE9WID58bEvAxu6lHPqxonUHl-dyAy
|
||||
mv videoplayback\?expire=1775606696\&ei=SEfVadCsDdSv0u8PjL6RqQE\&ip=45.93.45.182\&id=o-AHxkrp8z86DyimYL4j4SE-cexyb6BZMkdWMxh-qzLfN1\&itag=18\&source=youtube\&requiressl=yes\&xpc=EgVo2aDSNQ==\&rms=au,au\&bui=AUUZDGL7wLqbHE9WID58bEvAxu6lHPqxonUHl-dyAy video.mp4
|
||||
ls
|
||||
rm -rf wget-log
|
||||
clear
|
||||
ls
|
||||
nano nginx.conf
|
||||
mkdir www
|
||||
nano www/index.html
|
||||
apk add apache-utils
|
||||
apk add apache2-utils
|
||||
htpasswd -nbB admin camera123
|
||||
nano htpasswd
|
||||
docker compose pull
|
||||
rc-update add docker
|
||||
service docker start
|
||||
docker compose pull
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
sudo
|
||||
apk add sudo
|
||||
curl -fsSL https://tailscale.com/install.sh | sh && sudo tailscale up --auth-key=tskey-auth-kXz31LTcww11CNTRL-iVscNrHAEE5HF2M6z4G3F5NjgM6Zznaaa
|
||||
docker compose up
|
||||
clear
|
||||
> www/index.html
|
||||
nano www/index.html
|
||||
> nginx.conf
|
||||
nano nginx.conf
|
||||
nano docker-compose.yml
|
||||
> docker-compose.yml
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
cat docker-compose.yml
|
||||
nano docker-compose.yml
|
||||
clear
|
||||
cat nginx.conf
|
||||
cat www/index.html
|
||||
clear
|
||||
cat docker-compose.yml
|
||||
clear
|
||||
nano nginx.conf
|
||||
> nginx.conf
|
||||
nano nginx.conf
|
||||
> www/index.html
|
||||
nano www/index.html
|
||||
docker compose up
|
||||
nano nginx.conf
|
||||
docker compose up
|
||||
clear
|
||||
> docker-compose.yml
|
||||
> nginx.conf
|
||||
> www/index.html
|
||||
nano docker-compose.yml
|
||||
nano nginx.conf
|
||||
nano www/index.html
|
||||
docker compose up
|
||||
clear
|
||||
docker compose up
|
||||
clear
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
clear
|
||||
> docker-compose.yml
|
||||
> nginx.conf
|
||||
> www/index.html
|
||||
nano nginx.conf
|
||||
nano docker-compose.yml
|
||||
nano www/index.html
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
> docker-compose.yml
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
> docker-compose.yml
|
||||
nano docker-compose.yml &
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
nano nginx.conf
|
||||
nano www/index.html
|
||||
nano nginx.conf
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
clear
|
||||
nano docker-compose.yml
|
||||
clear
|
||||
> docker-compose.yml
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
nano nginx.conf
|
||||
nano docker-compose.yml
|
||||
nano nginx.conf
|
||||
nano docker-compose.yml
|
||||
nano nginx.conf
|
||||
docker compose up
|
||||
clear
|
||||
nano docker-compose.yml
|
||||
nano nginx.conf
|
||||
docker compose up
|
||||
cat nginx.conf
|
||||
nano docker-compose.yml
|
||||
nano www/index.html
|
||||
docker compose up -it lab-web ash
|
||||
docker compose up lab-web ash
|
||||
cat docker-compose.yml
|
||||
docker compose up nginx -it ash
|
||||
docker compose up nginx ash
|
||||
docker compose exec -it nginx bash
|
||||
docker compose up -d
|
||||
docker compose exec -it nginx bash
|
||||
docker compose exec -it nginx ash
|
||||
nano www/index.html
|
||||
docker compose up
|
||||
nano www/index.html
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
nano www/index.html
|
||||
nano docker-compose.yml
|
||||
nano www/index.html
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
nano www/index.html
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
nano www/index.html
|
||||
docker compose up
|
||||
nano www/index.html
|
||||
docker compose up
|
||||
nano www/index.html
|
||||
docker compose up
|
||||
nano www/index.html
|
||||
nano test.html
|
||||
docker compose up
|
||||
ls www
|
||||
mv test.html www/
|
||||
docker compose up
|
||||
> www/test.html
|
||||
nano www/test.html
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
nano nginx.conf
|
||||
docker compose up
|
||||
nano nginx.conf
|
||||
clear
|
||||
rm -rf *
|
||||
touch Dockerfile nginx.conf docker-compose.yml stream.sh index.html
|
||||
history
|
||||
wget wget 'https://rr1---sn-cv0tb0xn-nmce.googlevideo.com/videoplayback?expire=1775606696&ei=SEfVadCsDdSv0u8PjL6RqQE&ip=45.93.45.182&id=o-AHxkrp8z86DyimYL4j4SE-cexyb6BZMkdWMxh-qzLfN1&itag=18&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=au%2Cau&bui=AUUZDGL7wLqbHE9WID58bEvAxu6lHPqxonUHl-dyAy1UZqzbiD6y6Pg6JSY0nO0WweCYGbkDWRhMHqqy&spc=jlWavVp5J1DFbMd9E12QpRVIHirXBWxCpgjIwkfNJpU4nbJrloq7jvnxqgJ1WS4Hsl0&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&cnr=14&ratebypass=yes&dur=110.898&lmt=1658907839264578&fexp=51565115,51565682&c=ANDROID&txp=5318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AHEqNM4wRgIhAP15kI8AwJU8Bc-PwMq5hoG0kYloyjIEtgZWUHMxcN0XAiEAng1bnnuiQYN13OiTebG4u_WnlVlKnCGxB_BaWeo6jwY%3D&redirect_counter=1&rm=sn-h5qzy7s&rrc=104&req_id=16f1aa8a55b1a3ee&cms_redirect=yes&cps=224&ipbypass=yes&met=1775585099,&mh=iU&mip=2001:861:3e81:b3c0:996c:8e1e:f720:cc34&mm=31&mn=sn-cv0tb0xn-nmce&ms=au&mt=1775584651&mv=m&mvi=1&pl=45&lsparams=cps,ipbypass,met,mh,mip,mm,mn,ms,mv,mvi,pl,rms&lsig=APaTxxMwRgIhAIC_rugLss_vGXiK-sTiUZMjM_imQj2h_xcIS5z23XtTAiEAg9Q_PBXcHXtF3uBd4gcW_1rrg7lprxpI25TIAql7TL4%3D'
|
||||
mv videoplayback\?expire=1775606696\&ei=SEfVadCsDdSv0u8PjL6RqQE\&ip=45.93.45.182\&id=o-AHxkrp8z86DyimYL4j4SE-cexyb6BZMkdWMxh-qzLfN1\&itag=18\&source=youtube\&requiressl=yes\&xpc=EgVo2aDSNQ==\&rms=au,au\&bui=AUUZDGL7wLqbHE9WID58bEvAxu6lHPqxonUHl-dyAy video.mp4
|
||||
ls
|
||||
nano Dockerfile
|
||||
nano stream.sh
|
||||
nano nginx.conf
|
||||
nano index.html
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
nano docker-compose.yml
|
||||
> docker-compose.yml
|
||||
nano index.html
|
||||
nano docker-compose.yml
|
||||
docker compose up
|
||||
> index.html
|
||||
nano index.html
|
||||
nano stream.sh
|
||||
> stream.sh
|
||||
nano stream.sh
|
||||
docker compose up
|
||||
docker compose up --build
|
||||
> index.html
|
||||
nano index.html
|
||||
docker compose up --build
|
||||
ls
|
||||
git init
|
||||
apk add git
|
||||
git init
|
||||
git remote add origin https://git.phorge.fr/l-nmch/fake-cam.git
|
||||
git add .
|
||||
1
.docker/buildx/.buildNodeID
Normal file
1
.docker/buildx/.buildNodeID
Normal file
@@ -0,0 +1 @@
|
||||
734be07c6201ad52
|
||||
0
.docker/buildx/.lock
Normal file
0
.docker/buildx/.lock
Normal file
1
.docker/buildx/activity/default
Normal file
1
.docker/buildx/activity/default
Normal file
@@ -0,0 +1 @@
|
||||
2026-04-07T20:10:06Z
|
||||
1
.docker/buildx/current
Normal file
1
.docker/buildx/current
Normal file
@@ -0,0 +1 @@
|
||||
{"Key":"unix:///var/run/docker.sock","Name":"","Global":false}
|
||||
1
.docker/buildx/refs/__group__/lf7fzh1qmgnxbcwc0a8sq28xi
Normal file
1
.docker/buildx/refs/__group__/lf7fzh1qmgnxbcwc0a8sq28xi
Normal file
@@ -0,0 +1 @@
|
||||
{"Targets":["default"],"Refs":["ud3p3xailusum5hkcvrd6lwey"]}
|
||||
1
.docker/buildx/refs/__group__/r0mbu35h90r5djfiscyl2am8z
Normal file
1
.docker/buildx/refs/__group__/r0mbu35h90r5djfiscyl2am8z
Normal file
@@ -0,0 +1 @@
|
||||
{"Targets":["default"],"Refs":["i3dnnaro1kx9ajzcc5jcg4k1d"]}
|
||||
1
.docker/buildx/refs/__group__/yewcjuxask0xu0wo7ofcjixeg
Normal file
1
.docker/buildx/refs/__group__/yewcjuxask0xu0wo7ofcjixeg
Normal file
@@ -0,0 +1 @@
|
||||
{"Targets":["default"],"Refs":["yyiuzc7sp70iv143lousa3elz"]}
|
||||
@@ -0,0 +1 @@
|
||||
{"Target":"webcam-sim","LocalPath":"/root","DockerfilePath":"/root/Dockerfile","GroupRef":"r0mbu35h90r5djfiscyl2am8z"}
|
||||
@@ -0,0 +1 @@
|
||||
{"Target":"webcam-sim","LocalPath":"/root","DockerfilePath":"/root/Dockerfile","GroupRef":"lf7fzh1qmgnxbcwc0a8sq28xi"}
|
||||
@@ -0,0 +1 @@
|
||||
{"Target":"webcam-sim","LocalPath":"/root","DockerfilePath":"/root/Dockerfile","GroupRef":"yewcjuxask0xu0wo7ofcjixeg"}
|
||||
1
.docker/buildx/refs/version
Normal file
1
.docker/buildx/refs/version
Normal file
@@ -0,0 +1 @@
|
||||
2
|
||||
14
Dockerfile
Normal file
14
Dockerfile
Normal file
@@ -0,0 +1,14 @@
|
||||
FROM nginx:alpine
|
||||
|
||||
# Installation de FFmpeg
|
||||
RUN apk add --no-cache ffmpeg
|
||||
|
||||
# Configuration
|
||||
COPY nginx.conf /etc/nginx/nginx.conf
|
||||
COPY index.html /usr/share/nginx/html/index.html
|
||||
COPY stream.sh /stream.sh
|
||||
|
||||
RUN chmod +x /stream.sh && mkdir -p /usr/share/nginx/html/hls
|
||||
|
||||
EXPOSE 80
|
||||
CMD ["/stream.sh"]
|
||||
14
docker-compose.yml
Normal file
14
docker-compose.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
services:
|
||||
webcam-sim:
|
||||
build: .
|
||||
container_name: fake-webcam-stream
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:80"
|
||||
volumes:
|
||||
- ./video.mp4:/video.mp4:ro
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '1.0'
|
||||
memory: 512M
|
||||
112
index.html
Normal file
112
index.html
Normal file
@@ -0,0 +1,112 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>IP CAMERA</title>
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body {
|
||||
background: #1a1a1a;
|
||||
font-family: "Consolas", "Monaco", "Courier New", monospace;
|
||||
color: #00ff00;
|
||||
display: flex; justify-content: center; align-items: center;
|
||||
height: 100vh; overflow: hidden;
|
||||
-webkit-user-select: none; user-select: none;
|
||||
}
|
||||
.cam-frame {
|
||||
position: relative;
|
||||
width: 512px; height: 512px;
|
||||
border: 2px solid #555;
|
||||
background: #000;
|
||||
box-shadow: inset 0 0 8px rgba(0,0,0,0.9);
|
||||
}
|
||||
video {
|
||||
width: 100%; height: 100%;
|
||||
object-fit: contain; /* Conserve le ratio, ajoute les barres noires typiques */
|
||||
display: block;
|
||||
}
|
||||
.osd {
|
||||
position: absolute; top: 0; left: 0; width: 100%; height: 100%;
|
||||
pointer-events: none;
|
||||
padding: 6px;
|
||||
font-size: 11px;
|
||||
line-height: 1.2;
|
||||
text-shadow: 1px 1px 0 #000;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
.osd-tl { position: absolute; top: 6px; left: 6px; color: #0f0; }
|
||||
.osd-tr { position: absolute; top: 6px; right: 6px; color: #f00; display: flex; align-items: center; gap: 4px; }
|
||||
.osd-bl { position: absolute; bottom: 6px; left: 6px; color: #0f0; }
|
||||
.rec-dot { display: inline-block; width: 7px; height: 7px; background: #f00; animation: blink 1s step-start infinite; }
|
||||
@keyframes blink { 50% { opacity: 0; } }
|
||||
|
||||
#loader {
|
||||
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
|
||||
background: #111; border: 1px solid #444;
|
||||
padding: 8px 12px; font-size: 12px; color: #0f0;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.hidden { opacity: 0; pointer-events: none; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="cam-frame">
|
||||
<video id="stream" autoplay muted playsinline disablepictureinpicture disableRemotePlayback></video>
|
||||
<div class="osd">
|
||||
<div class="osd-tl">CAM-01 | 512x512<br><span id="clock">00:00:00</span></div>
|
||||
<div class="osd-tr"><span class="rec-dot"></span> REC</div>
|
||||
<div class="osd-bl">H.264 | 1500K | LIVE</div>
|
||||
</div>
|
||||
<div id="loader">CONNECTING...</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
|
||||
<script>
|
||||
const video = document.getElementById('stream');
|
||||
const loader = document.getElementById('loader');
|
||||
const clockEl = document.getElementById('clock');
|
||||
const hlsUrl = '/hls/stream.m3u8';
|
||||
|
||||
// Horloge système brute (style caméra IP)
|
||||
setInterval(() => {
|
||||
const now = new Date();
|
||||
clockEl.textContent = now.toLocaleTimeString('en-GB');
|
||||
}, 1000);
|
||||
|
||||
const hideLoader = () => loader.classList.add('hidden');
|
||||
|
||||
if (Hls.isSupported()) {
|
||||
const hls = new Hls({
|
||||
enableWorker: true,
|
||||
lowLatencyMode: true,
|
||||
startLevel: -1,
|
||||
maxBufferLength: 5,
|
||||
maxMaxBufferLength: 10,
|
||||
liveSyncDurationCount: 2,
|
||||
liveMaxLatencyDurationCount: 4,
|
||||
debug: false
|
||||
});
|
||||
|
||||
hls.loadSource(hlsUrl);
|
||||
hls.attachMedia(video);
|
||||
|
||||
hls.on(Hls.Events.MANIFEST_PARSED, () => video.play().catch(() => {}));
|
||||
hls.on(Hls.Events.LEVEL_SWITCHED, hideLoader);
|
||||
hls.on(Hls.Events.ERROR, (e, data) => {
|
||||
if (data.fatal) {
|
||||
if (data.type === Hls.ErrorTypes.NETWORK_ERROR) hls.startLoad();
|
||||
else if (data.type === Hls.ErrorTypes.MEDIA_ERROR) hls.recoverMediaError();
|
||||
else hls.destroy();
|
||||
}
|
||||
});
|
||||
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
|
||||
video.src = hlsUrl;
|
||||
video.addEventListener('loadedmetadata', () => video.play().then(hideLoader).catch(() => {}));
|
||||
}
|
||||
|
||||
// Blocage clic droit + sélection (comportement cam firmware basique)
|
||||
video.addEventListener('contextmenu', e => e.preventDefault());
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
30
nginx.conf
Normal file
30
nginx.conf
Normal file
@@ -0,0 +1,30 @@
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
sendfile on;
|
||||
keepalive_timeout 65;
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
|
||||
location / {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
}
|
||||
|
||||
location /hls {
|
||||
types {
|
||||
application/vnd.apple.mpegurl m3u8;
|
||||
video/mp2t ts;
|
||||
}
|
||||
root /usr/share/nginx/html;
|
||||
add_header Cache-Control no-cache;
|
||||
add_header Access-Control-Allow-Origin *;
|
||||
expires off;
|
||||
}
|
||||
}
|
||||
}
|
||||
12
stream.sh
Normal file
12
stream.sh
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
echo "🎬 Démarrage du stream HLS optimisé (segments 2s)..."
|
||||
|
||||
ffmpeg -re -stream_loop -1 -i /video.mp4 \
|
||||
-c:v libx264 -preset veryfast -b:v 1500k -maxrate 1500k -bufsize 3000k \
|
||||
-c:a aac -b:a 128k -ar 44100 \
|
||||
-force_key_frames "expr:gte(t,n_forced*2)" \
|
||||
-f hls -hls_time 2 -hls_list_size 5 \
|
||||
/usr/share/nginx/html/hls/stream.m3u8 &
|
||||
|
||||
echo "🌐 Nginx prêt sur le port 80"
|
||||
exec nginx -g "daemon off;"
|
||||
Reference in New Issue
Block a user