-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver2.js
168 lines (139 loc) · 5.18 KB
/
server2.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
const child_process = require('child_process') // To be used later for running FFmpeg
const express = require('express')
// const WebSocket = require('ws')
const { Server } = require('socket.io')
const app = express()
const cors = require('cors')
const path = require('path')
const tmi = require('tmi.js')
require('dotenv').config()
const {
inputSettings,
twitchSettings,
youtubeSettings,
facebookSettings,
customRtmpSettings,
} = require('./ffmpeg')
const { ffmpeg2 } = require('./ffmpeg2')
app.use(cors())
app.use(express.static('public'))
app.use(express.json({ limit: '200mb', extended: true }))
app.use(
express.urlencoded({ limit: '200mb', extended: true, parameterLimit: 50000 })
)
const authenticationRouter = require('./routes/authentication')
const broadcastsRouter = require('./routes/broadcasts')
const compareCodeRouter = require('./routes/compareCode')
const destinationsRouter = require('./routes/destinations')
const emailEventNotificationsRouter = require('./routes/emailEventNotifications')
const hubspotRouter = require('./routes/hubspot')
const referralRouter = require('./routes/referral')
const stripeRouter = require('./routes/stripe')
const facebookAuthorizationRouter = require('./routes/facebookAuthorization')
const facebookBroadcastRouter = require('./routes/facebookBroadcast')
const facebookViewCountRouter = require('./routes/facebookViewCount')
const twitchAuthorizationRouter = require('./routes/twitchAuthorization')
const twitchBroadcastRouter = require('./routes/twitchBroadcast')
const twitchViewCountRouter = require('./routes/twitchViewCount')
const youtubeAuthorizationRouter = require('./routes/youtubeAuthorization')
const youtubeBroadcastRouter = require('./routes/youtubeBroadcast')
const youtubeViewCountRouter = require('./routes/youtubeViewCount')
// app.use('/', authenticationRouter)
// app.use('/', broadcastsRouter)
// app.use('/', compareCodeRouter)
// app.use('/', destinationsRouter)
// app.use('/', emailEventNotificationsRouter)
// app.use('/', facebookAuthorizationRouter)
// app.use('/', facebookBroadcastRouter)
// app.use('/', facebookViewCountRouter)
// app.use('/', hubspotRouter)
// app.use('/', twitchAuthorizationRouter)
// app.use('/', twitchBroadcastRouter)
// app.use('/', twitchViewCountRouter)
// app.use('/', referralRouter)
// app.use('/', stripeRouter)
// app.use('/', youtubeAuthorizationRouter)
// app.use('/', youtubeBroadcastRouter)
// app.use('/', youtubeViewCountRouter)
const PORT = process.env.PORT || 5001
const WS_PORT = process.env.PORT || 3001
// app.listen(PORT, () => {
// console.log(`Listening on PORT ${PORT} for REST API requests`)
// })
// const wss = new WebSocket.Server({ port: WS_PORT }, () => {
// console.log(`Listening on PORT ${WS_PORT} for websockets`)
// })
const io = new Server({
/* options */
cors: {
origin: '*',
},
})
io.on('connection', (socket) => {
console.log(`socket connected to ${socket.id}`)
const socketQueryParams = socket.handshake.query
const youtube = socketQueryParams.youtubeUrl
const twitchStreamKey = socketQueryParams.twitchStreamKey
const twitch =
twitchStreamKey !== 'null'
? 'rtmp://dfw.contribute.live-video.net/app/' + twitchStreamKey
: null
const twitchUsername = socketQueryParams.twitchUsername
const facebook = socketQueryParams.facebookUrl
const customRTMP = socketQueryParams.customRTMP
console.log('twitchUsername: ' + twitchUsername)
// TWITCH CHAT TMI.JS
// const client = new tmi.Client({
// channels: [twitchUsername],
// })
// client.connect()
// client.on('message', (channel, tags, message, self) => {
// console.log(`${tags['display-name']}: ${message}`)
// socket.emit('twitch-msg', `${tags['display-name']}: ${message}`)
// })
// END TWITCH CHAT TMI.JS
const ffmpegInput = inputSettings.concat(
youtubeSettings(youtube),
twitchSettings(twitch),
facebookSettings(facebook),
customRtmpSettings(customRTMP)
)
// console.log(ffmpegInput)
// const ffmpeg = child_process.spawn(
// 'ffmpeg',
// ffmpeg2(youtube, twitch, facebook)
// )
const ffmpeg = child_process.spawn('ffmpeg', ffmpegInput)
// If FFmpeg stops for any reason, close the WebSocket connection.
ffmpeg.on('close', (code, signal) => {
console.log(
'FFmpeg child process closed, code ' + code + ', signal ' + signal
)
// ws.terminate()
})
// Handle STDIN pipe errors by logging to the console.
// These errors most commonly occur when FFmpeg closes and there is still
// data to write. If left unhandled, the server will crash.
ffmpeg.stdin.on('error', (e) => {
console.log('FFmpeg STDIN Error', e)
})
// FFmpeg outputs all of its messages to STDERR. Let's log them to the console.
ffmpeg.stderr.on('data', (data) => {
console.log('FFmpeg STDERR:', data.toString())
})
// When data comes in from the WebSocket, write it to FFmpeg's STDIN.
socket.on('message', (msg) => {
console.log('DATA', msg)
ffmpeg.stdin.write(msg)
})
// If the client disconnects, stop FFmpeg.
socket.conn.on('close', (e) => {
console.log('kill: SIGINT')
ffmpeg.kill('SIGINT')
})
})
console.log(11)
io.listen(3001, (token) => {
console.log(`Listening on PORT ${WS_PORT} for WS`)
})
console.log(2)