]>
Commit | Line | Data |
---|---|---|
12152aa0 | 1 | import { program } from 'commander' |
078f17e6 | 2 | import { LiveVideoCreate, VideoPrivacy } from '@shared/models' |
5a547f69 | 3 | import { |
254d3579 | 4 | createSingleServer, |
5a547f69 C |
5 | killallServers, |
6 | sendRTMPStream, | |
254d3579 | 7 | PeerTubeServer, |
5a547f69 | 8 | setAccessTokensToServers, |
078f17e6 | 9 | setDefaultVideoChannel |
5a547f69 | 10 | } from '../../shared/extra-utils' |
078f17e6 C |
11 | import { registerTSPaths } from '../helpers/register-ts-paths' |
12 | ||
13 | registerTSPaths() | |
5a547f69 C |
14 | |
15 | type CommandType = 'live-mux' | 'live-transcoding' | |
16 | ||
17 | registerTSPaths() | |
18 | ||
19 | const command = program | |
078f17e6 | 20 | .name('test-live') |
5a547f69 C |
21 | .option('-t, --type <type>', 'live-muxing|live-transcoding') |
22 | .parse(process.argv) | |
23 | ||
24 | run() | |
25 | .catch(err => { | |
26 | console.error(err) | |
27 | process.exit(-1) | |
28 | }) | |
29 | ||
30 | async function run () { | |
31 | const commandType: CommandType = command['type'] | |
32 | if (!commandType) { | |
33 | console.error('Miss command type') | |
34 | process.exit(-1) | |
35 | } | |
36 | ||
37 | console.log('Starting server.') | |
38 | ||
254d3579 | 39 | const server = await createSingleServer(1, {}, [], { hideLogs: false, execArgv: [ '--inspect' ] }) |
5a547f69 | 40 | |
5e2fea3a | 41 | const cleanup = async () => { |
5a547f69 | 42 | console.log('Killing server') |
9293139f | 43 | await killallServers([ server ]) |
5a547f69 C |
44 | } |
45 | ||
46 | process.on('exit', cleanup) | |
47 | process.on('SIGINT', cleanup) | |
48 | ||
49 | await setAccessTokensToServers([ server ]) | |
50 | await setDefaultVideoChannel([ server ]) | |
51 | ||
52 | await buildConfig(server, commandType) | |
53 | ||
54 | const attributes: LiveVideoCreate = { | |
55 | name: 'live', | |
56 | saveReplay: true, | |
89d241a7 | 57 | channelId: server.store.channel.id, |
5a547f69 C |
58 | privacy: VideoPrivacy.PUBLIC |
59 | } | |
60 | ||
61 | console.log('Creating live.') | |
62 | ||
89d241a7 | 63 | const { uuid: liveVideoUUID } = await server.live.create({ fields: attributes }) |
5a547f69 | 64 | |
89d241a7 | 65 | const live = await server.live.get({ videoId: liveVideoUUID }) |
5a547f69 C |
66 | |
67 | console.log('Sending RTMP stream.') | |
68 | ||
69 | const ffmpegCommand = sendRTMPStream(live.rtmpUrl, live.streamKey) | |
70 | ||
71 | ffmpegCommand.on('error', err => { | |
72 | console.error(err) | |
73 | process.exit(-1) | |
74 | }) | |
75 | ||
76 | ffmpegCommand.on('end', () => { | |
77 | console.log('ffmpeg ended') | |
78 | process.exit(0) | |
79 | }) | |
80 | } | |
81 | ||
82 | // ---------------------------------------------------------------------------- | |
83 | ||
254d3579 | 84 | async function buildConfig (server: PeerTubeServer, commandType: CommandType) { |
89d241a7 | 85 | await server.config.updateCustomSubConfig({ |
078f17e6 C |
86 | newConfig: { |
87 | instance: { | |
88 | customizations: { | |
89 | javascript: '', | |
90 | css: '' | |
91 | } | |
92 | }, | |
93 | live: { | |
94 | enabled: true, | |
95 | allowReplay: true, | |
96 | transcoding: { | |
97 | enabled: commandType === 'live-transcoding' | |
98 | } | |
5a547f69 C |
99 | } |
100 | } | |
101 | }) | |
102 | } |