[stream] \o fluxx.crans.org
parent
59c9428851
commit
b84fcbf9ce
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
glob_nginx_rtmp:
|
||||||
|
uri: stream.crans.org
|
4
hosts
4
hosts
|
@ -25,6 +25,9 @@
|
||||||
# [test_vm]
|
# [test_vm]
|
||||||
# re2o-test.adm.crans.org
|
# re2o-test.adm.crans.org
|
||||||
|
|
||||||
|
[nginx_rtmp]
|
||||||
|
fluxx.adm.crans.org
|
||||||
|
|
||||||
[reverseproxy]
|
[reverseproxy]
|
||||||
hodaur.adm.crans.org
|
hodaur.adm.crans.org
|
||||||
frontdaur.adm.crans.org
|
frontdaur.adm.crans.org
|
||||||
|
@ -81,6 +84,7 @@ gitlab-ci.adm.crans.org
|
||||||
hodaur.adm.crans.org
|
hodaur.adm.crans.org
|
||||||
monitoring.adm.crans.org
|
monitoring.adm.crans.org
|
||||||
boeing.adm.crans.org
|
boeing.adm.crans.org
|
||||||
|
fluxx.adm.crans.org
|
||||||
|
|
||||||
[ovh_physical]
|
[ovh_physical]
|
||||||
sputnik.adm.crans.org
|
sputnik.adm.crans.org
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env ansible-playbook
|
||||||
|
---
|
||||||
|
- hosts: nginx_rtmp
|
||||||
|
nginx_rtmp: "{{ glob_nginx_rtmp | combine(loc_nginx_rtmp) }}"
|
||||||
|
roles:
|
||||||
|
- nginx_rtmp
|
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
- name: restart nginx
|
||||||
|
service:
|
||||||
|
name: nginx
|
||||||
|
state: restarted
|
||||||
|
become: true
|
|
@ -0,0 +1,44 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
- name: Install nginx with rtmp module
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- nginx-full
|
||||||
|
- libnginx-mod-rtmp
|
||||||
|
register: apt_result
|
||||||
|
retries: 3
|
||||||
|
until: apt_result is succeeded
|
||||||
|
become: yes
|
||||||
|
|
||||||
|
- name: Copy module and site configuration files
|
||||||
|
template:
|
||||||
|
src: '{{ item }}.j2'
|
||||||
|
dest: '/etc/{{ item }}'
|
||||||
|
loop:
|
||||||
|
- nginx/modules-available/60-rtmp.conf
|
||||||
|
- nginx/sites-available/stream
|
||||||
|
notify: restart nginx
|
||||||
|
|
||||||
|
- name: Enable site
|
||||||
|
file:
|
||||||
|
src: '/etc/nginx/sites-available/stream'
|
||||||
|
dest: '/etc/nginx/sites-enabled/stream'
|
||||||
|
state: link
|
||||||
|
notify: restart nginx
|
||||||
|
|
||||||
|
- name: Enable module
|
||||||
|
file:
|
||||||
|
src: '/etc/nginx/modules-available/60-rtmp.conf'
|
||||||
|
dest: '/etc/nginx/modules-enabled/60-rtmp.conf'
|
||||||
|
state: link
|
||||||
|
notify: restart nginx
|
||||||
|
|
||||||
|
- name: Create site folder
|
||||||
|
file:
|
||||||
|
path: /var/www/stream/hls
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: Copy index configuration file
|
||||||
|
template:
|
||||||
|
src: index.html
|
||||||
|
dest: /var/www/stream/
|
|
@ -0,0 +1,28 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Crans Live</title>
|
||||||
|
<link href="//unpkg.com/bootstrap@4.5/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="//unpkg.com/video.js@7/dist/video-js.min.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body class="bg-dark m-2">
|
||||||
|
<div class="container">
|
||||||
|
<video id="my-video" class="video-js embed-responsive shadow-lg rounded-sm"></video>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="//unpkg.com/video.js@7/dist/video.min.js"></script>
|
||||||
|
<script>
|
||||||
|
const videoId = window.location.pathname.split("/").pop()
|
||||||
|
videojs('my-video', {
|
||||||
|
controls: true,
|
||||||
|
autoplay: true,
|
||||||
|
preload: 'auto',
|
||||||
|
muted: true
|
||||||
|
}).src({
|
||||||
|
type: 'application/x-mpegURL',
|
||||||
|
src: `/hls/${videoId}.m3u8`
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,16 @@
|
||||||
|
rtmp {
|
||||||
|
server {
|
||||||
|
listen 1935;
|
||||||
|
chunk_size 4096;
|
||||||
|
application live {
|
||||||
|
live on;
|
||||||
|
hls on;
|
||||||
|
hls_path /var/www/stream/hls/;
|
||||||
|
hls_fragment 3;
|
||||||
|
hls_playlist_length 60;
|
||||||
|
|
||||||
|
record off;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
|
||||||
|
server_name {{ nginx_rtmp.uri }};
|
||||||
|
|
||||||
|
root /var/www/stream;
|
||||||
|
index index.html;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /hls {
|
||||||
|
# Disable cache
|
||||||
|
add_header Cache-Control no-cache;
|
||||||
|
|
||||||
|
# CORS setup
|
||||||
|
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||||
|
add_header 'Access-Control-Expose-Headers' 'Content-Length';
|
||||||
|
|
||||||
|
# allow CORS preflight requests
|
||||||
|
if ($request_method = 'OPTIONS') {
|
||||||
|
add_header 'Access-Control-Allow-Origin' '*';
|
||||||
|
add_header 'Access-Control-Max-Age' 1728000;
|
||||||
|
add_header 'Content-Type' 'text/plain charset=UTF-8';
|
||||||
|
add_header 'Content-Length' 0;
|
||||||
|
return 204;
|
||||||
|
}
|
||||||
|
|
||||||
|
types {
|
||||||
|
application/dash+xml mpd;
|
||||||
|
application/vnd.apple.mpegurl m3u8;
|
||||||
|
video/mp2t ts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
rtmp {
|
||||||
|
server {
|
||||||
|
listen 1935;
|
||||||
|
chunk_size 4096;
|
||||||
|
application live {
|
||||||
|
live on;
|
||||||
|
record off;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue