Created
April 9, 2013 08:03
-
-
Save cnosuke/5343851 to your computer and use it in GitHub Desktop.
script for recoding radiko.jp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
OUTFILEPREFIX=$1 | |
RECTIMEMIN=$2 | |
CHANNEL=$3 | |
FFMPEG=/usr/bin/ffmpeg | |
FFMPEGOPT="-acodec libmp3lame -ab 64kb -ac 1 -ar 44100" | |
OUTFILEBASEPATH=/home/cnosuke/radiko/data | |
FLVFILEEXT=".flv" | |
MP3FILEEXT=".mp3" | |
MARGINTIMEMIN=0 | |
OUTFLVFILENAME=$OUTFILEBASEPATH/$OUTFILEPREFIX-`date +%Y-%m-%d`$FLVFILEEXT | |
OUTMP3FILENAME=$OUTFILEBASEPATH/$OUTFILEPREFIX-`date +%Y-%m-%d`$MP3FILEEXT | |
RECTIME=`expr $RECTIMEMIN \* 60 + $MARGINTIMEMIN \* 2 \* 60` | |
playerurl=http://radiko.jp/player/swf/player_3.0.0.01.swf | |
playerfile=./player.swf | |
keyfile=./authkey.png | |
#if [ $# -eq 1 ]; then | |
channel=$3 | |
output=$OUTFILEBASEPATH/$OUTFILEPREFIX-`date +%Y-%m-%d`$FLVFILEEXT | |
#elif [ $# -eq 2 ]; then | |
# channel=$1 | |
# output=$2 | |
#else | |
# echo "usage : $0 channel_name [outputfile]" | |
# exit 1 | |
#fi | |
# | |
# get player | |
# | |
if [ ! -f $playerfile ]; then | |
wget -q -O $playerfile $playerurl | |
if [ $? -ne 0 ]; then | |
echo "failed get player" | |
exit 1 | |
fi | |
fi | |
# | |
# get keydata (need swftools) | |
# | |
if [ ! -f $keyfile ]; then | |
/home/cnosuke/bin/swfextract -b 14 $playerfile -o $keyfile | |
if [ ! -f $keyfile ]; then | |
echo "failed get keydata" | |
exit 1 | |
fi | |
fi | |
if [ -f auth1_fms ]; then | |
rm -f auth1_fms | |
fi | |
# | |
# access auth1_fms | |
# | |
wget -q \ | |
--header="pragma: no-cache" \ | |
--header="X-Radiko-App: pc_1" \ | |
--header="X-Radiko-App-Version: 2.0.1" \ | |
--header="X-Radiko-User: test-stream" \ | |
--header="X-Radiko-Device: pc" \ | |
--post-data='\r\n' \ | |
--no-check-certificate \ | |
--save-headers \ | |
https://radiko.jp/v2/api/auth1_fms | |
if [ $? -ne 0 ]; then | |
echo "failed auth1 process" | |
exit 1 | |
fi | |
# | |
# get partial key | |
# | |
authtoken=`cat auth1_fms | perl -ne 'print $1 if(/x-radiko-authtoken: ([\w-]+)/i)'` | |
offset=`cat auth1_fms | perl -ne 'print $1 if(/x-radiko-keyoffset: (\d+)/i)'` | |
length=`cat auth1_fms | perl -ne 'print $1 if(/x-radiko-keylength: (\d+)/i)'` | |
partialkey=`dd if=$keyfile bs=1 skip=${offset} count=${length} 2> /dev/null | base64` | |
echo "authtoken: ${authtoken} \noffset: ${offset} length: ${length} \npartialkey: $partialkey" | |
rm -f auth1_fms | |
if [ -f auth2_fms ]; then | |
rm -f auth2_fms | |
fi | |
# | |
# access auth2_fms | |
# | |
wget -q \ | |
--header="pragma: no-cache" \ | |
--header="X-Radiko-App: pc_1" \ | |
--header="X-Radiko-App-Version: 2.0.1" \ | |
--header="X-Radiko-User: test-stream" \ | |
--header="X-Radiko-Device: pc" \ | |
--header="X-Radiko-Authtoken: ${authtoken}" \ | |
--header="X-Radiko-Partialkey: ${partialkey}" \ | |
--post-data='\r\n' \ | |
--no-check-certificate \ | |
https://radiko.jp/v2/api/auth2_fms | |
if [ $? -ne 0 -o ! -f auth2_fms ]; then | |
echo "failed auth2 process" | |
exit 1 | |
fi | |
echo "authentication success" | |
areaid=`cat auth2_fms | perl -ne 'print $1 if(/^([^,]+),/i)'` | |
echo "areaid: $areaid" | |
rm -f auth2_fms | |
# | |
# rtmpdump | |
# | |
/home/cnosuke/bin/rtmpdump -v \ | |
-r "rtmpe://w-radiko.smartstream.ne.jp" --playpath "simul-stream.stream" --app "${channel}/_definst_" -W $playerurl -C S:"" -C S:"" -C S:"" -C S:$authtoken --live --flv $output -B $RECTIME | |
echo "=====START ENCODING=====" | |
echo "$FFMPEG -i $OUTFLVFILENAME $FFMPEGOPT $OUTMP3FILENAME" | |
$FFMPEG -i $OUTFLVFILENAME $FFMPEGOPT $OUTMP3FILENAME | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment