summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2012-10-20 19:14:56 +0200
committerChristian Pointner <equinox@spreadspace.org>2012-10-20 19:14:56 +0200
commitd0a508929374879a814468abc4747883f7d96546 (patch)
tree45b853a8d3a2755bffa40bc930f6fe86efdb49db
parentadded elevate0 (diff)
added hls handlers
-rwxr-xr-xsrc/hls/create-runit-conf.sh45
-rwxr-xr-xsrc/hls/install.sh10
-rw-r--r--src/hls/m3u8-segmenter-git-repo1
-rwxr-xr-xsrc/hls/start-hls.sh50
4 files changed, 106 insertions, 0 deletions
diff --git a/src/hls/create-runit-conf.sh b/src/hls/create-runit-conf.sh
new file mode 100755
index 0000000..4d43282
--- /dev/null
+++ b/src/hls/create-runit-conf.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+if [ -z "$1" ]; then
+ echo "Usage $0 <name>"
+ exit 1
+fi
+
+name=$1
+OUT_D=runit
+
+rm -rf "$OUT_D"
+mkdir -p "$OUT_D"
+
+for src in av-orig av-en; do
+ for profile in low medium high; do
+ echo "creating runit instance for $src - $profile"
+ DIR="$OUT_D/hls-$name-$src-$profile"
+ mkdir -p "$DIR/log"
+cat >> "$DIR/run" <<EOF
+#!/bin/sh
+set -e
+
+exec 2>&1
+exec chpst -u flumotion:flumotion /usr/local/bin/start-hls.sh "$name" "$src" "$profile"
+EOF
+ chmod +x "$DIR/run"
+
+cat >> "$DIR/log/run" <<EOF
+#!/bin/sh
+set -e
+
+LOG_D="/var/log/hls-$name/$src-$profile/"
+if [ ! -d "\$LOG_D" ]; then
+ mkdir -p -m0750 "\$LOG_D"
+fi
+chown root:adm "\$LOG_D"
+exec chpst -u root:adm svlogd -tt "\$LOG_D"
+EOF
+ chmod +x "$DIR/log/run"
+
+ ln -s "/var/run/sv.hls-$name-$src-$profile" "$DIR/supervise"
+ ln -s "/var/run/sv.hls-$name-$src-$profile.log" "$DIR/log/supervise"
+
+ done
+done
diff --git a/src/hls/install.sh b/src/hls/install.sh
new file mode 100755
index 0000000..0cb15d0
--- /dev/null
+++ b/src/hls/install.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+sudo aptitude install git build-essential ffmpeg pkg-config libavformat-dev runit
+git clone `cat m3u8-segmenter-git-repo`
+cd m3u8-segmenter
+./configure
+make
+sudo cp m3u8-segmenter /usr/local/bin
+cd ..
+sudo cp start-hls.sh /usr/local/bin
diff --git a/src/hls/m3u8-segmenter-git-repo b/src/hls/m3u8-segmenter-git-repo
new file mode 100644
index 0000000..df7218d
--- /dev/null
+++ b/src/hls/m3u8-segmenter-git-repo
@@ -0,0 +1 @@
+git://github.com/johnf/m3u8-segmenter.git
diff --git a/src/hls/start-hls.sh b/src/hls/start-hls.sh
new file mode 100755
index 0000000..418416e
--- /dev/null
+++ b/src/hls/start-hls.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# Installation:
+#
+# $ git clone git://github.com/johnf/m3u8-segmenter.git
+# $ cd m3u8-segmenter
+# $ ./confiugure
+# $ make
+# $ sudo cp m3u8-segmenter /usr/local/bin
+# $ copy start-hls.sh /usr/local/bin
+#
+# add following to /etc/fstab
+# tmpfs /var/www/elevate-live tmpfs size=1G,mode=755,uid=flumotion,gid=flumotion 0 0
+#
+
+if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
+ echo "Usage: $0 <name> <src> (high|medium|low)"
+ exit 1
+fi
+
+name=$1
+quality=$3
+stream_name="$name/$2-hls-$quality"
+src="http://localhost:8000/$2-flash-$quality.flv"
+segmenter="/usr/local/bin/m3u8-segmenter"
+len=3
+num=3
+url="http://r38.realraum.at/"
+
+case "$3" in
+ high)
+ arate=160k
+ ;;
+ medium)
+ arate=128k
+ ;;
+ low)
+ arate=96k
+ ;;
+ *)
+ arate=128k
+ ;;
+esac
+
+cd /var/www
+ffmpeg -y -i "$src" -f mpegts -acodec libmp3lame -ar 44100 -ab "$arate" -vcodec copy -vbsf h264_mp4toannexb -async 2 - | $segmenter -i - -d $len -n $num -p "$stream_name" -m "$stream_name.m3u8" -u "$url"
+rm -f "$stream_name"-*.ts
+rm -f "$stream_name".m3u8
+
+exit 0