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!

  1. 2 Trackback(s)

  2. Mar 3, 2011: RTMPDUMPによるストリームデータのダウンロード | Yama's Memorandum
  3. Mar 8, 2011: mp3ファイルの編集(分割(split)と結合(concatenate)) | Yama's Memorandum

Post a Comment