ポッドキャスト24時間ライブ配信ふたたび
以前紹介したポッドキャスト24時間配信のやり方を変えたので以下に手順を示す。以前のやり方は下記参照。
今回のモチベとしては「何らかの理由で配信が止まったとしても放っておけば勝手に再開されるようにしたい」という点である(要は楽して安定運用したい)。
以前のやり方だと OBS を GUI 使ってマニュアル操作しないと止まった配信を再開できないという欠点があった。OBS を用いた配信は長くても2-3週間程度しか連続で配信できず気づいたら配信が止まっているという状況が多く、それをマニュアルでリブートかけなくてはならずめんどかった。
結果
問題なければ下記チャンネルで「あらBfm 24/7 Streaming」という名前のライブが止まらず配信されつづけるはず
手順
先の記事 の手順1-3と手順5を実施する。ポッドキャスト音源のmp3ファイルの名前はエピソード番号などにしておく。YouTubeのサムネとして720pサイズの画像を1枚用意しておく
ラズパイのターミナルを起動し下記コマンドで ffmpeg をインストールする
sudo apt install gcc
sudo apt install make
sudo apt install pkg-config
wget https://www.ffmpeg.org/releases/ffmpeg-6.1.1.tar.gz
tar zxfv ffmpeg-6.1.1.tar.gz
cd ffmpeg-6.1.1
./configure --enable-libx264 --enable-gpl --enable-libfreetype --enable-libharfbuzz --enable-filter=drawtext
make
sudo make install
3.YouTubeに自分のチャンネルがない場合は作り、YouTube画面で「ライブ配信を開始」ボタンでライブ配信の設定画面を開き、ストリームキーなどをメモする。ライブ配信設定で「DVRを有効にする」はOFFにしておく(巻き戻し再生を許可しない設定にする)
4.1で用意した mp3 が入ったフォルダに下記シェルクリプト(例えば "youtube_live.sh"とする)を保存する。mp3のフォルダパスやストリームキーやチャンネルIDなどは適宜確認し設定する
#!/bin/bash
cd "*** ポッドキャスト mp3 データの入ったフォルダパス ***"
stream_key="*** YouTubeライブのストリームキー ***"
image_file="*** サムネ画像データパス ***"
DISPLAY=:0 chromium-browser https://studio.youtube.com/channel/*** YouTubeチャンネルID ***/livestreaming &
sleep 20
while true
do
audio_file=`ls -1 *.mp3 | sort -R | head -n 1`
episode=`basename ${audio_file} .mp3`
ffmpeg -i "${audio_file}" \
-loop 1 -i "${image_file}" -vf "drawtext=text='${episode}':fontfile=/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf:fontsize=72:fontcolor=0xF9F8CA:x=50:y=h-th-50" \
-g 1 -c:v libx264 -preset ultrafast -tune stillimage -c:a aac -b:a 128k \
-pix_fmt yuv420p -b:v 5000k -maxrate 5000k -bufsize 8000k -shortest -f flv rtmp://a.rtmp.youtube.com/live2/${stream_key}
done
5.3と同じフォルダに下記シェルスクリプト(例えば "reboot.sh"とする)を保存する。mp3 のフォルダパスなど適宜設定する
#!/bin/bash
cd "*** ポッドキャスト mp3 データの入ったフォルダパス ***"
# 実行中のプロセスを検索しPIDを取得する
pid0=$(ps aux | grep 'youtube_live.sh' | grep -v grep | awk '{print $2}')
pid1=$(ps aux | grep 'ffmpeg' | grep -v grep | awk '{print $2}')
pid2=$(ps aux | grep 'lxterminal' | grep -v grep | awk '{print $2}')
# YouTube Live 配信を再開する
if [ -n "$pid1" ]; then
kill -9 $pid0 $pid1 $pid2
pkill -f chromium-browser
sleep 60
bash youtube_live.sh &
else
echo "プロセスが取得できませんでした"
pkill -f chromium-browser
sleep 60
bash youtube_live.sh &
fi
6.ターミナルからコマンド"crontab -e"で次のような1日1回 "reboot.sh" を叩くような cron (定期実行)を登録する。ちなみに下記は毎朝5:05に定期実行される設定となっている
5 5 * * * bash /*** reboot.shの入ったフォルダパス ***/reboot.sh &
おわり
ひとまず年末年始に時間があったので以前に不満があった部分を改善してみた。
あとはたまに止まってないか配信を確認するくらいで放置できるはず(だったらいいなあ。。)