やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

ラズパイでネットラジオを聞く(NHK らじる★らじる )

 災害時には国営放送を聞きたい。近況が知れる。

前提

参考

手順

 2018-09-09時点。

0. API

0-A. APIキー必須

0-B. APIキー不要

種類 URL
一覧 http://www.nhk.or.jp/radio/config/config_web.xml
noa api https://api.nhk.or.jp/r2/pg/now/4/{area}/netradio.json
program detail api https://api.nhk.or.jp/r2/pg/list/4/{area}/{service}/[YYYY-MM-DD].json
program info api https://api.nhk.or.jp/r2/pg/info/4/{area}/{service}/{dateid}.json
URL
{area} 一覧で取得した<areakey>の値
{service} n1: NHK第1
n2: NHK第2
n3: NHK-FM
[YYYY-MM-DD] 日付(2018-09-09
{dateid} netradio.json APIから取得する。例: 2018090967186

1. URLを取得する

  1. ブラウザを起動する
  2. URL入力欄にhttp://www.nhk.or.jp/radio/config/config_web.xmlを入力する
  3. 応答結果から放送URLを取得する
<data>
<areajp>札幌</areajp>
<area>sapporo</area>
<apikey>700</apikey>
<areakey>010</areakey>
<r1hls>
<![CDATA[
https://nhkradioikr1-i.akamaihd.net/hls/live/512098/1-r1/1-r1-01.m3u8
]]>
</r1hls>
<r2hls>
<![CDATA[
https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8
]]>
</r2hls>
<fmhls>
<![CDATA[
https://nhkradioikfm-i.akamaihd.net/hls/live/512100/1-fm/1-fm-01.m3u8
]]>
</fmhls>
</data>

 上記は札幌におけるデータ。URLは以下。

チャンネル URL
ラジオ第1 https://nhkradioikr1-i.akamaihd.net/hls/live/512098/1-r1/1-r1-01.m3u8
ラジオ第2 https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8
NHK-FM https://nhkradioikfm-i.akamaihd.net/hls/live/512100/1-fm/1-fm-01.m3u8

2. 再生する

 どうしても音飛びしてしまう。

2-A. mplayer

$ mplayer -playlist http://nhkradioikr1-i.akamaihd.net/hls/live/512098/1-r1/1-r1-01.m3u8
  • 10秒毎に0.5秒くらいの音飛びがある
  • 5分後にぶった切れた。もう一度コマンドを打ち込むことで再生した

2-B. script

 コマンドが途切れるので無限ループさせる。

nhk-radio.sh

#/bin/bash
audio=alsa
URL="http://nhkradioikr1-i.akamaihd.net/hls/live/512098/1-r1/1-r1-01.m3u8" #札幌局第1
mode="-really-quiet -cache 700 "

while true
do
date +'%T'
mplayer -playlist ${URL} ${mode} -vo null -ao ${audio} 2>/dev/null
done
  • 10秒毎に音飛びが0.5秒くらいある
  • 3分毎に5秒くらい音飛びする。

 なお、mplayerの引数については以下。

引数 説明
-really-quiet ターミナルへの出力をほとんど行わない
-cache 容量(KB) 700なら700KBのキャッシュ。256あれば再生が安定する
-vo 映像出力先 nullで出力しない?
-ao 音声出力先 alsaへ出力する