radiko の録音・再生方法を検討してみた
February 19, 2011 – 12:26 am昨年暮れから私の居住地域でもradiko によるラジオ放送が聴けるようになった(「radikoの受信可能地域が拡大される 茨城でもOK!」)。鮮明なディジタル音声でラジオ放送を楽しませてもらっている。こうなると、ディジタル音声のまま、番組を録音してみたいと思うようになるのは自然だ。
自宅に設置しているサーバー上でラジオ放送を録音しブラウザ(IE9 RC)上で再生する方法を検討してみた。試行錯誤の結果、なんとか録音/再生することができた。今後さらに検討するために、試した方法をメモしておいた。
radikoの録音と再生: radikoのディジタル音声を録音するのに、rtmpdumpによりflvファイルを保存し、これを音声用ファイル(mp3ファイルなど)に変換(抽出)してやる方法がある。Flvファイルからmp3ファイルへの変換はffmpegにより行うことができる。
radiko上のTBS放送からmp3ファイルを生成した例をしめす。
まず、rtmpdump を用いて、 flv ファイルをつくる:
# ./rtmpdump --rtmp "rtmpe://radiko.smartstream.ne.jp:1935" --playpath "simul-stream" --swfUrl "http://radiko-dl.ssdl1.smartstream.ne.jp/radiko-dl/1.1/player/player_0.1.2.swf" --pageUrl "http://radiko.jp/player/player.html#TBS" --app "TBS/_defInst_" --flashVer "LNX 10,1,53,64" --live --stop 120 -o TBSout.flv RTMPDump v2.3 (c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL WARNING: No application or playpath in URL! Connecting ... INFO: Connected... ERROR: rtmp server sent error Starting Live Stream For duration: 120.000 sec INFO: Metadata: INFO: audiodatarate 48.00 731.560 kB / 119.81 sec Download complete
このflvファイルから音声用のmp3ファイルに ffmpeg を用いて変換:
# ffmpeg -y -i TBSout.flv -acodec libmp3lame TBSout.mp3 FFmpeg version 0.6.1, Copyright (c) 2000-2010 the FFmpeg developers built on Dec 4 2010 15:37:20 with gcc 4.1.2 20080704 (Red Hat 4.1.2-48) configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --incdir=/usr/include --disable-avisynth --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables' --enable-avfilter --enable-avfilter-lavf --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-vdpau --enable-version3 --enable-x11grab libavutil 50.15. 1 / 50.15. 1 libavcodec 52.72. 2 / 52.72. 2 libavformat 52.64. 2 / 52.64. 2 libavdevice 52. 2. 0 / 52. 2. 0 libavfilter 1.19. 0 / 1.19. 0 libswscale 0.11. 0 / 0.11. 0 libpostproc 51. 2. 0 / 51. 2. 0 [flv @ 0x8c0c850]max_analyze_duration reached [flv @ 0x8c0c850]Estimating duration from bitrate, this may be inaccurate Input #0, flv, from 'TBSout.flv': Duration: 00:01:59.97, start: 0.000000, bitrate: N/A Stream #0.0: Audio: aac, 48000 Hz, stereo, s16 Output #0, mp3, to 'TBSout.mp3': Metadata: TSSE : Lavf52.64.2 Stream #0.0: Audio: libmp3lame, 48000 Hz, stereo, s16, 64 kb/s Stream mapping: Stream #0.0 -> #0.0 Press [q] to stop encoding size= 938kB time=120.05 bitrate= 64.0kbits/s video:0kB audio:938kB global headers:0kB muxing overhead 0.003436%
mp3ファイルを、HTML5に対応しているブラウザ(ここではIE9 RCを使用)でAUDIOタグを用いると簡単に再生することができる。
以下、再生するために用いたHTMLを以下に示す:
<html lang="ja"> <head> <title>audioタグを使いradikoの放送を再生する</title> </head> <body> <h1>audioタグを使ってradikoの放送を再生する</h1> <div> <audio src="./TBSout.mp3" controls> </div> </body> </html>
上記のHTMLがブラウザ上においては次のようになり、録音した放送内容を再生することができる:
以上、radiko の録音から再生の一連の手続きを示した。
ここで用いた rtmpdump そして ffmpeg のダウンロード/インストールに関るログを以下に示す。
rtmpdumpのダウンロード/インストール: rtmpdump のダウンロードはhttp://rtmpdump.mlayerhq.huからできる。このダウンロードサイトではWindowsそしてAndroid用のbuildとソースのtarballが利用可能になっている。Linuxマシン上にインストールするため、ソースのtarball: rtmpdump-2.3.tgzを用いた。
以下、ダウンロードからインストールへの一連のログを示す:
まず、rtmpdump-2.3.tgz をダウンロードし、解凍:
# wget http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz --2011-02-17 16:54:40-- http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz rtmpdump.mplayerhq.hu をDNSに問いあわせています... 213.144.138.186 rtmpdump.mplayerhq.hu|213.144.138.186|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 125103 (122K) [application/x-gtar] `rtmpdump-2.3.tgz' に保存中 100%[==============================================================>] 125,103 82.6K/s 時間 1.5s 2011-02-17 16:54:43 (82.6 KB/s) - `rtmpdump-2.3.tgz' へ保存完了 [125103/125103] # tar xvfz rtmpdump-2.3.tgz rtmpdump-2.3/ChangeLog rtmpdump-2.3/COPYING rtmpdump-2.3/librtmp/ rtmpdump-2.3/librtmp/dh.h rtmpdump-2.3/librtmp/bytes.h < 省略 > # cd rtmpdump-2.3 [rtmpdump-2.3]# ls COPYING Makefile librtmp rtmpdump.1.html rtmpgw.8 rtmpgw.c rtmpsuck.c thread.h ChangeLog README rtmpdump.1 rtmpdump.c rtmpgw.8.html rtmpsrv.c thread.c
次に、makeでコンパイル:
[rtmpdump-2.3]# make make[1]: ディレクトリ `/@directory/rtmpdump/rtmpdump-2.3/librtmp' に入ります gcc -Wall -DRTMPDUMP_VERSION=\"v2.3\" -DUSE_OPENSSL -O2 -fPIC -c -o rtmp.o rtmp.c gcc -Wall -DRTMPDUMP_VERSION=\"v2.3\" -DUSE_OPENSSL -O2 -fPIC -c -o log.o log.c gcc -Wall -DRTMPDUMP_VERSION=\"v2.3\" -DUSE_OPENSSL -O2 -fPIC -c -o amf.o amf.c gcc -Wall -DRTMPDUMP_VERSION=\"v2.3\" -DUSE_OPENSSL -O2 -fPIC -c -o hashswf.o hashswf.c gcc -Wall -DRTMPDUMP_VERSION=\"v2.3\" -DUSE_OPENSSL -O2 -fPIC -c -o parseurl.o parseurl.c ar rs librtmp.a rtmp.o log.o amf.o hashswf.o parseurl.o ar: creating librtmp.a gcc -shared -Wl,-soname,librtmp.so.0 -o librtmp.so.0 rtmp.o log.o amf.o hashswf.o parseurl.o -lssl -lcrypto -lz ln -sf librtmp.so.0 librtmp.so make[1]: ディレクトリ `/@directory/rtmpdump/rtmpdump-2.3/librtmp' から出ます gcc -Wall -DRTMPDUMP_VERSION=\"v2.3\" -O2 -c -o rtmpdump.o rtmpdump.c gcc -Wall rtmpdump.o librtmp/librtmp.a -o rtmpdump -lssl -lcrypto -lz gcc -Wall -DRTMPDUMP_VERSION=\"v2.3\" -O2 -c -o rtmpgw.o rtmpgw.c gcc -Wall -DRTMPDUMP_VERSION=\"v2.3\" -O2 -c -o thread.o thread.c gcc -Wall rtmpgw.o thread.o librtmp/librtmp.a -o rtmpgw -lpthread -lssl -lcrypto -lz gcc -Wall -DRTMPDUMP_VERSION=\"v2.3\" -O2 -c -o rtmpsrv.o rtmpsrv.c gcc -Wall rtmpsrv.o thread.o librtmp/librtmp.a -o rtmpsrv -lpthread -lssl -lcrypto -lz gcc -Wall -DRTMPDUMP_VERSION=\"v2.3\" -O2 -c -o rtmpsuck.o rtmpsuck.c gcc -Wall rtmpsuck.o thread.o librtmp/librtmp.a -o rtmpsuck -lpthread -lssl -lcrypto -lz [ rtmpdump-2.3]# ls COPYING README rtmpdump.1 rtmpdump.o rtmpgw.8.html rtmpsrv rtmpsuck thread.c ChangeLog librtmp rtmpdump.1.html rtmpgw rtmpgw.c rtmpsrv.c rtmpsuck.c thread.h Makefile rtmpdump rtmpdump.c rtmpgw.8 rtmpgw.o rtmpsrv.o rtmpsuck.o thread.o
ffmpegのyum install: ffmpegをインストールに先立ち、これが含まれるパッケージrpmforgeをyum対象リポジトリに追加する:
[ yum.repos.d]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm --2011-02-15 22:19:47-- http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm packages.sw.be をDNSに問いあわせています... 85.13.226.40 packages.sw.be|85.13.226.40|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 302 Found 場所: http://rpmforge.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.i386.rpm [続く] --2011-02-15 22:19:48-- http://rpmforge.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.i386.rpm rpmforge.sw.be をDNSに問いあわせています... 85.13.226.40 packages.sw.be:80 への接続を再利用します。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 12680 (12K) [application/x-rpm] `rpmforge-release-0.5.2-2.el5.rf.i386.rpm.1' に保存中 100%[==============================================================>] 12,680 22.6K/s 時間 0.5s 2011-02-15 22:19:50 (22.6 KB/s) - `rpmforge-release-0.5.2-2.el5.rf.i386.rpm' へ保存完了 [12680/12680] [ yum.repos.d]# rpm -Uhv rpmforge-release-0.5.2-2.el5.rf.i386.rpm
これにより/etc/yum.repos.dにrpmforge.repoと名づけられたリポジトリファイルが生成される。この生成されたリポジトリファイルの中身は以下:
[rpmforge] name = RHEL $releasever - RPMforge.net - dag baseurl = http://apt.sw.be/redhat/el5/en/$basearch/rpmforge mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge #mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge enabled = 1 protect = 0 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag gpgcheck = 1
ここで、rpmforgeを対象としない yum updateでは、この不用な更新がないよう enabled=1 の部分を enabled=0に変えておいた。
ここで、いよいよffmpegをyumをインストール:
# yum --enablerepo=rpmforge install -y ffmpeg Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * addons: ftp.iij.ad.jp * base: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * rpmforge: ftp-stud.fht-esslingen.de * updates: ftp.iij.ad.jp rpmforge | 1.1 kB 00:00 rpmforge/primary 1% [ ] 0.0 B/s | 24 kB --:-- ETA < 省略 > rpmforge/primary 98% [==========================-] 199 kB/s | 2.2 MB 00:00 ETA rpmforge/primary | 2.2 MB 00:11 rpmforge 10543/10543 Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package ffmpeg.i386 0:0.6.1-1.el5.rf set to be updated --> Processing Dependency: libdirac_encoder.so.0 for package: ffmpeg --> Processing Dependency: libdirac_decoder.so.0 for package: ffmpeg --> Processing Dependency: libpostproc.so.51 for package: ffmpeg --> Processing Dependency: libmp3lame.so.0 for package: ffmpeg --> Processing Dependency: libfaac.so.0 for package: ffmpeg --> Processing Dependency: libopencore-amrwb.so.0 for package: ffmpeg --> Processing Dependency: a52dec for package: ffmpeg --> Processing Dependency: libx264.so.107 for package: ffmpeg --> Processing Dependency: libpostproc.so.51(LIBPOSTPROC_51) for package: ffmpeg --> Processing Dependency: libopencore-amrnb.so.0 for package: ffmpeg --> Processing Dependency: libgsm.so.1 for package: ffmpeg --> Running transaction check ---> Package a52dec.i386 0:0.7.4-8.el5.rf set to be updated ---> Package dirac.i386 0:1.0.2-1.el5.rf set to be updated --> Processing Dependency: libcppunit-1.12.so.0 for package: dirac ---> Package faac.i386 0:1.26-1.el5.rf set to be updated ---> Package ffmpeg-libpostproc.i386 0:0.6.1-1.el5.rf set to be updated ---> Package gsm.i386 0:1.0.13-1.el5.rf set to be updated ---> Package lame.i386 0:3.98.4-1.el5.rf set to be updated ---> Package opencore-amr.i386 0:0.1.2-1.el5.rf set to be updated ---> Package x264.i386 0:0.0.0-0.4.20101111.el5.rf set to be updated --> Running transaction check ---> Package cppunit.i386 0:1.12.0-3.el5.rf set to be updated --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================== Package Arch Version Repository Size ======================================================================================================== Installing: ffmpeg i386 0.6.1-1.el5.rf rpmforge 2.9 M Installing for dependencies: a52dec i386 0.7.4-8.el5.rf rpmforge 78 k cppunit i386 1.12.0-3.el5.rf rpmforge 811 k dirac i386 1.0.2-1.el5.rf rpmforge 2.9 M faac i386 1.26-1.el5.rf rpmforge 151 k ffmpeg-libpostproc i386 0.6.1-1.el5.rf rpmforge 40 k gsm i386 1.0.13-1.el5.rf rpmforge 63 k lame i386 3.98.4-1.el5.rf rpmforge 576 k opencore-amr i386 0.1.2-1.el5.rf rpmforge 376 k x264 i386 0.0.0-0.4.20101111.el5.rf rpmforge 1.1 M Transaction Summary ======================================================================================================== Install 10 Package(s) Upgrade 0 Package(s) Total download size: 8.9 M Downloading Packages: (1/10): ffmpeg-libpostproc-0.6.1-1 (0%) 39% [=========- ] 0.0 B/s | 16 kB --:-- ETA (1/10): ffmpeg-libpostproc-0.6.1-1.el5.rf.i386.rpm | 40 kB 00:00 (2/10): gsm-1.0.13-1.el5.rf.i386.rpm | 63 kB 00:00 < 省 略 > (10/10): dirac-1.0.2-1.el5.rf.i386 (99%) 99% [=======================-] 227 kB/s | 2.9 MB 00:00 ETA (10/10): dirac-1.0.2-1.el5.rf.i386.rpm | 2.9 MB 00:15 -------------------------------------------------------------------------------------------------------- Total 160 kB/s | 8.9 MB 00:57 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : a52dec 1/10 Installing : x264 2/10 Installing : lame 3/10 Installing : opencore-amr 4/10 Installing : gsm 5/10 Installing : faac 6/10 Installing : cppunit 7/10 Installing : dirac 8/10 Installing : ffmpeg 9/10 Installing : ffmpeg-libpostproc 10/10 Installed: ffmpeg.i386 0:0.6.1-1.el5.rf Dependency Installed: a52dec.i386 0:0.7.4-8.el5.rf cppunit.i386 0:1.12.0-3.el5.rf dirac.i386 0:1.0.2-1.el5.rf faac.i386 0:1.26-1.el5.rf ffmpeg-libpostproc.i386 0:0.6.1-1.el5.rf gsm.i386 0:1.0.13-1.el5.rf lame.i386 0:3.98.4-1.el5.rf opencore-amr.i386 0:0.1.2-1.el5.rf x264.i386 0:0.0.0-0.4.20101111.el5.rf Complete!
2 Trackback(s)