commit 80d4101269508f7daf7d0093f12fa5baa27fbca2 Author: l-nmch Date: Tue Apr 7 20:13:07 2026 +0000 First commit diff --git a/.ash_history b/.ash_history new file mode 100644 index 0000000..7fbc0ca --- /dev/null +++ b/.ash_history @@ -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 . diff --git a/.docker/buildx/.buildNodeID b/.docker/buildx/.buildNodeID new file mode 100644 index 0000000..cccf0f8 --- /dev/null +++ b/.docker/buildx/.buildNodeID @@ -0,0 +1 @@ +734be07c6201ad52 \ No newline at end of file diff --git a/.docker/buildx/.lock b/.docker/buildx/.lock new file mode 100644 index 0000000..e69de29 diff --git a/.docker/buildx/activity/default b/.docker/buildx/activity/default new file mode 100644 index 0000000..da4757c --- /dev/null +++ b/.docker/buildx/activity/default @@ -0,0 +1 @@ +2026-04-07T20:10:06Z \ No newline at end of file diff --git a/.docker/buildx/current b/.docker/buildx/current new file mode 100644 index 0000000..f34f695 --- /dev/null +++ b/.docker/buildx/current @@ -0,0 +1 @@ +{"Key":"unix:///var/run/docker.sock","Name":"","Global":false} \ No newline at end of file diff --git a/.docker/buildx/refs/__group__/lf7fzh1qmgnxbcwc0a8sq28xi b/.docker/buildx/refs/__group__/lf7fzh1qmgnxbcwc0a8sq28xi new file mode 100644 index 0000000..5a2ae25 --- /dev/null +++ b/.docker/buildx/refs/__group__/lf7fzh1qmgnxbcwc0a8sq28xi @@ -0,0 +1 @@ +{"Targets":["default"],"Refs":["ud3p3xailusum5hkcvrd6lwey"]} \ No newline at end of file diff --git a/.docker/buildx/refs/__group__/r0mbu35h90r5djfiscyl2am8z b/.docker/buildx/refs/__group__/r0mbu35h90r5djfiscyl2am8z new file mode 100644 index 0000000..dde1765 --- /dev/null +++ b/.docker/buildx/refs/__group__/r0mbu35h90r5djfiscyl2am8z @@ -0,0 +1 @@ +{"Targets":["default"],"Refs":["i3dnnaro1kx9ajzcc5jcg4k1d"]} \ No newline at end of file diff --git a/.docker/buildx/refs/__group__/yewcjuxask0xu0wo7ofcjixeg b/.docker/buildx/refs/__group__/yewcjuxask0xu0wo7ofcjixeg new file mode 100644 index 0000000..a1ef131 --- /dev/null +++ b/.docker/buildx/refs/__group__/yewcjuxask0xu0wo7ofcjixeg @@ -0,0 +1 @@ +{"Targets":["default"],"Refs":["yyiuzc7sp70iv143lousa3elz"]} \ No newline at end of file diff --git a/.docker/buildx/refs/default/default/i3dnnaro1kx9ajzcc5jcg4k1d b/.docker/buildx/refs/default/default/i3dnnaro1kx9ajzcc5jcg4k1d new file mode 100644 index 0000000..21140e3 --- /dev/null +++ b/.docker/buildx/refs/default/default/i3dnnaro1kx9ajzcc5jcg4k1d @@ -0,0 +1 @@ +{"Target":"webcam-sim","LocalPath":"/root","DockerfilePath":"/root/Dockerfile","GroupRef":"r0mbu35h90r5djfiscyl2am8z"} \ No newline at end of file diff --git a/.docker/buildx/refs/default/default/ud3p3xailusum5hkcvrd6lwey b/.docker/buildx/refs/default/default/ud3p3xailusum5hkcvrd6lwey new file mode 100644 index 0000000..67e5c57 --- /dev/null +++ b/.docker/buildx/refs/default/default/ud3p3xailusum5hkcvrd6lwey @@ -0,0 +1 @@ +{"Target":"webcam-sim","LocalPath":"/root","DockerfilePath":"/root/Dockerfile","GroupRef":"lf7fzh1qmgnxbcwc0a8sq28xi"} \ No newline at end of file diff --git a/.docker/buildx/refs/default/default/yyiuzc7sp70iv143lousa3elz b/.docker/buildx/refs/default/default/yyiuzc7sp70iv143lousa3elz new file mode 100644 index 0000000..cfe1ad6 --- /dev/null +++ b/.docker/buildx/refs/default/default/yyiuzc7sp70iv143lousa3elz @@ -0,0 +1 @@ +{"Target":"webcam-sim","LocalPath":"/root","DockerfilePath":"/root/Dockerfile","GroupRef":"yewcjuxask0xu0wo7ofcjixeg"} \ No newline at end of file diff --git a/.docker/buildx/refs/version b/.docker/buildx/refs/version new file mode 100644 index 0000000..d8263ee --- /dev/null +++ b/.docker/buildx/refs/version @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ae9791e --- /dev/null +++ b/Dockerfile @@ -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"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4d441dc --- /dev/null +++ b/docker-compose.yml @@ -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 diff --git a/index.html b/index.html new file mode 100644 index 0000000..abf3cca --- /dev/null +++ b/index.html @@ -0,0 +1,112 @@ + + + + + + IP CAMERA + + + +
+ +
+
CAM-01 | 512x512
00:00:00
+
REC
+
H.264 | 1500K | LIVE
+
+
CONNECTING...
+
+ + + + + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..1fc0182 --- /dev/null +++ b/nginx.conf @@ -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; + } + } +} diff --git a/stream.sh b/stream.sh new file mode 100644 index 0000000..fae6ee2 --- /dev/null +++ b/stream.sh @@ -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;" diff --git a/video.mp4 b/video.mp4 new file mode 100644 index 0000000..0fa627f Binary files /dev/null and b/video.mp4 differ