ShellScript
Bash
Ustream
rtmpdump

配信中のUstreamチャンネル名を指定するとrtmpdumpで録画してくれるシェルスクリプト

More than 5 years have passed since last update.

api.ustream.tvからjsonをwgetしてgrepでchannelIDを入手し

cdngw.ustream.tvからamfをwgetしてgrepでrtmpエンドポイントURLを入手し

rtmpdumpコマンドを実行する

保存先は、channenName-unixtime.flvになる

チャンネル名は日本語でもOK

cronなどと組み合わせると定点カメラの映像を定期的に収集するといった事にも使える

wget, rtmpdump, ffmpegが無いと動かないです


update:


  • 引数の数ふやした

  • rtmpdumpがタイミング次第で壊れたflvを出力してしまうようなので、ffplayで再生に成功するまで再試行するようにしてみた

  • h264配信をrtmpdumpするとどうしてもffplayで再生できないflvになってしまうため何回やっても失敗する。いまのところ対応できていない


ustreamdump.sh

if [ $# -ne 3 ]; then

echo "usage: ustreamdump.sh channenName recordingPath recordingSeconds"
exit 1
fi

chid=$(wget http://api.ustream.tv/json/channel/${1}/getInfo?key=yourDevKey -q -O -|grep -Po '"id":[0-9]*?,'|grep -Po '[0-9]*')
if [ ! $chid ]; then
echo "api error, channelName: ${1}"
exit 1
fi
echo $chid

rtmp=$(wget http://cdngw.ustream.tv/Viewer/getStream/1/${chid}.amf -q -O -|grep -Pao 'rtmp:\/\/[a-zA-Z].*')
if [ ! $rtmp ]; then
echo "$1 is not live"
exit 1
fi
echo $rtmp

retry=10
check=1
while [ $check -ne 0 ] ; do
rtmpdump -v -k 5 -B ${3}\
-r "${rtmp}/streams/live" -y "streams/live"\
-a "ustreamVideo`echo ${rtmp}|grep -Pao '\/[0-9].*$'`"\
-f "LNX 10,0,45,2" -o ./${2}
check=$( (ffplay ${2} -loglevel error -nodisp -autoexit > /dev/null) 2>&1 | wc -l )
retry=`expr $retry - 1`
if [ $retry -le 0 ] ; then
break
fi
done