Hi, here is the situation:

We have about 15000 files in our collection, most of them are music,
some (about 5000) are shows sent to us by our contributors, those can
be quite big, their duration ranges from 5 minutes to an hour.

Our schedule is made of a switch of shows:
switch([({time_period}, show), ...])

Shows are usually of the form:
sequence([single(jingle), single(episode), playlist(filler)])

This setup worked quite well for the last 3 years, but now i'm
migrating all our services to another VPS provider.
Those VPS have limited disk space, but the provider also propose S3
storage. So i put all our collections in S3 and wanted to start using
that.

First solution: s3fs
It works, no changes to my LS scripts. BUT: CPU usage is very high
while getting the files, even with cache.

Second solution: LS aws protocol
It uses aws, and it seems it can only get one file per request, not a
whole object hierarchy

Third solution: my own S3 protocol
It uses s3cmd, get objects recursively, sends the request to
http|https if the object is public (this last feature uses `s3cmd info
uri`, and the returned field 'URL', not sure if it is available on any
S3, maybe it's just my provider).

Now, here is the problem:
Our schedule may not use the whole collection, (we have some archived
shows) but it sure does use a big part of it, some playlists are quite
large (the night show is basically a playlist on the whole music
directory).
From what i understand, request resolution happens as soon as LS
starts, so my scripts end up downloading... the whole collection!
I believe this defeat the purpose of having files on an external
service, be it http, S3, whatever.
And in any case, i simply can't have that, i don't have the disk space
on my VPS.

I tried, using my own s3 protocol, to use input.http and input.https
for public files, in hope that would solve the "download all" problem
(instead it would become a "stream all" problem), but i get a LOT of
'buffer overrun' and the sound gets choppy, increasing the buffer size
only delay the problem on big files (like many shows which last one
hour), and dramatically increase CPU/RAM usage.

Ok, you're still reading, thank you.
Here is the big question now:
I understand that LS need a local copy of the file to work on, but is
there any way that i make it get the file only when it need to play
it, and then remove it?
Before that it would just resolve a _list_ of the available files (using
s3/http/https i can make sure the file _does_ exists without actually
downloading it), and build its activations based on that.
Or is liquidsoap just not the right tool for the job, and so i should
just use (request|source).dynamic and use an external service to handle
my schedule/request resolution?

Thank you for reading

Attachment: pgpW9uu8KB2Eg.pgp
Description: OpenPGP digital signature

_______________________________________________
Savonet-users mailing list
Savonet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/savonet-users

Reply via email to