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
 | 
						|
}
 |