mirror of https://github.com/Chocobozzz/PeerTube
94 lines
2.2 KiB
TypeScript
94 lines
2.2 KiB
TypeScript
|
import { FfmpegCommand } from 'fluent-ffmpeg'
|
||
|
import { wait } from '@shared/core-utils'
|
||
|
import { VideoCreateResult, VideoPrivacy } from '@shared/models'
|
||
|
import {
|
||
|
createMultipleServers,
|
||
|
doubleFollow,
|
||
|
PeerTubeServer,
|
||
|
setAccessTokensToServers,
|
||
|
setDefaultVideoChannel,
|
||
|
waitJobs,
|
||
|
waitUntilLivePublishedOnAllServers
|
||
|
} from '@shared/server-commands'
|
||
|
|
||
|
async function processViewersStats (servers: PeerTubeServer[]) {
|
||
|
await wait(6000)
|
||
|
|
||
|
for (const server of servers) {
|
||
|
await server.debug.sendCommand({ body: { command: 'process-video-views-buffer' } })
|
||
|
await server.debug.sendCommand({ body: { command: 'process-video-viewers' } })
|
||
|
}
|
||
|
|
||
|
await waitJobs(servers)
|
||
|
}
|
||
|
|
||
|
async function processViewsBuffer (servers: PeerTubeServer[]) {
|
||
|
for (const server of servers) {
|
||
|
await server.debug.sendCommand({ body: { command: 'process-video-views-buffer' } })
|
||
|
}
|
||
|
|
||
|
await waitJobs(servers)
|
||
|
}
|
||
|
|
||
|
async function prepareViewsServers () {
|
||
|
const servers = await createMultipleServers(2)
|
||
|
await setAccessTokensToServers(servers)
|
||
|
await setDefaultVideoChannel(servers)
|
||
|
|
||
|
await servers[0].config.updateCustomSubConfig({
|
||
|
newConfig: {
|
||
|
live: {
|
||
|
enabled: true,
|
||
|
allowReplay: true,
|
||
|
transcoding: {
|
||
|
enabled: false
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
await doubleFollow(servers[0], servers[1])
|
||
|
|
||
|
return servers
|
||
|
}
|
||
|
|
||
|
async function prepareViewsVideos (options: {
|
||
|
servers: PeerTubeServer[]
|
||
|
live: boolean
|
||
|
vod: boolean
|
||
|
}) {
|
||
|
const { servers } = options
|
||
|
|
||
|
const liveAttributes = {
|
||
|
name: 'live video',
|
||
|
channelId: servers[0].store.channel.id,
|
||
|
privacy: VideoPrivacy.PUBLIC
|
||
|
}
|
||
|
|
||
|
let ffmpegCommand: FfmpegCommand
|
||
|
let live: VideoCreateResult
|
||
|
let vod: VideoCreateResult
|
||
|
|
||
|
if (options.live) {
|
||
|
live = await servers[0].live.create({ fields: liveAttributes })
|
||
|
|
||
|
ffmpegCommand = await servers[0].live.sendRTMPStreamInVideo({ videoId: live.uuid })
|
||
|
await waitUntilLivePublishedOnAllServers(servers, live.uuid)
|
||
|
}
|
||
|
|
||
|
if (options.vod) {
|
||
|
vod = await servers[0].videos.quickUpload({ name: 'video' })
|
||
|
}
|
||
|
|
||
|
await waitJobs(servers)
|
||
|
|
||
|
return { liveVideoId: live?.uuid, vodVideoId: vod?.uuid, ffmpegCommand }
|
||
|
}
|
||
|
|
||
|
export {
|
||
|
processViewersStats,
|
||
|
prepareViewsServers,
|
||
|
processViewsBuffer,
|
||
|
prepareViewsVideos
|
||
|
}
|