LoginSignup
18
18

More than 5 years have passed since last update.

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

Last updated at Posted at 2012-06-14

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
18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18