2013/10/18

続・rtmp-nginx-module で配信を mp4 で録画する方法

どうやら ffmpeg はエンコード中に kill シグナルが来ると、出力する mp4 ファイルが破損してしまうらしく、前の記事の方法では高確率でファイルが壊れてしまっていた。

なので正攻法(?)で、録画終了時に flv ファイルを mp4 ファイルに変換してやることにした。

まずは以下のスクリプトを /usr/local/bin/flv2mp4 あたりに作る。

#!/bin/bash

input=""
output=""
remove_origin="FALSE"

while getopts i:o:r OPT
do
    case $OPT in
        "i" ) input="$OPTARG" ;;
        "o" ) output="$OPTARG" ;;
        "r" ) remove_origin="TRUE" ;;
    esac
done

if [ "$input" = "" ]; then
    exit 1
fi
if [ "$output" = "" ]; then
    output=${input%.*}.mp4
fi

echo "Input: $input"
echo "Output: $output"

ffmpeg -y -i $input -vcodec copy -acodec copy $output

if [ "$remove_origin" = "TRUE" ]; then
    rm -f $input
fi

あとは nginx.conf の rtmp application の設定の中に、

record all;
record_path /tmp/rec;
record_suffix –%Y%m%d%H%M%S.flv;
exec_record_done /usr/local/bin/flv2mp4 –i $path –r;

と記述しておけば、放送中は flv 形式で一時録画され、放送終了時に勝手に mp4 に変換され、元の flv は削除される。

めでたしめでたし!

0 件のコメント:

コメントを投稿