Raspberry Pi 3B+を使ったradiko受信の方法をメモ。
ネットで調べると色々情報が出てきますが、昔の方法は最近は使えないようなので
色々調べて2018年10月に動作した方法をメモっておきます
必要なソフトをインストール
sudo apt install rtmpdump swftools libxml2-utils libav-tools mplayer
参考にしたサイト
⇒ http://www.nofuture.tv/diary/20130111.html
⇒ https://xanadu6291.stars.ne.jp/?p=274
⇒ https://mtunn.wordpress.com/2017/02/08/raspberrypi3%E3%81%A7radiko/
こちらのサイトのradiko.shを使用し、録音関係を削除し再生用にさせて頂きました^^
#!/bin/bash pid=$$ wkdir='/home/pi/radiko_tmp' playerurl=http://radiko.jp/apps/js/flash/myplayer-release.swf playerfile="${wkdir}/player.swf" keyfile="${wkdir}/authkey.png" auth1_fms="${wkdir}/auth1_fms_${pid}" auth2_fms="${wkdir}/auth2_fms_${pid}" date=`date +%Y%m%d_%H%M` stream_url="" url_parts="" # Usage show_usage() { echo "Usage: `basename $0` -p StationName" 1>&2 } # authorize authorize() { # # get player # if [ ! -f ${playerfile} ]; then wget -q -O ${playerfile} ${playerurl} if [ $? -ne 0 ]; then echo "[stop] failed get player (${playerfile})" 1>&2 ; exit 1 fi fi # # get keydata (need swftool) # if [ ! -f ${keyfile} ]; then swfextract -b 12 ${playerfile} -o ${keyfile} if [ ! -f ${keyfile} ]; then echo "[stop] failed get keydata (${keyfile})" 1>&2 ; exit 1 fi fi # # access auth1_fms # wget -q \ --header="pragma: no-cache" \ --header="X-Radiko-App: pc_ts" \ --header="X-Radiko-App-Version: 4.0.0" \ --header="X-Radiko-User: test-stream" \ --header="X-Radiko-Device: pc" \ --post-data='\r\n' \ --no-check-certificate \ --save-headers \ -O ${auth1_fms} \ https://radiko.jp/v2/api/auth1_fms if [ $? -ne 0 ]; then echo "[stop] failed auth1 process (${auth1_fms})" 1>&2 ; exit 1 fi # # get partial key # authtoken=`perl -ne 'print $1 if(/x-radiko-authtoken: ([\w-]+)/i)' ${auth1_fms}` offset=`perl -ne 'print $1 if(/x-radiko-keyoffset: (\d+)/i)' ${auth1_fms}` length=`perl -ne 'print $1 if(/x-radiko-keylength: (\d+)/i)' ${auth1_fms}` partialkey=`dd if=${keyfile} bs=1 skip=${offset} count=${length} 2> /dev/null | base64` echo "***[Authorize Info]**************************" echo "authtoken: ${authtoken}" 1>&2 echo "offset: ${offset}" 1>&2 echo "length: ${length}" 1>&2 echo "partialkey: ${partialkey}" 1>&2 echo "*********************************************" rm -f ${auth1_fms} # # access auth2_fms # wget -q \ --header="pragma: no-cache" \ --header="X-Radiko-App: pc_ts" \ --header="X-Radiko-App-Version: 4.0.0" \ --header="X-Radiko-User: test-stream" \ --header="X-Radiko-Device: pc" \ --header="X-Radiko-Authtoken: ${authtoken}" \ --header="X-Radiko-Partialkey: ${partialkey}" \ --post-data='\r\n' \ --no-check-certificate \ -O ${auth2_fms} \ https://radiko.jp/v2/api/auth2_fms #echo "authentication success" 1>&2 areaid=`perl -ne 'print $1 if(/^([^,]+),/i)' ${auth2_fms}` #echo "areaid: ${areaid}" 1>&2 rm -f ${auth2_fms} # # get stream-url # wget -q -O ${ch_xml} \ "http://radiko.jp/v2/station/stream/${channel}.xml" if [ $? -ne 0 -o ! -f ${ch_xml} ]; then echo "[stop] failed stream-url process (channel=${channel})" rm -f ${ch_xml} ; show_usage ; exit 1 fi stream_url=`echo "cat /url/item[1]/text()" | \ xmllint --shell ${ch_xml} | tail -2 | head -1` url_parts=(`echo ${stream_url} | \ perl -pe 's!^(.*)://(.*?)/(.*)/(.*?)$/!$1://$2 $3 $4!'`) rm -f ${ch_xml} } # Play play() { # rtmpdump rtmpdump -r ${url_parts[0]} \ --app ${url_parts[1]} \ --playpath ${url_parts[2]} \ -W $playerurl \ -C S:"" -C S:"" -C S:"" -C S:$authtoken \ --live \ --stop ${duration} | \ mplayer - } # Get Option while getopts pd:f:t:s: OPTION do case $OPTION in p ) OPTION_p=true ;; * ) show_usage ; exit 1 ;; esac done # Get Channel shift $(($OPTIND - 1)) if [ $# -ne 1 ]; then show_usage ; exit 1 fi channel=$1 ch_xml="${wkdir}/${channel}${pid}.xml" # PLAY Mode if [ "${OPTION_p}" ]; then # Get Minute duration=`expr ${VALUE_t:=0} \* 60` authorize && play fi
home/pi の下に radiko_tmp ディレクトリを作成して
radiko.shに実行権限を付加すれば
./radiko.sh -p RCC で再生OK
受信可能な放送局一覧は広島では
http://radiko.jp/v2/station/list/JP34.xml
で取得可能
RCC
HFM
RN1
RN2
HOUSOU-DAIGAKU
JOFK
JOAB
JOAK-FM
http://www.dcc-jpl.com/foltia/wiki/radikomemo
サイマルラジオで配信されている放送はmplayerでそのまま受信できるらしい
まえばしCITYエフエムの場合
http://radio.maebashi.fm:8080/mwave?MSWMExt=.asf
日本コミュニティ放送協会で配信されている放送は
FMちゅーピーの場合
mplayer https://musicbird-hls.leanstream.co/musicbird/JCB082.stream/playlist.m3u8?args=web_03
FM湘南ナパサの場合 JCB014(JCBxxxの部分放送局選択) 等で受信できるようですが、
途中音声が途切れるので何か工夫が必要なのかも・・
mplayer から ffplay -nodisp に変えると少し改善するが、それでも途切れる
⇒引数のweb_xxの値を変えたり削除すると途切れにくくなった気がするが、真相は不明・・・^^;;
-nodisp -rtbufsize 10M 効果なし
ffmpegを経由すると改善あり
sudo apt install ffmpeg でインストール
ffmpeg -i https://musicbird-hls.leanstream.co/musicbird/JCB014.stream/playlist.m3u8 -f mp3 - | mplayer - -novideo
ffmpeg経由でmplayerを使うと最初にエラーが発生するので、プレーヤはffplayに変更^^
ffmpeg -bufsize 5M -i https://musicbird-hls.leanstream.co/musicbird/JCB082.stream/playlist.m3u8 -f mp3 - | ffplay -i -nodisp -
AVOptionsにバッファサイズ指定があったので5MB設定してみました。
効果は不明ですが1Mだと切断あり、50Mと極端に大きくすると別のエラーが頻発し、5Mだと好結果でした
それでも切断することはあるので5MBのバッファで切断有りとなると、思っている動作とは違うんだと思います^^;;
しかし、これなら実用になりそうです^^
ついでにyoutube の 音声再生環境のメモ
参考にしたページ ⇒ https://qiita.com/yuki_ycino/items/594c27426c5580450bf2
必要なソフトをインストール
sudo apt install youtube-dl mplayer
youtube-dl ‘https://www.youtube.com/watch?v=NdfXqwWgbBE&t=12s’ -o – | mplayer – -novideo
youtube-dl ‘https://www.youtube.com/watch?v=TMnKRA-koac&t=141s’ -o – | mplayer – -novideo
youtube-dl ‘https://www.youtube.com/watch?v=R2TRdynJiIE’ -o – | mplayer – -novideo
youtube-dl ‘https://www.youtube.com/watch?v=uhOMW_NOXDU&t=29s’ -o – | mplayer – -novideo
で再生OK
-noviceo オプションを外すと動画も表示されるらしい
ffplayをプレーヤで使う場合は
youtube-dl ‘https://www.youtube.com/watch?v=NdfXqwWgbBE&t=12s’ -o – | ffplay -i -nodisp -hide_banner –
でOK
ローカルファイルの再生はmplayerのみでOK
mplayer /share/10.YUKI.mp3
エラーが出る場合
ERROR: Signature extraction failed: Traceback (most recent call last):
sudo pip install –upgrade youtube_dl でアップデート
>>実行結果
Collecting youtube_dl
Downloading https://files.pythonhosted.org/packages/fc/fd/eec89ed38b6ddba29fba41be1d3d98a933ed4dd0c426ca04444b1d6789d4/youtube_dl-2018.9.10-py2.py3-none-any.whl (1.8MB)
100% |████████████████████████████████| 1.8MB 153kB/s
Installing collected packages: youtube-dl
Successfully installed youtube-dl-2018.9.10
View Comments
私もRaspberryPiでradikoを再生したいと思っておりまして、インストールしては失敗を繰り返していて、未だに聴取には至っておりません。ネットで色々な方法を探しているのですが、基本的なことから勉強しないとならないみたいで、なかなかクリアできません。
まず、OSはRaspberryPiOSでなければいけないのか?KONA Linux for RaspberryPiでも良いのか?
かべきんさんの書かれているソフトをインストール&設定していけば良いのか?はたまた
https://dbpro.xyz/10314
に書かれているStreamlinkという再生プログラムを使えるのか?などなど分からないことだらけで
ご教授いただければ幸いです。
radikoも一局だけ(東京のTBSのみ)聴くことができれば良いので、なんとかアドバイスをいただきながら再生できるように頑張りたいと思っております。よろしくお願いします。
久しぶりにRaspiでradikoにチャレンジしてみましたが、上記の方法ではradikoは聞けなくなっていました。
認証関係の変更だと思いますが、このスクリプトはFlashPlayerのストリーミングを使っていた記憶があるのでFlashPlayer終了の関係もあるかもしれません。
https://radiko.jp/#!/info/2470
debian系ではlibav-toolsライブラリもaptで入手できなくなっているようです
私もよく分からず手探りで動かしていたので何が原因なのかよく分かりません^^;;;
現在のRasbianでは標準のブラウザでそのままradikoが使えますので技術的な研究無しで宜しければ新し目のRasbianをインストールするとradikoは使えます。
コマンドラインからradikoを聞きたい強者には物足りないかもしれません^^;;;