Add config to disable storing lives in s3

pull/6266/head
Chocobozzz 2024-02-26 16:12:16 +01:00
parent c2c2cd4121
commit 68d006b6fc
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
6 changed files with 67 additions and 5 deletions

View File

@ -222,6 +222,12 @@ object_storage:
# Useful when you want to use a CDN/external proxy
base_url: '' # Example: 'https://mirror.example.com'
# PeerTube makes many small requests to the object storage provider to upload/delete/update live chunks
# which can be a problem depending on your object storage provider
# You can also choose to disable this feature to reduce live streams latency
# Live stream replays are not affected by this setting, so they are uploaded in object storage as regular VOD videos
store_live_streams: true
web_videos:
bucket_name: 'web-videos'
prefix: ''

View File

@ -220,6 +220,12 @@ object_storage:
# Useful when you want to use a CDN/external proxy
base_url: '' # Example: 'https://mirror.example.com'
# PeerTube makes many small requests to the object storage provider to upload/delete/update live chunks
# which can be a problem depending on your object storage provider
# You can also choose to disable this feature to reduce live streams latency
# Live stream replays are not affected by this setting, so they are uploaded in object storage as regular VOD videos
store_live_streams: true
web_videos:
bucket_name: 'web-videos'
prefix: ''

View File

@ -29,7 +29,11 @@ export class ObjectStorageCommand {
return 'us-east-1'
}
getDefaultMockConfig () {
getDefaultMockConfig (options: {
storeLiveStreams?: boolean // default true
} = {}) {
const { storeLiveStreams = true } = options
return {
object_storage: {
enabled: true,
@ -39,7 +43,9 @@ export class ObjectStorageCommand {
credentials: ObjectStorageCommand.getMockCredentialsConfig(),
streaming_playlists: {
bucket_name: this.getMockStreamingPlaylistsBucketName()
bucket_name: this.getMockStreamingPlaylistsBucketName(),
store_live_streams: storeLiveStreams
},
web_videos: {

View File

@ -305,6 +305,49 @@ describe('Object storage for lives', function () {
})
})
describe('With live stream to object storage disabled', function () {
let videoUUID: string
before(async function () {
await servers[0].kill()
await servers[0].run(objectStorage.getDefaultMockConfig({ storeLiveStreams: false }))
await servers[0].config.enableLive({ transcoding: false })
videoUUID = await createLive(servers[0], false)
})
it('Should create a live and keep it on file system', async function () {
this.timeout(220000)
const ffmpegCommand = await servers[0].live.sendRTMPStreamInVideo({ videoId: videoUUID })
await waitUntilLivePublishedOnAllServers(servers, videoUUID)
await testLiveVideoResolutions({
originServer: servers[0],
sqlCommand: sqlCommandServer1,
servers,
liveVideoId: videoUUID,
resolutions: [ 720 ],
transcoded: false,
objectStorage: undefined
})
// Should not have files on object storage
await checkFilesCleanup({ server: servers[0], videoUUID, resolutions: [ 720 ], objectStorage })
await stopFfmpeg(ffmpegCommand)
})
it('Should have saved the replay on object storage', async function () {
this.timeout(220000)
await waitUntilLiveReplacedByReplayOnAllServers(servers, videoUUID)
await waitJobs(servers)
await checkFilesExist({ servers, videoUUID, numberOfFiles: 1, objectStorage })
})
})
after(async function () {
await sqlCommandServer1.cleanup()
await objectStorage.cleanupMock()

View File

@ -152,7 +152,8 @@ const CONFIG = {
STREAMING_PLAYLISTS: {
BUCKET_NAME: config.get<string>('object_storage.streaming_playlists.bucket_name'),
PREFIX: config.get<string>('object_storage.streaming_playlists.prefix'),
BASE_URL: config.get<string>('object_storage.streaming_playlists.base_url')
BASE_URL: config.get<string>('object_storage.streaming_playlists.base_url'),
STORE_LIVE_STREAMS: config.get<string>('object_storage.streaming_playlists.store_live_streams')
},
USER_EXPORTS: {
BUCKET_NAME: config.get<string>('object_storage.user_exports.bucket_name'),

View File

@ -463,7 +463,7 @@ class MuxingSession extends EventEmitter {
playlist.p2pMediaLoaderPeerVersion = P2P_MEDIA_LOADER_PEER_VERSION
playlist.type = VideoStreamingPlaylistType.HLS
playlist.storage = CONFIG.OBJECT_STORAGE.ENABLED
playlist.storage = CONFIG.OBJECT_STORAGE.ENABLED && CONFIG.OBJECT_STORAGE.STREAMING_PLAYLISTS.STORE_LIVE_STREAMS
? FileStorage.OBJECT_STORAGE
: FileStorage.FILE_SYSTEM
@ -475,7 +475,7 @@ class MuxingSession extends EventEmitter {
videoUUID: this.videoLive.Video.uuid,
sha256Path: join(this.outDirectory, this.streamingPlaylist.segmentsSha256Filename),
streamingPlaylist: this.streamingPlaylist,
sendToObjectStorage: CONFIG.OBJECT_STORAGE.ENABLED
sendToObjectStorage: this.streamingPlaylist.storage === FileStorage.OBJECT_STORAGE
})
}