diff --git a/production/nms/app.js b/production/nms/app.js new file mode 100644 index 0000000..e38075a --- /dev/null +++ b/production/nms/app.js @@ -0,0 +1,109 @@ +const NodeMediaServer = require('./'); + +const config = { + rtmp: { + port: 1935, + chunk_size: 60000, + gop_cache: true, + ping: 30, + ping_timeout: 60 + }, + http: { + port: 8000, + mediaroot: './media', + webroot: './www', + allow_origin: '*', + api: true + }, +// https: { +// port: 8443, +// key: './privatekey.pem', +// cert: './certificate.pem', +// }, + auth: { + api: true, + api_user: 'admin', + api_pass: 'adminadminadmin', + play: false, + publish: true, + secret: 'nodemedia2020' + }, + trans: { + ffmpeg: '/usr/bin/ffmpeg', + tasks: [ + { + app: 'live', + ac: 'aac', + hls: true, + hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]' +// dash: true, +// dashFlags: '[f=dash:window_size=3:extra_window_size=5]' + }, +// { +// app: 'live', +// mp4: true, +// mp4Flags: '[movflags=faststart]' +// } + ] + }, +// { +// app: 'live', +// hls: true +// }, +// relay: { +// ffmpeg: "/usr/bin/ffmpeg", +// tasks: [{ +// app: 'live', +// mode: 'push', +// edge: 'rtmp://a.rtmp.youtube.com/live2/xvc5-mcaq-rkcu-p5fy-ep2e', +// appendName: false +// }] +// } +}; + + +let nms = new NodeMediaServer(config) +nms.run(); + +nms.on('preConnect', (id, args) => { + console.log('[NodeEvent on preConnect]', `id=${id} args=${JSON.stringify(args)}`); + // let session = nms.getSession(id); + // session.reject(); +}); + +nms.on('postConnect', (id, args) => { + console.log('[NodeEvent on postConnect]', `id=${id} args=${JSON.stringify(args)}`); +}); + +nms.on('doneConnect', (id, args) => { + console.log('[NodeEvent on doneConnect]', `id=${id} args=${JSON.stringify(args)}`); +}); + +nms.on('prePublish', (id, StreamPath, args) => { + console.log('[NodeEvent on prePublish]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`); + // let session = nms.getSession(id); + // session.reject(); +}); + +nms.on('postPublish', (id, StreamPath, args) => { + console.log('[NodeEvent on postPublish]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`); +}); + +nms.on('donePublish', (id, StreamPath, args) => { + console.log('[NodeEvent on donePublish]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`); +}); + +nms.on('prePlay', (id, StreamPath, args) => { + console.log('[NodeEvent on prePlay]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`); + // let session = nms.getSession(id); + // session.reject(); +}); + +nms.on('postPlay', (id, StreamPath, args) => { + console.log('[NodeEvent on postPlay]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`); +}); + +nms.on('donePlay', (id, StreamPath, args) => { + console.log('[NodeEvent on donePlay]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`); +}); + diff --git a/production/nms/docker-compose.yml b/production/nms/docker-compose.yml new file mode 100644 index 0000000..9f25576 --- /dev/null +++ b/production/nms/docker-compose.yml @@ -0,0 +1,33 @@ +version: "2" + +services: + nms: + image: illuspas/node-media-server + container_name: nms + hostname: nms + restart: always + entrypoint: + - /bin/sh + - /usr/src/app/entrypoint.sh + volumes: + - ./app.js:/usr/src/app/app.js:ro + - ./entrypoint.sh:/usr/src/app/entrypoint.sh:ro + - ./media:/usr/src/app/media + - ./lists:/lists:ro + expose: + - "8000" + - "8443" + ports: + - "1936:1935" + - "1936:1935/udp" + networks: + mynet: + ipv4_address: 172.14.0.101 + +networks: + mynet: + driver: bridge + ipam: + config: + - subnet: 172.14.0.0/24 + diff --git a/production/nms/entrypoint.sh b/production/nms/entrypoint.sh new file mode 100644 index 0000000..463d743 --- /dev/null +++ b/production/nms/entrypoint.sh @@ -0,0 +1,11 @@ +#!/bin/sh +sed -i -e 's/v[[:digit:]]\..*\//edge\//g' /etc/apk/repositories +apk upgrade +apk add ffmpeg +node app.js & +sleep 1s +while [ True ]; do + for i in $(cat /lists/fanta.txt); do + ffmpeg -loglevel quiet -re -i async:cache:"$i" -threads 2 -f flv -vcodec h264 -acodec aac rtmp://127.0.0.1/live/streaming?sign=1590502038931-b04c1d7b5bfc3dc61ddce23b2dda3649 + done +done