]>
Commit | Line | Data |
---|---|---|
df1db951 C |
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | ||
3 | import 'mocha' | |
4 | import * as chai from 'chai' | |
5 | import { VideoPrivacy } from '@shared/models' | |
6 | import { | |
7 | buildAbsoluteFixturePath, | |
8 | cleanupTests, | |
9 | createSingleServer, | |
10 | PeerTubeServer, | |
11 | sendRTMPStream, | |
12 | setAccessTokensToServers, | |
13 | setDefaultVideoChannel, | |
14 | stopFfmpeg, | |
15 | testFfmpegStreamError, | |
16 | waitUntilLivePublishedOnAllServers | |
17 | } from '../../../../shared/extra-utils' | |
18 | ||
19 | const expect = chai.expect | |
20 | ||
21 | describe('Test live RTMPS', function () { | |
22 | let server: PeerTubeServer | |
23 | let rtmpUrl: string | |
24 | let rtmpsUrl: string | |
25 | ||
26 | async function createLiveWrapper () { | |
27 | const liveAttributes = { | |
28 | name: 'live', | |
29 | channelId: server.store.channel.id, | |
30 | privacy: VideoPrivacy.PUBLIC, | |
31 | saveReplay: false | |
32 | } | |
33 | ||
34 | const { uuid } = await server.live.create({ fields: liveAttributes }) | |
35 | ||
36 | const live = await server.live.get({ videoId: uuid }) | |
37 | const video = await server.videos.get({ id: uuid }) | |
38 | ||
39 | return Object.assign(video, live) | |
40 | } | |
41 | ||
42 | before(async function () { | |
43 | this.timeout(120000) | |
44 | ||
45 | server = await createSingleServer(1) | |
46 | ||
47 | // Get the access tokens | |
48 | await setAccessTokensToServers([ server ]) | |
49 | await setDefaultVideoChannel([ server ]) | |
50 | ||
51 | await server.config.updateCustomSubConfig({ | |
52 | newConfig: { | |
53 | live: { | |
54 | enabled: true, | |
55 | allowReplay: true, | |
56 | transcoding: { | |
57 | enabled: false | |
58 | } | |
59 | } | |
60 | } | |
61 | }) | |
62 | ||
63 | rtmpUrl = 'rtmp://' + server.hostname + ':' + server.rtmpPort + '/live' | |
64 | rtmpsUrl = 'rtmps://' + server.hostname + ':' + server.rtmpsPort + '/live' | |
65 | }) | |
66 | ||
67 | it('Should enable RTMPS endpoint only', async function () { | |
68 | this.timeout(240000) | |
69 | ||
70 | await server.kill() | |
71 | await server.run({ | |
72 | live: { | |
73 | rtmp: { | |
74 | enabled: false | |
75 | }, | |
76 | rtmps: { | |
77 | enabled: true, | |
78 | port: server.rtmpsPort, | |
79 | key_file: buildAbsoluteFixturePath('rtmps.key'), | |
80 | cert_file: buildAbsoluteFixturePath('rtmps.cert') | |
81 | } | |
82 | } | |
83 | }) | |
84 | ||
85 | { | |
86 | const liveVideo = await createLiveWrapper() | |
87 | ||
88 | expect(liveVideo.rtmpUrl).to.not.exist | |
89 | expect(liveVideo.rtmpsUrl).to.equal(rtmpsUrl) | |
90 | ||
91 | const command = sendRTMPStream({ rtmpBaseUrl: rtmpUrl, streamKey: liveVideo.streamKey }) | |
92 | await testFfmpegStreamError(command, true) | |
93 | } | |
94 | ||
95 | { | |
96 | const liveVideo = await createLiveWrapper() | |
97 | ||
98 | const command = sendRTMPStream({ rtmpBaseUrl: rtmpsUrl, streamKey: liveVideo.streamKey }) | |
99 | await waitUntilLivePublishedOnAllServers([ server ], liveVideo.uuid) | |
100 | await stopFfmpeg(command) | |
101 | } | |
102 | }) | |
103 | ||
104 | it('Should enable both RTMP and RTMPS', async function () { | |
105 | this.timeout(240000) | |
106 | ||
107 | await server.kill() | |
108 | await server.run({ | |
109 | live: { | |
110 | rtmp: { | |
111 | enabled: true, | |
112 | port: server.rtmpPort | |
113 | }, | |
114 | rtmps: { | |
115 | enabled: true, | |
116 | port: server.rtmpsPort, | |
117 | key_file: buildAbsoluteFixturePath('rtmps.key'), | |
118 | cert_file: buildAbsoluteFixturePath('rtmps.cert') | |
119 | } | |
120 | } | |
121 | }) | |
122 | ||
123 | { | |
124 | const liveVideo = await createLiveWrapper() | |
125 | ||
126 | expect(liveVideo.rtmpUrl).to.equal(rtmpUrl) | |
127 | expect(liveVideo.rtmpsUrl).to.equal(rtmpsUrl) | |
128 | ||
129 | const command = sendRTMPStream({ rtmpBaseUrl: rtmpUrl, streamKey: liveVideo.streamKey }) | |
130 | await waitUntilLivePublishedOnAllServers([ server ], liveVideo.uuid) | |
131 | await stopFfmpeg(command) | |
132 | } | |
133 | ||
134 | { | |
135 | const liveVideo = await createLiveWrapper() | |
136 | ||
137 | const command = sendRTMPStream({ rtmpBaseUrl: rtmpsUrl, streamKey: liveVideo.streamKey }) | |
138 | await waitUntilLivePublishedOnAllServers([ server ], liveVideo.uuid) | |
139 | await stopFfmpeg(command) | |
140 | } | |
141 | }) | |
142 | ||
143 | after(async function () { | |
144 | await cleanupTests([ server ]) | |
145 | }) | |
146 | }) |