avalonmediasystem / avalon

Avalon Media System – Samvera Application
http://www.avalonmediasystem.org/
Apache License 2.0
93 stars 51 forks source link

Investigate Serving MP3 Media through Avalon #5905

Closed joncameron closed 3 weeks ago

joncameron commented 1 month ago

Description

How can Avalon serve mp3 files? The Internet Archive archives audio material as FLAC and MP3 formats, and for large collections it should be possible to accommodate record creation in Avalon for large volumes of content if Avalon could be able to serve MP3 files, instead of the AAC audio in an MP4 container that is usually streamed.

The are multiple ways to try this:

HLS manifests aren't working when the stream is MP3 audio in an MP4 container. Adding this explicitly to the HLS manifest should allow this content to be playable in the browser as expected, but it doesn't appear to work and this may be a video.js issue.

Examples

https://demo.avalonmediasystem.org/media_objects/cv43nx098 MP3 with "skip transcoding": This item is unable to be played because of missing streaming derivatives. Please contact support to report this error: avalon@dlib.indiana.edu.

Done Looks Like

Reference

https://github.com/kaltura/nginx-vod-module

joncameron commented 1 month ago

May not be possible to added codec info to m3u8 files via nginx vod module.

Kevin Price from UT reported trying to use Ramp to play items; in the backend they're delivering mp3 files with the same mp4 container and they reported it's not supported in video.js. There was a Ramp ticket to investigate but we identified it as a video.js and it was closed. This could be different from this use case, or it could be the same issue popping up.

joncameron commented 1 month ago

Could be a way to do support in video.js besides adding the codec to the m3u8.

Or; could we have stream protection but just on progressive download of the mp3 files?

Can video.js handle mp3s outside of the m3u8 context?

Dananji commented 1 month ago

https://github.com/samvera-labs/ramp/issues/64, this could be a related issue?

elynema commented 1 month ago

We think this should work across devices and browsers, but should do a basic test to make sure mp3 is supported nicely in Ramp in all contexts.

Should also test with a very large file.

Item for testing: https://demo.avalonmediasystem.org/media_objects/9g54xh933

No token security on the stream at all; need to add the same auth we have on other streams

elynema commented 3 weeks ago

What would the ingest look like?

Need to test the API request and make sure it works to get it into Avalon in a way that the changes Chris has made still work. There is a possibility we'll need to make code changes to get that to work. MSU planning to use bib identifiers to pull the metadata in from an external ILS via SRU/z39.50.

Code commits in Avalon need to go into core; nginx config probably needs to go into avalon-docker.

elynema commented 3 weeks ago

Test MP3 on demo site played find across browsers and devices. There may sometimes be a lag in scrubbing straight to the end, but would be best to test a larger file to see if can get that to replicate reliably.

joncameron commented 3 weeks ago

Follow-up issue for testing and further refinement: https://github.com/avalonmediasystem/avalon/issues/5976.

elynema commented 2 weeks ago

Jon and Chris tested with several MP3s downloaded from Internet Archive ranging from 45 minutes to 60 minutes. Seeking seemed to work. Occasionally, seeking didn't quite end up where the user clicked; this may have been due to which range was downloaded, but overall it seemed workable.

elynema commented 1 week ago

More nginx config tinkering needed to ensure that auth is working. For these mp3 files, nginx is completely ignoring auth. Effort estimate for this is a 3. see #6002

Some code changes were made to Avalon to get skip HLS and just do progressive download (put MP3 URLs in the manifest). This is sitting in demo branch only, so needs to be brought into core and have tests added for it. Effort estimate is low 2. see #6003

Also useful to develop brief instructions for where to put the files and API to use to ingest them.