Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions Pipfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
pyyaml = "*"
urllib3 = "*"
argparse = "*"
lxml = "*"

[dev-packages]

[requires]
python_version = "3.9"
143 changes: 143 additions & 0 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 16 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@

YCast is a self hosted replacement for the vTuner internet radio service which some Yamaha AVRs use.

It was developed for and tested with the __RX-Vx73__ series.

It was initially developed for and tested with the __RX-Vx73__ series.
It _should_ also work for the following Yamaha AVR models:
* RX-Vx75
* RX-Vx77
* RX-Vx79
* RX-Vx81
This version has been adapted and tested with the __RX-V577__ series, but not retested for the above models

YCast is for you if:
* You do not want to use a proprietary streaming service
* You are sick of loading delays and/or downtimes of the vTuner service
* You are unsure about the continuation of the service from Yamaha/vTuner

## Dependencies:
Python version: `3`
Python version: `3.6`

Python packages:
* `PyYAML`
Expand All @@ -31,7 +31,7 @@ itself gets handled by the AVR directly, i.e. you can run it on a low-spec RISC
* Create your initial `stations.yml`. The config follows a basic YAML structure (see below)
* Create a manual entry in your DNS server (read 'Router' for most home users) for:

`radioyamaha.vtuner.com`
`radioyamaha.vtuner.com` and/or `radioyamaha2.vtuner.com`

to point to the local machine running YCast.

Expand All @@ -42,14 +42,21 @@ itself gets handled by the AVR directly, i.e. you can run it on a low-spec RISC
Category one name:
First awesome station name: first.awesome/station/URL
Second awesome station name: second.awesome/station/URL

Subcategory one name:
First station in subcategory one: first.sub/station/URL
Second station in subcategory one: second.sub/station/URL
Subcategory two name:
First station in subcategory two: first.sub2/station/URL
Second station in subcategory two: second.sub2/station/URL
...
Category two name:
Third awesome station name: third.awesome/station/URL
Fourth awesome station name: fourth.awesome/station/URL
```

You can also have a look at the provided [example](examples/stations.yml.example) to better understand the configuration.

The location of the stations.yml file can be specified on the command line using `-s filepath`

## Web server configuration

Expand Down Expand Up @@ -83,3 +90,7 @@ YCast was a quick and dirty project to lay the foundation for having a self host
It is a barebone service at the moment. It provides your AVR with the basic info it needs to play internet radio stations.
Maybe this will change in the future, maybe not.
For now just station names and URLs; no web-based management interface, no coverart, no cute kittens, no fancy stuff.

The RX-577 shows only the first 8 entries of the top categories from stations.yml (no such limit for the subcategories)
The initial response should probably contain a tag with the amount of entries.
To know what tag,someone should tcpdump the full http conversation with the real server.
117 changes: 95 additions & 22 deletions examples/stations.yml.example
Original file line number Diff line number Diff line change
@@ -1,22 +1,95 @@
Electronic:
Deep House Lounge: http://198.15.94.34:8006
Ibiza Sonica: http://s1.sonicabroadcast.com:7005/stream
Bassdrive: http://50.7.98.106:8200
SomaFM Fluid: http://ice1.somafm.com/fluid-128-mp3

Chillout:
Joint Radio: http://radio.jointil.net:9998
SomaFM DEF CON Radio: http://ice1.somafm.com/defcon-256-mp3
SomaFM Drone Zone: http://ice1.somafm.com/dronezone-256-mp3
SomaFM Mission Control: http://ice1.somafm.com/missioncontrol-128-mp3
The Jazz Groove: http://west-mp3-128.streamthejazzgroove.com
Radionomy Downbeat: http://streaming.radionomy.com/TempoOfTheDownbeat1

Casual:
76Radio: http://192.240.102.133:9566/stream
SomaFM Beat Blender: http://ice1.somafm.com/beatblender-128-mp3
Jazz Radio Electro Swing: http://jazz-wr04.ice.infomaniak.ch/jazz-wr04-128.mp3
SomaFM Groove Salad: http://ice1.somafm.com/groovesalad-256-mp3
SomaFM Lush: http://ice1.somafm.com/lush-128-mp3
Allzic Radio R&B: http://allzic10.ice.infomaniak.ch/allzic10.mp3
The UK 1940s Radio Station: http://91.121.134.23:8100/1
AAA_Bookmarks:
Radio Paradise: http://stream.radioparadise.com/mp3-192
RP Mellow: http://icy-7.radioparadise.com/mellow-192
Willy: https://playerservices.streamtheworld.com/api/livestream-redirect/WILLY.mp3
Zenith Rock: http://148.163.81.10:8006/stream
By Location:
Belgie:
Willy: https://playerservices.streamtheworld.com/api/livestream-redirect/WILLY.mp3
VRT Radio 1: http://icecast.vrtcdn.be/radio1-high.mp3
VRT Radio 2:
VRT Radio 2 Antwerpen: http://icecast.vrtcdn.be/ra2ant-high.mp3
VRT Radio 2 Limburg: http://icecast.vrtcdn.be/ra2lim-high.mp3
VRT Radio 2 Oost-Vl: http://icecast.vrtcdn.be/ra2ovl-high.mp3
VRT Radio 2 Vl-Brabant: http://icecast.vrtcdn.be/ra2vlb-high.mp3
VRT Radio 2 West-Vl: http://icecast.vrtcdn.be/ra2wvl-high.mp3
VRT Klara: http://icecast.vrtcdn.be/klara-high.mp3
VRT Studio Brussel: http://icecast.vrtcdn.be/stubru-high.mp3
VRT StuBru De Tijdloze: http://icecast.vrtcdn.be/stubru_tijdloze-high.mp3
VRT MNM: http://icecast.vrtcdn.be/mnm-high.mp3
VRT MNM UrbaNice: http://icecast.vrtcdn.be/mnm_urb-high.mp3
VRT MNM Hits: http://icecast.vrtcdn.be/mnm_hits-high.mp3
VRT Ketnet Hits: http://icecast.vrtcdn.be/ketnetradio-high.mp3
Radio Nostalgie: http://nostalgiewhatafeeling.ice.infomaniak.ch/nostalgiewhatafeeling-128.mp3
Joe fm: http://icecast-qmusic.cdp.triple-it.nl/JOEfm_be_live_128.mp3
Q-music: http://icecast-qmusic.cdp.triple-it.nl/Qmusic_be_live_64.aac
Q-music 2: http://21283.live.streamtheworld.com/QMUSIC.mp3
RTB Classic 21: https://radios.rtbf.be/classic21-128.mp3


News + Talk:
VRTNWS: http://progressive-audio.lwc.vrtcdn.be/content/fixed/11_11niws-snip_hi.mp3
RTBF La Première: https://radios.rtbf.be/laprem1ere-128.mp3

By Genre:
Rock:
Nostalgie.be Rock Classics: http://streamingp.shoutcast.com/NostalgieRockClassics
Power Rock: http://streams.movemedia.eu:8330/;stream/1
Rock FM: http://streams.movemedia.eu:8440/;stream
Willy: https://playerservices.streamtheworld.com/api/livestream-redirect/WILLY.mp3
Zenith Rock: http://148.163.81.10:8006/stream

Easy Listening:
Nostalgie Pop: http://streamingp.shoutcast.com/NostalgieLove
Positivity Radio: http://ample-07.radiojar.com/d90sb07byuquv
RP Mellow: http://icy-7.radioparadise.com/mellow-192

Classical:
Klara: http://icecast.vrtcdn.be/klara-high.mp3
VRT Klara Continuo: http://icecast.vrtcdn.be/klaracontinuo-high.mp3
La Classica: http://stream.laclassica.be:8023/stream
RTBF Musiq 3: https://radios.rtbf.be/musiq3-128.mp3

Jazz:
Jazz Crooze: http://streams.crooze.fm:8002/listen.pls?sid=1
Nostalgie Jazz: http://streamingp.shoutcast.com/NostalgieJazz

Folk:
Folk Alley: http://freshgrass.streamguys1.com/folkalley-128mp3
Fresh Cuts (Folk Alley): http://freshgrass.streamguys1.com/freshcuts-128mp3
Irish (Folk Alley): http://freshgrass.streamguys1.com/irish-128mp3
FreshGrass (Folk Alley): http://freshgrass.streamguys1.com/ss1-128mp3

By Language:
French:
Nostalgie.be Chansons Françaises: http://streamingp.shoutcast.com/NostalgieChansonsFrancaises

Various:
Electronic:
Deep House Lounge: http://198.15.94.34:8006
Ibiza Sonica: http://s1.sonicabroadcast.com:7005/stream
Bassdrive: http://50.7.98.106:8200
SomaFM Fluid: http://ice1.somafm.com/fluid-128-mp3

Chillout:
Joint Radio: http://radio.jointil.net:9998
SomaFM DEF CON Radio: http://ice1.somafm.com/defcon-256-mp3
SomaFM Drone Zone: http://ice1.somafm.com/dronezone-256-mp3
SomaFM Mission Control: http://ice1.somafm.com/missioncontrol-128-mp3
The Jazz Groove: http://west-mp3-128.streamthejazzgroove.com
Radionomy Downbeat: http://streaming.radionomy.com/TempoOfTheDownbeat1

Casual:
76Radio: http://192.240.102.133:9566/stream
SomaFM Beat Blender: http://ice1.somafm.com/beatblender-128-mp3
Jazz Radio Electro Swing: http://jazz-wr04.ice.infomaniak.ch/jazz-wr04-128.mp3
SomaFM Groove Salad: http://ice1.somafm.com/groovesalad-256-mp3
SomaFM Lush: http://ice1.somafm.com/lush-128-mp3
Allzic Radio R&B: http://allzic10.ice.infomaniak.ch/allzic10.mp3
The UK 1940s Radio Station: http://91.121.134.23:8100/1


Xmas:
Kerstmuziek radio: https://20103.live.streamtheworld.com/SRGSTR08.mp3
Folk Alley Holiday: http://freshgrass.streamguys1.com/folkalley-holiday-128mp3

14 changes: 14 additions & 0 deletions gentoo/etc/conf.d/ycast/ycast
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# /etc/conf.d/ycast

supervisor="supervise-daemon"
#rc_need="nginx" # when running on a port different than 80, I use nginx on this PC as a reverse proxy

# ycast should listen on an IP address that is provided by dnsmasq (from name ycast).
# It should be different from the addresses where e.g. nginx listens for port 80 (so no 'listen 80' in nginx.conf, but 192.168.4.1:80)
# no other server should be listening on this IP address & port 80
# I do this because simply using proxy_pass in nginx doesn't work. It looks like Yamaha doesn't like the proxied reply
# check /etc/dnsmasq.d for the matching configuration

YCAST_ARGS="-l ycast -p 80"
YCAST_ARGS="$YCAST_ARGS -s /vetc/resources/net-radio/stations.yml"

14 changes: 14 additions & 0 deletions gentoo/etc/init.d/ycast/ycast
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

#extra_started_commands="reload"
command="/usr/local/bin/ycast.py"
command_args="${YCAST_ARGS}"
description="Fake vtuner Radio Directory Service"

depend() {
need net
use localmount
}

3 changes: 3 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
lxml==4.8.0
PyYAML==6.0
urllib3==1.26.8
Loading