aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/tests/api/videos/video-transcoder.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/tests/api/videos/video-transcoder.ts')
-rw-r--r--server/tests/api/videos/video-transcoder.ts168
1 files changed, 89 insertions, 79 deletions
diff --git a/server/tests/api/videos/video-transcoder.ts b/server/tests/api/videos/video-transcoder.ts
index 4a39ee3e3..0f83d4d57 100644
--- a/server/tests/api/videos/video-transcoder.ts
+++ b/server/tests/api/videos/video-transcoder.ts
@@ -35,6 +35,8 @@ describe('Test video transcoding', function () {
35 servers = await flushAndRunMultipleServers(2) 35 servers = await flushAndRunMultipleServers(2)
36 36
37 await setAccessTokensToServers(servers) 37 await setAccessTokensToServers(servers)
38
39 await doubleFollow(servers[0], servers[1])
38 }) 40 })
39 41
40 it('Should not transcode video on server 1', async function () { 42 it('Should not transcode video on server 1', async function () {
@@ -49,20 +51,22 @@ describe('Test video transcoding', function () {
49 51
50 await waitJobs(servers) 52 await waitJobs(servers)
51 53
52 const res = await getVideosList(servers[0].url) 54 for (const server of servers) {
53 const video = res.body.data[0] 55 const res = await getVideosList(server.url)
56 const video = res.body.data[ 0 ]
54 57
55 const res2 = await getVideo(servers[0].url, video.id) 58 const res2 = await getVideo(server.url, video.id)
56 const videoDetails = res2.body 59 const videoDetails = res2.body
57 expect(videoDetails.files).to.have.lengthOf(1) 60 expect(videoDetails.files).to.have.lengthOf(1)
58 61
59 const magnetUri = videoDetails.files[0].magnetUri 62 const magnetUri = videoDetails.files[ 0 ].magnetUri
60 expect(magnetUri).to.match(/\.webm/) 63 expect(magnetUri).to.match(/\.webm/)
61 64
62 const torrent = await webtorrentAdd(magnetUri) 65 const torrent = await webtorrentAdd(magnetUri, true)
63 expect(torrent.files).to.be.an('array') 66 expect(torrent.files).to.be.an('array')
64 expect(torrent.files.length).to.equal(1) 67 expect(torrent.files.length).to.equal(1)
65 expect(torrent.files[0].path).match(/\.webm$/) 68 expect(torrent.files[ 0 ].path).match(/\.webm$/)
69 }
66 }) 70 })
67 71
68 it('Should transcode video on server 2', async function () { 72 it('Should transcode video on server 2', async function () {
@@ -77,21 +81,23 @@ describe('Test video transcoding', function () {
77 81
78 await waitJobs(servers) 82 await waitJobs(servers)
79 83
80 const res = await getVideosList(servers[1].url) 84 for (const server of servers) {
85 const res = await getVideosList(server.url)
81 86
82 const video = res.body.data[0] 87 const video = res.body.data.find(v => v.name === videoAttributes.name)
83 const res2 = await getVideo(servers[1].url, video.id) 88 const res2 = await getVideo(server.url, video.id)
84 const videoDetails = res2.body 89 const videoDetails = res2.body
85 90
86 expect(videoDetails.files).to.have.lengthOf(4) 91 expect(videoDetails.files).to.have.lengthOf(4)
87 92
88 const magnetUri = videoDetails.files[0].magnetUri 93 const magnetUri = videoDetails.files[ 0 ].magnetUri
89 expect(magnetUri).to.match(/\.mp4/) 94 expect(magnetUri).to.match(/\.mp4/)
90 95
91 const torrent = await webtorrentAdd(magnetUri) 96 const torrent = await webtorrentAdd(magnetUri, true)
92 expect(torrent.files).to.be.an('array') 97 expect(torrent.files).to.be.an('array')
93 expect(torrent.files.length).to.equal(1) 98 expect(torrent.files.length).to.equal(1)
94 expect(torrent.files[0].path).match(/\.mp4$/) 99 expect(torrent.files[ 0 ].path).match(/\.mp4$/)
100 }
95 }) 101 })
96 102
97 it('Should transcode high bit rate mp3 to proper bit rate', async function () { 103 it('Should transcode high bit rate mp3 to proper bit rate', async function () {
@@ -105,22 +111,24 @@ describe('Test video transcoding', function () {
105 111
106 await waitJobs(servers) 112 await waitJobs(servers)
107 113
108 const res = await getVideosList(servers[1].url) 114 for (const server of servers) {
115 const res = await getVideosList(server.url)
109 116
110 const video = res.body.data.find(v => v.name === videoAttributes.name) 117 const video = res.body.data.find(v => v.name === videoAttributes.name)
111 const res2 = await getVideo(servers[1].url, video.id) 118 const res2 = await getVideo(server.url, video.id)
112 const videoDetails: VideoDetails = res2.body 119 const videoDetails: VideoDetails = res2.body
113 120
114 expect(videoDetails.files).to.have.lengthOf(4) 121 expect(videoDetails.files).to.have.lengthOf(4)
115 122
116 const path = join(root(), 'test2', 'videos', video.uuid + '-240.mp4') 123 const path = join(root(), 'test2', 'videos', video.uuid + '-240.mp4')
117 const probe = await audio.get(ffmpeg, path) 124 const probe = await audio.get(ffmpeg, path)
118 125
119 if (probe.audioStream) { 126 if (probe.audioStream) {
120 expect(probe.audioStream['codec_name']).to.be.equal('aac') 127 expect(probe.audioStream[ 'codec_name' ]).to.be.equal('aac')
121 expect(probe.audioStream['bit_rate']).to.be.at.most(384 * 8000) 128 expect(probe.audioStream[ 'bit_rate' ]).to.be.at.most(384 * 8000)
122 } else { 129 } else {
123 this.fail('Could not retrieve the audio stream on ' + probe.absolutePath) 130 this.fail('Could not retrieve the audio stream on ' + probe.absolutePath)
131 }
124 } 132 }
125 }) 133 })
126 134
@@ -135,16 +143,18 @@ describe('Test video transcoding', function () {
135 143
136 await waitJobs(servers) 144 await waitJobs(servers)
137 145
138 const res = await getVideosList(servers[1].url) 146 for (const server of servers) {
147 const res = await getVideosList(server.url)
139 148
140 const video = res.body.data.find(v => v.name === videoAttributes.name) 149 const video = res.body.data.find(v => v.name === videoAttributes.name)
141 const res2 = await getVideo(servers[1].url, video.id) 150 const res2 = await getVideo(server.url, video.id)
142 const videoDetails: VideoDetails = res2.body 151 const videoDetails: VideoDetails = res2.body
143 152
144 expect(videoDetails.files).to.have.lengthOf(4) 153 expect(videoDetails.files).to.have.lengthOf(4)
145 const path = join(root(), 'test2', 'videos', video.uuid + '-240.mp4') 154 const path = join(root(), 'test2', 'videos', video.uuid + '-240.mp4')
146 const probe = await audio.get(ffmpeg, path) 155 const probe = await audio.get(ffmpeg, path)
147 expect(probe).to.not.have.property('audioStream') 156 expect(probe).to.not.have.property('audioStream')
157 }
148 }) 158 })
149 159
150 it('Should leave the audio untouched, but properly transcode the video', async function () { 160 it('Should leave the audio untouched, but properly transcode the video', async function () {
@@ -158,22 +168,24 @@ describe('Test video transcoding', function () {
158 168
159 await waitJobs(servers) 169 await waitJobs(servers)
160 170
161 const res = await getVideosList(servers[1].url) 171 for (const server of servers) {
162 172 const res = await getVideosList(server.url)
163 const video = res.body.data.find(v => v.name === videoAttributes.name) 173
164 const res2 = await getVideo(servers[1].url, video.id) 174 const video = res.body.data.find(v => v.name === videoAttributes.name)
165 const videoDetails: VideoDetails = res2.body 175 const res2 = await getVideo(server.url, video.id)
166 176 const videoDetails: VideoDetails = res2.body
167 expect(videoDetails.files).to.have.lengthOf(4) 177
168 const fixturePath = buildAbsoluteFixturePath(videoAttributes.fixture) 178 expect(videoDetails.files).to.have.lengthOf(4)
169 const fixtureVideoProbe = await audio.get(ffmpeg, fixturePath) 179 const fixturePath = buildAbsoluteFixturePath(videoAttributes.fixture)
170 const path = join(root(), 'test2', 'videos', video.uuid + '-240.mp4') 180 const fixtureVideoProbe = await audio.get(ffmpeg, fixturePath)
171 const videoProbe = await audio.get(ffmpeg, path) 181 const path = join(root(), 'test2', 'videos', video.uuid + '-240.mp4')
172 if (videoProbe.audioStream && fixtureVideoProbe.audioStream) { 182 const videoProbe = await audio.get(ffmpeg, path)
173 const toOmit = [ 'max_bit_rate', 'duration', 'duration_ts', 'nb_frames', 'start_time', 'start_pts' ] 183 if (videoProbe.audioStream && fixtureVideoProbe.audioStream) {
174 expect(omit(videoProbe.audioStream, toOmit)).to.be.deep.equal(omit(fixtureVideoProbe.audioStream, toOmit)) 184 const toOmit = [ 'max_bit_rate', 'duration', 'duration_ts', 'nb_frames', 'start_time', 'start_pts' ]
175 } else { 185 expect(omit(videoProbe.audioStream, toOmit)).to.be.deep.equal(omit(fixtureVideoProbe.audioStream, toOmit))
176 this.fail('Could not retrieve the audio stream on ' + videoProbe.absolutePath) 186 } else {
187 this.fail('Could not retrieve the audio stream on ' + videoProbe.absolutePath)
188 }
177 } 189 }
178 }) 190 })
179 191
@@ -189,38 +201,36 @@ describe('Test video transcoding', function () {
189 201
190 await waitJobs(servers) 202 await waitJobs(servers)
191 203
192 const res = await getVideosList(servers[1].url) 204 for (const server of servers) {
205 const res = await getVideosList(server.url)
193 206
194 const video = res.body.data.find(v => v.name === videoAttributes.name) 207 const video = res.body.data.find(v => v.name === videoAttributes.name)
195 const res2 = await getVideo(servers[1].url, video.id) 208 const res2 = await getVideo(server.url, video.id)
196 const videoDetails: VideoDetails = res2.body 209 const videoDetails: VideoDetails = res2.body
197 210
198 expect(videoDetails.files).to.have.lengthOf(4) 211 expect(videoDetails.files).to.have.lengthOf(4)
199 expect(videoDetails.files[0].fps).to.be.above(58).and.below(62) 212 expect(videoDetails.files[ 0 ].fps).to.be.above(58).and.below(62)
200 expect(videoDetails.files[1].fps).to.be.below(31) 213 expect(videoDetails.files[ 1 ].fps).to.be.below(31)
201 expect(videoDetails.files[2].fps).to.be.below(31) 214 expect(videoDetails.files[ 2 ].fps).to.be.below(31)
202 expect(videoDetails.files[3].fps).to.be.below(31) 215 expect(videoDetails.files[ 3 ].fps).to.be.below(31)
203 216
204 for (const resolution of [ '240', '360', '480' ]) { 217 for (const resolution of [ '240', '360', '480' ]) {
205 const path = join(root(), 'test2', 'videos', video.uuid + '-' + resolution + '.mp4') 218 const path = join(root(), 'test2', 'videos', video.uuid + '-' + resolution + '.mp4')
206 const fps = await getVideoFileFPS(path) 219 const fps = await getVideoFileFPS(path)
207 220
208 expect(fps).to.be.below(31) 221 expect(fps).to.be.below(31)
209 } 222 }
210 223
211 const path = join(root(), 'test2', 'videos', video.uuid + '-720.mp4') 224 const path = join(root(), 'test2', 'videos', video.uuid + '-720.mp4')
212 const fps = await getVideoFileFPS(path) 225 const fps = await getVideoFileFPS(path)
213 226
214 expect(fps).to.be.above(58).and.below(62) 227 expect(fps).to.be.above(58).and.below(62)
228 }
215 }) 229 })
216 230
217 it('Should wait transcoding before publishing the video', async function () { 231 it('Should wait transcoding before publishing the video', async function () {
218 this.timeout(80000) 232 this.timeout(80000)
219 233
220 await doubleFollow(servers[0], servers[1])
221
222 await waitJobs(servers)
223
224 { 234 {
225 // Upload the video, but wait transcoding 235 // Upload the video, but wait transcoding
226 const videoAttributes = { 236 const videoAttributes = {