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)