Giter VIP home page Giter VIP logo

audioserve's People

Contributors

bougakov avatar izderadicka avatar jkuettner avatar mpatton125 avatar muggenhor avatar naglis avatar renovate[bot] avatar srd424 avatar zachmyers3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

audioserve's Issues

Disable loading meta info when open filder

Thanks for your audio server. This is exactly what I am looking for: a file based stream server for audio books.

However, I have some folders contains more than 500 files. It takes over 1 min to open that folder and Android app just timeout and make it useless.

Is it possible to disable the loading meta code when I open the folder? I think for folder based approach, the meta data can be totally ignored until the open time.

Thanks

Feature Request: Dark theme & cover view

Hey, great work on this project, loving it so far! It Would be nice to have a dark theme option. Also it would be nice to have the option to display the cover images if there is one present in the directory instead of the directory name. Cheers!

New Web Client

Opening new issue for new web client. Current one has definitely issues and @KodeStar started to work on new one.

Add support for m4b single file, large mp3

One thing that is missing is support for one file audiobooks like m4b (which are now quite popular), large mp3 or aax (which are basically m4b, just encrypted with audible drm) or m4a (same as m4b just different extension).
Idea is to represent such file as a folder,, where containing files will be chapters in the file (or in case where there are no chapters meta just parts of same size, say 30 minutes).
This will require that chapters will be always served through ffmpeg remuxed or transcode to given chapter part only - start time till end time.
The key prerequisite is meta parsing library, that provides chapters meta ( need to look to my livavformat binding).
Best way to represent in API is to extend attributes for folder (to indicate that folder in actually multi chapters file) and for file (indicate that file is actually chapter, it's time offset in the file).

Feature Request: Mark tracks with audio problems

I completely understand that this may be something that isn't often thought of or needed, but it would be great to be able to mark a track that has audio errors in it such as clicking or popping.

M4B files with AAC using "scalable configurations" cannot be played without transcoding

Without transcoding, just remuxing audio stream ffmpeg fails with

[adts @ 0x562cb448d440] Scalable configurations are not allowed in ADTS
Could not write header for output file #0 (incorrect codec parameters ?): Invalid data found when processing input

Also some information about similar problem is here https://rentry.co/n4ost
From there:

FWIW, I've got to the bottom of the problem with those specific files .. they're de-DRMed Audible AAX files, and for some reason those sampled at 44.1kHz have a bit flipped in the ESDS atom's Audio Specific Config section .. it's referred to as "dependsOnCoreCoder" in most OSS code. Flipping it back makes the file playable without transcoding.

So question is now - is it a problem of file - incorrectly prepared? Or can we somehow fix with some additional ffmpeg params?

Does not look as easy to fix - as for now WA is play them transcoded.

ERR_CONNECTION_REFUSED

I've installed the docker, ran the command but when I try and access my server on port 3000 I get "This site can’t be reached" - what could I be doing wrong?

When I run "docker ps" I can see that audioserve IS running on port 3000

Client fails to load with hostname in URL, ip works fine.

URL with hostname: No prompt, just the animation
URL with IP: works fine.
hostname resolves to the IP on both server and client.
hostname resolves to a different IP in public domain

Audioserve did not log anything in std or err.
I am not proficient with web debug to go further.

I will try to find out more and update the issue.

iOS and OSX+Safari do not support opus+ogg audio format

Apple platforms do not support opus+ogg format, which is default in audioserve.
On OSX alternative browser(FF or Chrome) seems to work fine, but Safari is not.

I think Apple supports opus, but only in matroska container, which does not work well with on-flow transcoding (as it requires seek access to stream to update header).

I think we should provide alternative configuration for apple platforms - probably aac codec?
As I'm not using Apple, I'm just opening this issue if somebody has more experiences (and it would not be any problem to add additional transcoding configurations, provided it's supported by ffmpeg).

@paulmorabito - what transcodings did work for you on iOS?

Feature request: similar functionality for MP4 / AVI video files

Audioserve is very helpful for listening to audiobooks hosted on a local file server.

But in addition to the audiobooks I have lots of educational courses in MP4 or AVI format. They are also organized in folders, such as Topic 03 / Chapter 11.mp4

I'd be extremely happy if I could watch those courses in a browser in a similar manner. Can you please add support for streaming them directly, without transcoding? I presume that the required changes are minimal and require only adding a JavaScript video player to the client, such as https://plyr.io/, https://videojs.com/ or http://jplayer.org/ Thanks in advance.

Implement Subsonic API for audioserve

This can help with limited clients - especially mobile clients - as there are already couple of Subsonic API clients.
Not sure if we can match Subsonic API to audioserve, but at least it worth to research.

[security] Shared Secret Mechanism is ineffectual

As you've already mentioned in the README:

As the token can be used to steal the session https is recomended (TLS support is build in).

So the whole shared secret calculation doesn't really improve the security in any way. A HTTP session is always going to be vulnerable to replay attacks in such scenarios and the best you can do is to make sessions short lived so stolen sessions don't last long.

However, seeing as that is not the case, I'd suggest replacing the complicated shared secret calculation with a simple Bearer Token Auth or Basic Auth instead.

Please don't roll your own crypto. You're already pushing people to TLS, which is the right solution to the problem here.

Folder Picture

Hello,

I love your so smart but simple server. I am hosting a lot of audio books for my kids. They haven't learned reading so far and I wonder if you could read out of the Folder a picture (jpg file or mp3 meta) and position it before folder name?

Thanks for your effort

Prebuilt windows release

I am with my current setup not able to run docker, it would thus be really helpful to have a prebuilt windows release available, especially since the current instructions don't work according to some other issues.

Docker Auto-update

Linuxserver.io dockers usually auto update the application contained inside. IF the Audioserve docker does not, could you add that (I'm sure LS.io guys would be happy to help with pointers!)

Secret not working and Android unable to connect

Firstly, I really like what's being done with this tool, and especially the app. If I can get it up and running I think it'll be perfect for me. So, thanks for making it!

My setup is running in docker with a reverse proxy, which works fine to serve up the site, but the shared secret seems to be ignored entirely. The audioserve.secret key is being created and there is nothing in the logs to indicate any issues.

I tried opening the port to the web and it still ignores the shared secret so it seems like it's not an issue with the reverse proxy.

Additionally, and perhaps this is somewhat unrelated, when trying to connect to the server through the Android app I get a generic server error message, whether or not I have set a shared secret.

If I go to the site to test out the response from the API manually, I get expected responses except where I go to /authentication and simply get 'Not Found'.

As an aside it would be super useful to serve the API requests from a shared sub-directory such as /api so I could easily add different auth settings for the API. :)

Building for Windows 10 - 'cannot run ffmpeg build script'

Hi. I've tried to build the project on Windows.

I've downloaded 64-bit distribution of Rust and installed it. I've also downloaded and installed Build Tools for Visual Studio 2019 (to obtain link.exe).

I've also downloaded an FFmpeg build with shared libraries and saved its contents straight to the Windows folder.

Build process breaks at media_info (audioserve builds just fine):

C:\Users\sanja\Downloads\audioserve-master\audioserve-master>cargo build --release --features partially-static
   Compiling winapi v0.3.8
   Compiling proc-macro2 v1.0.9
   Compiling syn v1.0.16
   Compiling memchr v2.3.3
   Compiling fnv v1.0.6
   Compiling winapi-build v0.1.1
   Compiling log v0.4.8
   Compiling libc v0.2.67
   Compiling lazy_static v1.4.0
   Compiling bytes v0.5.4
   Compiling slab v0.4.2
   Compiling winapi v0.2.8
   Compiling futures-core v0.3.4
   Compiling byteorder v1.3.4
   Compiling itoa v0.4.5
   Compiling proc-macro-nested v0.1.3
   Compiling typenum v1.11.2
   Compiling futures-sink v0.3.4
   Compiling iovec v0.1.4
   Compiling serde v1.0.104
   Compiling pin-project-lite v0.1.4
   Compiling pin-utils v0.1.0-alpha.4
   Compiling futures-io v0.3.4
   Compiling futures-task v0.3.4
   Compiling getrandom v0.1.14
   Compiling byte-tools v0.3.1
   Compiling bitflags v1.2.1
   Compiling version_check v0.9.1
   Compiling ident_case v1.0.1
   Compiling strsim v0.9.3
   Compiling autocfg v1.0.0
   Compiling matches v0.1.8
   Compiling httparse v1.3.4
   Compiling smallvec v1.2.0
   Compiling ppv-lite86 v0.2.6
   Compiling fake-simd v0.1.2
   Compiling opaque-debug v0.2.3
   Compiling base64 v0.11.0
   Compiling quick-error v1.2.3
   Compiling ryu v1.0.2
   Compiling percent-encoding v2.1.0
   Compiling cc v1.0.50
   Compiling utf-8 v0.7.5
   Compiling derive_builder v0.9.0
   Compiling try-lock v0.2.2
   Compiling native-tls v0.2.3
   Compiling mime v0.3.16
   Compiling unicode-width v0.1.7
   Compiling linked-hash-map v0.5.2
   Compiling media_info v0.1.4 (C:\Users\sanja\Downloads\audioserve-master\audioserve-master\crates\media_info)
   Compiling tower-service v0.3.0
   Compiling regex-syntax v0.6.14
   Compiling dtoa v0.4.5
   Compiling vec_map v0.8.1
   Compiling strsim v0.8.0
   Compiling ego-tree v0.6.2
   Compiling untrusted v0.7.0
   Compiling spin v0.5.2
   Compiling bit-vec v0.6.1
   Compiling audioserve v0.12.1 (C:\Users\sanja\Downloads\audioserve-master\audioserve-master)
   Compiling data-encoding v2.2.0
   Compiling kernel32-sys v0.2.2
   Compiling ws2_32-sys v0.2.1
   Compiling thread_local v1.0.1
   Compiling input_buffer v0.3.1
   Compiling http v0.2.0
   Compiling futures-channel v0.3.4
   Compiling block-padding v0.1.5
   Compiling unicase v2.6.0
   Compiling unicode-bidi v0.3.4
   Compiling indexmap v1.3.2
   Compiling unicode-normalization v0.1.12
   Compiling humantime v1.3.0
   Compiling c2-chacha v0.2.3
   Compiling textwrap v0.11.0
   Compiling yaml-rust v0.4.3
error: failed to run custom build command for `media_info v0.1.4 (C:\Users\sanja\Downloads\audioserve-master\audioserve-master\crates\media_info)`

Caused by:
  process didn't exit successfully: `C:\Users\sanja\Downloads\audioserve-master\audioserve-master\target\release\build\media_info-8e411d9664ae1e6e\build-script-build` (exit code: 101)
--- stderr
thread 'main' panicked at 'cannot run ffmpeg build script: Os { code: 193, kind: Other, message: "%1 is not a valid Win32 application." }', crates\media_info\build.rs:17:23
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

warning: build failed, waiting for other jobs to finish...
error: build failed

Unfortunately, I have zero experience with Rust, so I can only help with details but not with fixes. Any ideas on how to solve this? Thanks.

config file

As there are many program arguments add support for config file - with override by actual command line arguments.

Static compilation

I'm having problems with full static compilation of audioserve due to usage of C++ library libtag. Some details are described here
emk/rust-musl-builder#65. Looks like C++ and Rust have some friction when compiled together statically. If anyone knows a good way out please let me know, as static compilation would be beneficial for deployment (really lean docker image or direct binary download).

Preflight CORS requests are not hadled correctly

When using with --cors header and other web client, served from different location then API, and which sends preflight requests , then
OPTIONS preflight for /authenticate return 401 status,
thus
client/web browser cannot access the endpoint

OPTIONS requests handling has to be fixed in audioserve - especially when --cors switch is on.

Feature Request: Log Failed Logins

Request: output failed login attempt with IP and timestamp to a log folder.
Reason: this will allow a user to block an ip for those that expose the server publicly.

Side note: Thanks for this project! I've tried lots of other options and this one is truly KISS.

Change Dockerfile to create smaller image

Current Dockerfile creates image with size over 2GB. It's just too much!

Try to come with something smaller - using Ubuntu as base is not efficient, majority of things is just not needed.
audioserve compiles to one binary plus two additional files are needed (index.html and bundle.js for web client).
audioserve depends on few dynamic libraries:

ldd /opt/audioserve/audioserve
	linux-vdso.so.1 =>  (0x00007ffdd6df4000)
	libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f848886f000)
	libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f8488492000)
	libtag_c.so.0 => /usr/local/lib/libtag_c.so.0 (0x00007f8488289000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8488085000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f8487e7d000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8487c5f000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8487a49000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8487680000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f8489219000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f848737a000)
	libtag.so.1 => /usr/local/lib/libtag.so.1 (0x00007f8486fc9000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f8486cc5000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8486aac000)

Try complely static build with musl libc? Then it can use alpine linux?

Websocket errors in error logs

My logs are full of these messages:

 ERROR websock > Upgrade is not to websocket
 ERROR websock > It must be upgrade connection

I'm running audiosurf behind an nginx proxy. Do I need to do something special to get WS to work behind there?
I'm on HTTPS-only.


Originally posted by @Mange in #16 (comment)

Feature Request: PWA support

It would be great if the page also "exposed" itself as a PWA, so that it could be added as an "app" in IOS, and Android.

Improve security

Recently I have been thinking bit more about security of audioserve. And yes I have found one nasty issue (fixed now from v0.15.0) and that motivated me to give more thought to security.

audioserve is not meant to be super secretive, military grade. I'm assuming that people are just streaming audiobooks (or other audio) and that is no big deal, nothing really clandestine. But on the other hand audioserve should be solid and should not allow it's misuse to endanger its hosting system.

So what I have done recently:

  • fix bug
  • added more information related to security and best practices
  • added more detailed logging of authentication failures (including client IP address)
  • added wait time after detecting incorrect shared secret - to slow down potential brute force attacks
  • added possibility to limit rate of http requests - to protect system in case of DDoS (also you can solve this on reverse proxy - probably better, but thought it would be nice to have it in audioserve too). BTW number of transcodings (which are most resource intesive) is limited already - from very first version of audioserve.

But I'd like to also get some feedback from users - so please share here:

WHAT ARE YOUR SECURITY ISSUES OR CONCERNS OR QUESTIONS?

(I'll keep this issue opened for while to collect feedback).

MS Edge browser is not working

JS error SCRIPT5009: 'TextEncoder' is not defined.
This error appears during authentication.

Edge is definitely not priority, but if anyone wants to look at it.

unRAID Template

Any chance of creating an unRAID template and share it to Community Applications?

Or an easy guide to installing it on unRAID.

Option typo in main document

they can be enabled by --allow-soflinks program argument.

Should this be --allow-symlinks? The latter works, the former causes a server error.

Noob question: How to update?

I used this command to install audioserve

docker run -d --name audioserve -p 3000:3000 -e AUDIOSERVE_SHARED_SECRET=mysecret -v /home/myusername/audiobooks:/audiobooks izderadicka/audioserve /audiobooks

How to I update to the newest version? I could not find any documentation. Thanks for your help. I am a noob, still learning Linux and Docker

Simple editable list support

I use Syncthing to move my audiobooks to my mobile for offline play - I'm not interested in a streaming client, it would cost me too much (although my brother would use it). But I'd like to have a way to manage my library online, and audioserve looks almost perfect for that.

First, would it be possible to think about adding booklists, or shelves, that users could add and remove books to? The minimum I want is a "currently reading" shelf.

Second, would it be possible to provide some minimal API (maybe RESTlike) to get a user's shelf contents?

Audiofile (.mp3) showing up as a subfolder and not a file.

Hey there, enjoying the software, its exactly what I need.

I have come across an issue with a few files though. For some reason, I have a mp3 file which keeps displaying as a subfolder. I thought it had an extra stream in, when I click on the .mp3 name it then takes me to another sub directory where I can play the actual mp3 file and a random non-playable file.

It should just play my mp3 file like the others. I have included a few snapshots below. Most other MP3 files work fine. Also included is an output of ffprobe with two files, one of which displays as a file, the other as a sub-folder. Only difference I can see is the encoder tag. Any help would be great.

image

image

ffprobe output for working file

    "streams": [
        {
            "index": 0,
            "codec_name": "mp3",
            "codec_long_name": "MP3 (MPEG audio layer 3)",
            "codec_type": "audio",
            "codec_time_base": "1/44100",
            "codec_tag_string": "[0][0][0][0]",
            "codec_tag": "0x0000",
            "sample_fmt": "fltp",
            "sample_rate": "44100",
            "channels": 2,
            "channel_layout": "stereo",
            "bits_per_sample": 0,
            "r_frame_rate": "0/0",
            "avg_frame_rate": "0/0",
            "time_base": "1/14112000",
            "start_pts": 353600,
            "start_time": "0.025057",
            "duration_ts": 11389501440,
            "duration": "807.079184",
            "bit_rate": "128000",
            "disposition": {
                "default": 0,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0
            },
            "tags": {
                "encoder": "LAME3.96r"
            },
            "side_data_list": [
                {
                    "side_data_type": "Replay Gain"
                }
            ]
        }
    ],
    "format": {
        "filename": "Sylvia Plath  - The Bell Jar CD1 - Track 01.mp3",
        "nb_streams": 1,
        "nb_programs": 0,
        "format_name": "mp3",
        "format_long_name": "MP2/3 (MPEG audio layer 2/3)",
        "start_time": "0.025057",
        "duration": "807.079184",
        "size": "13027567",
        "bit_rate": "129132",
        "probe_score": 51,
        "tags": {
            "disc": "1/7",
            "track": "1/38"
        }
    }
}```

ffprobe output for file showing as a subfolder
```json{
    "streams": [
        {
            "index": 0,
            "codec_name": "mp3",
            "codec_long_name": "MP3 (MPEG audio layer 3)",
            "codec_type": "audio",
            "codec_time_base": "1/44100",
            "codec_tag_string": "[0][0][0][0]",
            "codec_tag": "0x0000",
            "sample_fmt": "fltp",
            "sample_rate": "44100",
            "channels": 2,
            "channel_layout": "stereo",
            "bits_per_sample": 0,
            "r_frame_rate": "0/0",
            "avg_frame_rate": "0/0",
            "time_base": "1/14112000",
            "start_pts": 353600,
            "start_time": "0.025057",
            "duration_ts": 9596805120,
            "duration": "680.045714",
            "bit_rate": "128000",
            "disposition": {
                "default": 0,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0
            },
            "tags": {
                "encoder": "Lavc58.91"
            }
        }
    ],
    "format": {
        "filename": "Part 0 - Intro.mp3",
        "nb_streams": 1,
        "nb_programs": 0,
        "format_name": "mp3",
        "format_long_name": "MP2/3 (MPEG audio layer 2/3)",
        "start_time": "0.025057",
        "duration": "680.045714",
        "size": "10885633",
        "bit_rate": "128057",
        "probe_score": 51,
        "tags": {
            "major_brand": "isom",
            "minor_version": "512",
            "compatible_brands": "isomiso2mp41",
            "comment": "",
            "copyright": "Penguin Random House Audio Publishing Group",
            "media_type": "2",
            "genre": "African American Nonfiction/Biography & Autobiography/Nonfiction/Politics",
            "disc": "0",
            "track": "1",
            "title": "Part 0 - Intro",
            "artist": "Barack Obama",
            "album": "A Promised Land",
            "album_artist": "A Promised Land",
            "encoder": "Lavf58.45.100"
        }
    }
}```

Allow caching of entire folder

Often, simply downloading the entire audiobook instead of having to have a connection to the server all the time is useful, if you know you aren't going to be near a connection all the time.

Error creating secret permission denied -- docker linux

Trying to create a docker container based on the izderadicka/audioserve:latest I continually run into a permission denied error for creating/reading the secret. I have about 8 other containers that right to similar directories using the same PGID+PUID without error (everything being under a directory for the docker user each service having it's own "config" folder). I've tried using the synology GUI updating all the info and command, I've tried sudo and nonsudo docker run commands via SSH, and tried creating the run-audioserve.sh file in the setup guide all to no avail. Does the container setup accept PUID/PGID as environment inputs or does a hardcoded PUID have to be changed somewhere to the correct value for access to said directories?

Playback speed

It would be nice to have the ability to set the playback speed per audiobooks. I like to listen at faster speed than 1x.

iOS devices - playback error

Hi,

I'm trying to access AudioServe using iOS Safari on a 2017 IPad (latest iOS release) and get a playback error. The logs in docker show this, though I am not sure it's directly related:

WARN audioserve::services::transcode > Transconding of file "/audiobooks/file.mp3" failed with code Some(1)

The same file plays on android and MacOS desktop as well as Windows.

Any help would be very appreciated.

Support for rendering or downloading PDF/html

I have a collection of language learning audibooks and podcasts that often come with PDF (grammar guide, scan of a book) and html (transcript) files that you supposed to look at while you are listening.

It would be nice to a have an ability to view those files in a browser or at least be able to download them.

Example:

.
├── 01. Who is That Japanese Person  - Audio.mp3
├── 02. Would You Like a Japanese Gift or Not  - Audio.mp3
├── 03. I Don't Know Why This is Happening in Japan - Audio.mp3
│   ...
├── pdf
│   ├── 01. Who is That Japanese Person  - Kanji Close-Up.pdf
│   ├── 01. Who is That Japanese Person  - Lesson Notes.pdf
│   ├── 02. Would You Like a Japanese Gift or Not  - Kanji Close-Up.pdf
│   ├── 02. Would You Like a Japanese Gift or Not  - Lesson Notes.pdf
│   ├── 03. I Don't Know Why This is Happening in Japan - Kanji Close-Up.pdf
│   ├── 03. I Don't Know Why This is Happening in Japan - Lesson Notes.pdf
│   ...
└── trans
    ├── 01. Who is That Japanese Person  - Line-By-Line Audio Transcript.html
    ├── 02. Would You Like a Japanese Gift or Not  - Line-By-Line Audio Transcript.html
    ├── 03. I Don't Know Why This is Happening in Japan - Line-By-Line Audio Transcript.html
    ...

Synchronize playback position between players

I've seen this requirement in discussion on reddit. It would be surely cool functionality, but not easy to implement. My initial thoughts:

No immediate plans in audioserve. It'll require significant change+ new functionality. Theoretically I was thinking about separate service/process, where each player can publish position (using WebSocket connection while playing?). And get updates when starts to play after pause. Then decides if wants to continue from local position or skip to latest remote position. Something like this. But this will require a lot of work.

Spacebar pause/play

It would be nice to be able to use the spacebar as shortcut to play and pause the audiobook in the web client.

Base URL

Is there an option to configure the base URL to use audioserve when using a reverse proxy? I can't find one in the configuration.

Docker improvements

Hello, i think docker image can be better if:

  1. Accessible from hub.docker.com
  2. Provides parameters for enable/disable https, enable/disable passkey, set custom passkey

Hope project is not dead

Docker image shutting down after a few days

I'm running the service inside the official docker image and proxy it via nginx + let's encrypt. After a few days the process exits with status code 0 and no log output, making nginx shut down (for domain name reasons with docker-compose; but that's not the issue here).

Is there some way I can try to debug this problem? I'm pretty confident in Rust, but it's also running on a server with limited hardware, so recompiling constantly is probably not going to work for me.

It's happened four times now, so I'm now turning on restart: unless-stopped to work around it, but getting to the cause of the issue would be preferred by me.

The little information I can give:

  1. Process had no output. Exit status 0.
  2. The most I've been able to have the container running at a time: Around 3 days.
  3. Service works well when it's running (although it emits a lot of warnings about upgrading websockets.
  4. Memory pressure on the server is fine. It was not killed by OOM killer according to docker inspect either.
  5. CPU usage has been low up until the service died.
  6. No problem with disk space.
  7. Server has had no network interruptions during this time.
  8. No other container (I run around 11 of them) has any similar issues.
  9. Server is my own hardware at home, not a cloud host or a VM. No hardware issues that I know of, and it's pretty new.

I'm sorry I cannot give any more information. This "issue" is literally me asking for ideas on what to look for so I can give you better information.

Upgrade to new futures and async/await style

New futures made it to std, new hyper(0.13) and tokio(0.2) are also out, so it's time to update. There would be quite a lot of changes so I assume significant effort.

Unfortunately right now I do not have much time, but this is high priority for sure.

Media With Trailing Spaces Not Accessible

Hi,

thanks for developing audioserve, it's exactly the tool I was looking for.

Running audioserve 0.15.4 in a docker environment without a special custom config.

I accidentally put a trailing space into a folder name, this made the folder inaccessible through the web interface and I jumped right to the start page.

Not a major thing, but anyway, spaces should not break the system, right? 😄

Thanks again and have a nice day.

Enhancements to the API

Aggregated info
Book name
Book author
Total time
sha256 hash of folder contents

Group details
Such as

{
  "Kode": {
    "playback_speed": "1.5",
    "active_books": [
      {
        "name": "Artemis Fowl",
        "author": "Eoin Colfer",
        "folder": "Eoin Colfer/Artemis Fowl/AF01 - Artemis Fowl",
        "cover": "cover/Eoin Colfer/Artemis Fowl/AF01 - Artemis Fowl/Artemis Fowl 1 - Artemis Fowl.jpg",
        "current_position": "19827",
        "total_time": "60481",
        "hash": "263bc4f19f5e291fce24e6d4a6e4442e6f893cbabbcc737f105dff8d2cf8d845"
      },
      {
        "name": "Billionaire Boy",
        "author": "David Walliams",
        "folder": "David Walliams/Billionaire Boy",
        "cover": "cover/David Walliams/Billionaire Boy/Billionaire Boy.jpg",
        "current_position": "19827",
        "total_time": "60481",
        "hash": "123bc4f19f5e291fce24e6d4a6e4442e6f893cbabbcc737f105dff8d2cf8d375"
      }
    ],
    "finished_books": [
      "961bc4f19f5e291fce24e6d4a6e4442e6f893cbabbcc737f105dff8d2cf8d219",
      "66fc3b5726ad08f34ec7e6f9952e889d1eec1efc9180c8c48fc2e8c35373efc7"
    ]
  },
  "Bob": {
    "playback_speed": "1.2",
    "active_books": [
      {
        "name": "Artemis Fowl",
        "author": "Eoin Colfer",
        "folder": "Eoin Colfer/Artemis Fowl/AF01 - Artemis Fowl",
        "cover": "cover/Eoin Colfer/Artemis Fowl/AF01 - Artemis Fowl/Artemis Fowl 1 - Artemis Fowl.jpg",
        "current_position": "19827",
        "total_time": "60481",
        "hash": "263bc4f19f5e291fce24e6d4a6e4442e6f893cbabbcc737f105dff8d2cf8d845"
      }
    ],
    "finished_books": [
      "961bc4f19f5e291fce24e6d4a6e4442e6f893cbabbcc737f105dff8d2cf8d219",
      "66fc3b5726ad08f34ec7e6f9952e889d1eec1efc9180c8c48fc2e8c35373efc7",
      "8e5fe3893ab85cdaa606ef27061cba04238ed49e05431018fe7d6f47711f734e"
    ]
  }
}

Folder playback status
Grouped by
API endpoints for start and stop that log to a history, something like:

{
  "Kode": {
    "current_position": "19827",
    "history": [
      {
        "start": "1631086131",
        "startSeek": "19327"
        "finish": "1631586131",
        "finishSeek": "19827"
      },
      {
        "start": "1633086131",
        "startSeek": "19827"
        "finish": "1633586131",
        "finishSeek": "20327"
      }
    ]
  },
  "Bob": {
    "current_position": "19827",
    "history": [
      {
        "start": "1631086131",
        "startSeek": "19327"
        "finish": "1631586131",
        "finishSeek": "19827"
      },
      {
        "start": "1633086131",
        "startSeek": "19827"
        "finish": "1633586131",
        "finishSeek": "20327"
      }
    ]
  }
}

This would work for playback on other devices as well, rather than relying on websockets, just record the latest position, then on another device load up the group information and continue from the position. Having the history is useful for situations where playback has started accidentally, you can go to your history and start playback from the last location.

Users? Or multiple secrets & associate bookmarks to them?

First off, fantastic project! This is almost exactly what I’ve been looking for. One issue... users. I respect that there is a desire to keep things simple and just use one secret. However, if I share my library with my family, bookmarks are going to get jumbled up. How about having multiple secrets and associating bookmarks with a secret? Or perhaps a simple user,pass csv file? It would be nice if the small number of users I’d grant access to the server would each have their own bookmarks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.