Commit Graph
4 Commits
Author SHA1 Message Date
Raymon MensandGitHub 49ec2a5c2e fix(s3): fix path prefix not applied during segment cleanup (#4799)
* fix(s3): scope segment cleanup to path prefix, fix slice panic, batch deletes

When a path prefix is configured for S3 storage, uploads correctly
write to <prefix>/hls/... but cleanup lists objects from the bucket
root without the prefix. This causes a panic when the resulting
segment list is empty, due to unsafe slicing with a negative index.

- Centralize prefix construction in remoteHLSPrefix() so Save(),
  retrieveAllVideoSegments(), and rewritePlaylistLocations() all
  share the same logic. remoteHLSListingPrefix() adds a trailing
  slash for directory-scoped S3 listing.
- Use strings.Trim to normalize both leading and trailing slashes
  from the configured path prefix.
- Replace ListObjects with ListObjectsPages to handle buckets with
  more than 1000 segments.
- Batch DeleteObjects calls in chunks of 1000 to respect the S3
  API limit, and log per-object errors from the response.
- Guard getDeletableVideoSegmentsWithOffset against empty result
  sets to prevent the slice bounds panic.

Fixes #4784

* fix(s3): handle empty hlsPrefix in rewritePlaylistLocations

LocalStorage calls rewritePlaylistLocations with an empty prefix.
The previous refactor removed the fallback to "/hls", causing
double slashes and missing path segments in playlist URLs.

Default hlsPrefix to "hls" when empty to preserve existing behavior
for local storage setups with a custom video serving endpoint.
2026-02-23 14:46:43 -08:00
Tom FunkenandGitHub e375ea232a Renamed rewriteRemotePlaylist (#3313)
* Add support for remote serving endpoint on local storage

* Renamed rewriteRemotePlaylist
2023-09-21 17:58:02 -07:00
Gabe Kangas 1a7b6b99d5 feat(storage): support a object storage custom path prefix 2023-08-11 22:18:45 -07:00
Gabe KangasandGitHub cd458630ec Support using the custom video serving endpoint even if you don't use object storage (#2924)
* feat(video): refactor video serving endpoint

It can now be used without an object storage provider. Closes #2785

* fix: remove debug log
2023-05-30 14:05:24 -07:00