それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ffmpeg/mplayer で認証が必要な m3u8 を開く(Radiko)

ffmpeg でhttpを開くときHEADERが送信できる

ffmpeg ではHTTPヘッダを送信できる

ffmpeg -i http://example.com/a.m3u8 -headers 'Authentication: XXXXX' 

もちろん ffplay でも同じように

ffplay -i http://example.com/a.m3u8 -headers 'Authentication: XXXXX' 

mplayer 側でも対応している

mplayer でもhttp-header への対応は完了してる。

mplayer -http-header-fields 'X-Radiko-AuthToken: xxxx'

radikoの場合

radikoは旧のAPIがまだ生きている(たぶん、Google Home などの旧ハードウェアを切り捨てないため)

そのため、次のように掛けば再生ができる。

mplayer の場合

token=XXXXX
channel=MBS
URL='https://radiko.jp/v2/api/ts/playlist.m3u8?station_id={$channel}&l=15&ft=20200419210000&to=20200419211500'
mplayer -http-header-fields 'X-Radiko-AuthToken: {$token}'  $URL

何も考えなくて良くなったのは本当に楽。

mplayerを使うとコンソールからボリュームの上げ下げやスキップができるのでタイムフリーを聞くときに便利

ffplay の場合

token=XXXXX
channel=MBS
URL='http://f-radiko.smartstream.ne.jp/{$channel}/_definst_/simul-stream.stream/playlist.m3u8'
ffplay -i $URL -nodisp -vn -sn   -headers 'X-Radiko-AuthToken: {$token}'"

ffplay のほうがキャッシュの扱いがきれいでバッファリングをうまく制御してくれますね。

token の取得

探せば山ほどあるので割愛。

curl コマンドでリクエスト送るだけ。

http header 送信できる

ffmpeg / mplayer は http ヘッダを直接送信できるので認証をうまく制御できるので各種プレイリストの再生が捗る。