2019年12月14日土曜日

ラズベリーパイでradikoラジオをつくる: その7 radikoの再生停止問題

スピーカを接続

Auratoneに接続してみました。スピーカのエッジはぼろぼろなのに、まともな音で鳴ってくれます。エッジ交換したら良くなるんですかね。初めて使ったD級パワーアンプ、好印象です。


radiko再生停止問題

radikoを起動後1分ほどで再生が停止、手動でもういちど再生するとその後は安定するという現象がありましたが。この開発を進めるうち、いつの間にやら再生開始から1分ほどで停止するのを繰り返すようになってしまいました。苦し紛れで、自動的に再接続する仕組みを実装しましたけど、1分毎に10秒以上無音になるようでは、最早使い物になりません。調べてみたところ、mplayer のキャッシュを設定すれば改善できるという情報があり早速試したところ解決することができました。

mplayer の設定は、/etc/mplayer/mplayer.conf にあります。こんな内容です。
# Use 8MB input cache by default.
#cache = 8192
#
# Prefill 20% of the cache before starting playback.
#cache-min = 20.0
mplayer.conf のデフォルトはキャッシュ無しの設定でした。そこでキャッシュを設定したところ256kBで安定して再生できることを確認しました。RadikoのPC向け配信ビットレートはHE-AAC 48kbpsということからキャッシュ256kBは約40秒に相当します。家庭内の光ファイバ環境ならこれで十分ではないでしょうか。とはいえキャッシュを増やせば、再生開始までの時間が増えてしまうはず。
  • 設定なし: 再生まで14秒、1分ほどで再生が停止
  • cache = 256 :再生まで14秒、その後も途切れない
  • cache = 512 :再生まで16秒、その後も途切れない
以上の結果から、256kBが妥当と考えました。cache-minは、0から20まで変えてみましたが、再生開始までの時間に大きな変化はありません。光回線の速度が十分に速いためでしょう。ところで再生まで14秒とは、時間かかりすぎです。以前は10秒程度だったはず。ラジコプレミアム対応のスクリプトをコマンドで手動実行して時間を測ってみました。

  • 初回: 13秒
  • 2回目以降: 8秒
初回よりも2回目以降はより早く再生開始します。これは認証情報を使い回しているからと考えています。この初回時の時間と、操作ボタンでの再生開始までの時間は、ほぼ一致します。ということは、操作ボタンでは初回扱いとして動作しているに違いありません。Pythonのsubprocess.Popen()でスクリプトを起動しているせいかなあ。

ところで、開発を進めるうちに再生停止が顕在化する原因がわかりました。なんと、操作スクリプトがCPU使用率を圧迫していたのです。python /home/pi/operation_panel/panel.pyというのがそれで63.8%もあります。radikoの再生をしている mplayer と合わせてCPU使用率 90%弱とほぼ目一杯使い切っています。


操作スクリプトがそんなに重いのは不自然です。とりあえず、対症療法でwaitを入れると、10%程に下がりました。それでもSSHログインやpsコマンドを打ち込むだけでも一瞬音が途切れます。操作スクリプトの見直しが必要ですね。


0 件のコメント:

コメントを投稿