録音してみる

深夜まで起きてるのは無理なので
さらっとスクリプトで録音開始できるやつを作ってみる。
◇要求仕様
・cronで1分前に起動して録音するかどうか判定
・1分前から録音開始して1分後まで録音
・rec.pl --start 0:59 --end 3:01 --channel xxxx --outfile rec.flv
・とりあえず日をまたぐのは考えない


まずは radiko - ymkoの日記 で録音ツール準備。

crontabってどう書くんだっけか・・・
crontabの書き方 | server-memo.net
  
らめぇー作ってる間にラジオはじまっちゃうw
なのでとりあえずなものでごまかす。
cronから起動させて、終了は乱暴にkillallでコマンドを落とす。
$ crontab -e

 */1 * * * * /home/hato/rec/rec.pl
 01  3 19 3 * killall rtmpdump

うまくいきますように。

#!/usr/bin/perl

use strict;
use warnings;
use File::Basename;
use File::Path;
use Fcntl;

use Getopt::Long;

my %opt;
GetOptions(\%opt, 'start=s', 'end=s', 'channel=s');
$opt{start} = "0:58";
$opt{end}   = "3:01";
$opt{channel} = "FMT";
$opt{outfile} = "/home/hato/rec/log/FMT.flv";


main();
exit(0);

sub main
{
	log_out("--------");
	log_out("$0 start");
	
	while (my ($k, $v) = each %opt) {
		log_out("$k=$v");
	}
	
	# --- now
	my $now_min;
	{
		my $time = now_time();
		$time =~ /(\d+):(\d+):\d+$/;
		my ($h,$m) = ($1,$2);
		$m += $h*60;
		$now_min = $m;
	}
	# --- start
	my $start_min;
	{
		my ($h,$m) = split /:/, $opt{start};
		$start_min = $h * 60 + $m;
	}
	# --- end
	my $end_min;
	{
		my ($h,$m) = split /:/, $opt{end};
		$end_min = $h * 60 + $m;
	}
	log_out("now   $now_min");
	log_out("start $start_min");
	log_out("end   $end_min");
		
	if ($now_min >= $start_min && !-f $opt{outfile}) {
		my $rtmpdump = "/home/hato/rec/rtmpdump-2.2/rtmpdump ";
		my $cmd      = "$rtmpdump " .
		               "--playpath 'simul-stream' " .
		               "--rtmp     'rtmp://radiko.smartstream.ne.jp:1935' " .
		               "--swfUrl   'http://radiko.jp/player/player_0.0.9.swf' " .
		               "--pageUrl  'http://radiko.jp/player/player.html#$opt{channel}' " .
		               "--app      '$opt{channel}/_defInst_' " .
		               "--flashVer 'LNX 10,0,45,2' " .
		               "--live " .
		               "--flv $opt{outfile} ";
		             
		log_out("$cmd");
		system($cmd);
		my $rc = $? >> 8;
		log_out("rc=$rc");
	}

	log_out("$0 end");
	return;
}