ネットワークプレーヤーでラジコが聴ける!🤭

このあいだネットワークプレーヤーでインターネットラジオが聴けなくなったが、なんやかんやあって聴けるようになったという記事を投稿しました。
めでたしめでたしなんですが――、実際のところ最近はもっぱらアマゾンミュージックやラジコを聴いてたので、「聴けない!」という掻痒感が無くなっただけでそれほどQOLが上がったわけではありませんでした。

YCASTをセットアップする中で思ったのが、「これを使えばネットワークプレーヤーでラジコも聴けるようになるんじゃないか?」ということ。
持ってるネットワークプレーヤーの後継機種(といってもとっくに生産終了してますがー)のパイオニアのN-50AEではラジコが聴けるので羨ましく思っていたんです。

最初の思い付きは単純に「インターネットラジオもラジコも同じラジオでしょ?」

つまりラジコにも他のインターネットラジオよろしくストリームURLがあり、それをYCASTに登録すれば聴けるようになるのではないかと考えたのです。
でリサーチしたところ、そうは問屋が卸さずでそんな単純な話ではありませんでした。

まず第一の関門はラジコのURLを開くためには認証が必要で、認証せずに開くとエラーとなり音声を聴くことができません。
第二にHLS形式ストリーミングという方式を採用していて、古典的なインターネットラジオのような固定的なストリームURLがあるわけではないということ。

N-50AEにはたぶん機器の中に上記の処理を行うプログラムが入ってるんでしょうが、N-50Aには入っておらず、今後も入ることはありません。(事業撤退しちゃったんで)
なので前回のお話し同様、外部で補ってやる必要があります。

その第一の難題を解決する今回のヒーロー(一人目)は彼ッ!

ヒーローというよりなんかADみたいですが…。
この人が認証を代行して、ラジコのサイトから各ラジオ局のプレイリストを取得してきてくれます。

この認証というのが何をやっているのかちょっと謎なんですが、ラジコはエリアによって聴ける局が変わるので、どのエリアに属しているのかという情報を取り交わしているんじゃないかと思います。

第二の問題を解決するのはこの人!

これはサーバー上で動く音楽プレイヤー(iTunesとかWindows Media Playerみたいな)なんですが、HLS形式ストリーミングの再生ができます。
パソコンと違ってサーバーには必ずしもスピーカーは付いてないので、再生している音楽をストリームURLに再放流するという機能も付いてます(これがミソ)

またサーバーには必ずしもディスプレイが付いてないので、スマホ越しに操作して聴きたい曲を選べるという機能が付いてます。

このRadioRelayServerとMusic Player Daemon、そして前回紹介したYCATを協調させることでN-50Aでもラジコが聴けるようになるんです。

マンガにするとこんな感じですね。
図にしてもサーバーのところがごちゃついてちょっとわかりずらいですが…。

  1. RadioRelayServerがラジコからプレイリストを取得
  2. Music Player Daemonがプレイリストを読込んでラジオを再生し、家のネットワークに再放流
  3. YCASTがネットワークプレーヤーに再放流してるURLを案内

という流れです。

番組の選択はM.A.L.Pというアプリで行えます。

ラジオ局の切替えを行うと数秒音声が途切れますが、まぁまぁ快適な操作感です。
それにしてもこのアプリの感じ、N-50Aの操作アプリに似てますな。
おそらくN-50Aの内部、に限らず各社が出しているネットワークプレーヤーの中身も、Music Player Daemonみたいなオープンソースのサーバー向け音楽プレーヤーを独自にカスタマイズしたものが動いてるんでしょうね。

ネットサービスのメニューを開くと、YCASTに追加したラジコの番組が見えます。
選択するとアプリで指定したラジオ局を聴くことができました😎

これまでパソコンを開いてブラウザを立ち上げ、番組を選択して聴いていたのでだいぶ簡便になりました。
ラジオを聴くためにわざわざパソコンを開けなくていいというのは大きいですね。
ただネットワークプレーヤーの画面上だと”Radiko”としか表示されないので、どの局を聴いてるのか分からないのが難点ですな。
あと、可能であればアートワークに番組画像が出れば良いですね。

以下は、備忘録も兼ねて技術的な内容になります。
自分もRadioRelayServerを入れたいんだよォ、という人には有益かも知れません。
興味のない方はここでお別れですね。

①Music Player Daemonのインストール&設定

下記コマンドでインストールします。
apt-get install mpd

/etc/mpd.conf を編集します。
チマチマ変えるところがありますが、大事なのは家のネットワークに再放流する箇所の設定ですね。
ひな形が載ってるので、必要に応じてコメントを外して設定します。


#
# An example of a httpd output (built-in HTTP streaming server):
#
audio_output {
    type                 "httpd"
    name                 "Radiko"
    encoder              "lame"
    port                 "8000"
    bind_to_address      "0.0.0.0"
    bitrate              "128"
    max_clients          "0"
}


②RadioRelayServerの設定

ZIPでダウンロードして、2か所変更しました。

<start>


#!/bin/bash

nohup python3 manage.py runserver 0.0.0.0:9000 > /dev/null 2>&1 &


これは単にターミナルからRadioRelayServerを起動した後、ターミナルを閉じても動き続けて欲しいので、死なないようにオマジナイですね。

<radiko.py>


186c186
<                 'http://f-radiko.smartstream.ne.jp/'
---
>                 'http://c-radiko.smartstream.ne.jp/'


たった一行の修正(f-radikoをc-radikoに変えただけ)ですが、けっこう大事な修正です。
今年の一月にラジコの仕様変更がありそれに対応したものです。
ラジコは時たまこういう仕様変更を行うそうで、そのたびに受信するアプリはちょくちょく改修しなければいけないみたいです。
ラジコが聴けることを羨ましがっていたN-50AEですが、もうファームウェアアップデートは行われていないと思うので、多分もう聴けなくなってるんじゃないかと思います…。

んで起動ですが、RadioRelayServerはPythonというプログラム言語で書かれていて、DjangoというWebサーバで動きます。
ただ七面倒臭いことに、仮想環境というものを作ってその中で動かすというお作法があります。

その辺りの操作を当時は色々調べてやったのですが、ちょっと時間が空いてしまったので詳らかには思い出せませぬ…。
多分Pythonを動かすうえではごく一般的な話だと思うので割愛します。

ポイントとして、プレイリストは下記に書き込まれるので、あらかじめ空ファイルを作成しておいて書き込み権限を与えておく必要があります。

/var/lib/mpd/playlists/00_radiko.m3u

③YCASTの設定

stations.ymlに下記を追記しました。


Radio:
  Radiko: http://192.168.0.20:8000


以上の設定でネットワークプレーヤーでラジコが聴けるようになりました。
次はAmazonミュージックが聴けるようになると良いなぁ…。