Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle playlist of internet radio stations #4572

Open
wants to merge 947 commits into
base: main
Choose a base branch
from

Conversation

ik666
Copy link
Contributor

@ik666 ik666 commented Apr 9, 2024

Added playlist support for handling internet radio stations. No transcoding yet (probably not neccesary for the usual codecs).

Feature can be tested with:

  • Generate Radio Browser playlist and copy it to a share (do not place to many radio stations inside playlist file, yet)

my_internet_radio_station.m3u file consists of radio stations like

#EXTM3U

#RADIOBROWSERUUID:962cc6df-0601-11e8-ae97-52543be04c81
#EXTINF:1,Dance Wave!
https://dancewave.online/dance.mp3
  • VLC navigating to VLC media player -> Universal Plug 'n Play -> UMS -> my_internet_radio_station.m3u -> radio

Netty 3 MediaServer implementation seems to have an issue serving large chunked streams and becomes more and more unresponsive over some time (a few seconds !).

JDK MediaServer implementation is much more responsive and stable over time. server_engine config entry should therefore be something like 1.

Todo :
[x] cache radio station metadata in a table
[-] currently for for a radio station 2 resources are created, one is VLC Web Audio (probably the renderer) and one is "no transcoding". Maybe this is only cosmetic and can stay this way.
[x] read metadata from radio browser API if possible
[-] adding support for hardware audio player (not in scope any more)

SurfaceS and others added 30 commits February 28, 2024 09:08
…sts_lc_name

Do not lowercase playlist name for display.
fix ServerSentEvents implementation
fix HttpExchangeServletRequest Servlet implementation
implements v12 jetty.server
implements v12 jetty.client
# Conflicts:
#	pom.xml
#	react-client/package.json
#	react-client/yarn.lock
# Conflicts:
#	CHANGELOG.md
#	src/main/external-resources/logback.headless.xml
#	src/main/external-resources/logback.xml
V14 fix directory not found on scanner
fix NPE when UPnP device strangely do not have details (JUPnP).
# Conflicts:
#	pom.xml
#	react-client/package.json
#	react-client/yarn.lock
# Conflicts:
#	pom.xml
#	react-client/package.json
#	react-client/yarn.lock
# Conflicts:
#	pom.xml
#	react-client/package.json
#	react-client/yarn.lock
# Conflicts:
#	CHANGELOG.md
# Conflicts:
#	pom.xml
#	react-client/package.json
#	react-client/src/App.tsx
#	react-client/yarn.lock
# Conflicts:
#	CHANGELOG.md
@SurfaceS
Copy link
Contributor

SurfaceS commented May 28, 2024

I'm not reviewed the core goal of the PR. Only the Java part and UMS integration.

stop using 'code entered is invalid' to bypass normal code.
@SurfaceS
Copy link
Contributor

Tell me if I'm wrong, but I checked the code and I think that the changes in RequestV2 can be completely removed, as the server serve the media url to the client (as it should), so this part is never/should never been reached (and UMS is not a proxy).

For the other part (retrieving media/radio info), we should care that some users do not want that UMS browse the internet (that is why I put this in external).

@ik666
Copy link
Contributor Author

ik666 commented May 28, 2024

Tell me if I'm wrong, but I checked the code and I think that the changes in RequestV2 can be completely removed, as the server serve the media url to the client (as it should), so this part is never/should never been reached (and UMS is not a proxy).

If you want the playlists to work as intended, UMS needs to retrieve the data from the external radio station and stream it to the renderer (is kind of a proxy). The stream could also be transcoded if needed. The external URL could of course on top be presented as a res resource in the DIDL result. The control point/renderer should pick the right one (as proposed by the CDS v4 service doc).

For the other part (retrieving media/radio info), we should care that some users do not want that UMS browse the internet (that is why I put this in external).

But: If UMS is not connecting to the internet, it can not serve the radio station. Then this feature won't work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants