はじめに
ラズパイカメラを使用して raspivid コマンドと ffmpeg コマンドを組み合わせた 呪文 を唱えて YouTubeLive 配信を行ってみた。
Wi-Fi 接続環境の問題
社外勉強会へ行くと Wi-Fi 接続環境が提供されることがあるが、セキュリティ上の都合で YouTubeLive 配信ができない場合があるので注意が必要。
パターン①は自宅等では一般的で全く問題ないケースだが、社外勉強会や公衆無線 LAN 等ではほとんど見かけない。
パターン②は社外勉強会や公衆無線 LAN でよく見かけるケース。NDI 等で映像・音声を共有し、OBS 等で Picture in Picture 形式で配信することはできない。
解決案として、Wireless WAN 機能の付いた Wi-Fi ルーター (WMR-433W-WH など) を使用することでパターン①と同じ環境を作ることができる。
パターン③はストリーミングプロトコルで使用するポート番号も制限されているため、配信することはできない。
ラズパイからの配信環境
Raspberry Pi 3 Model B / B+、Raspberry Pi Zero W は無線 LAN 機能を持っているため Wi-Fi 環境へ接続できる。
ストリームキー
YouTubeLive 配信にはストリームキーが必要になる。ストリームキーを取得するためにチャンネルを有効化する必要があるが、有効になるまで 24時間 程度掛かるため注意。(事前に準備しておく必要がある。)
必要な機材
- Raspberry Pi 3 Model B+ (Raspberry Pi 3 Model B、Raspberry Pi Zero W でも可)
- Raspberry Pi カメラモジュール (カメラモジュール V2 でも可)
- HDMI 3.5 インチ LCD ディスプレイモニター (MPI3508 を使用。無くても可。)
呪文
raspivid コマンドと ffmpeg コマンドを組み合わせて ラズパイカメラ の映像を YouTubeLive 配信することができる。コマンドの最後にストリームキーを指定する必要がある。ストリームキーを変更すれば異なるチャンネルに配信することが可能。
$ raspivid -o - -rot 90 -t 0 -vf -hf -fps 25 -b 500000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i - -vcodec copy
-acodec aac -ab 128k -g 50 -strict experimental -s 640x320 -f flv rtmp://a.rtmp.youtube.com/live2/[ストリームキー]
enebular (Node-RED の exec ノード) から 呪文 を唱える場合、"|" (パイプ) が含まれるとエラーになるため、シェルスクリプト化する。(例えば、live.sh という名前で保存する。)
#!/bin/sh
ARG=$1
raspivid -o - -rot 90 -t 0 -vf -hf -fps 25 -b 500000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i - -vcodec copy
-acodec aac -ab 128k -g 50 -strict experimental -s 640x320 -f flv rtmp://a.rtmp.youtube.com/live2/$ARG
live.sh の後ろにストリームキーを指定してコマンドを実行する。
$ live.sh [ストリームキー]
enebular から 呪文 を唱える
enebular でフローを作成し、exec ノードから 呪文 (シェルスクリプト) を 唱える (実行する)。inject ノードから配信の開始と終了をすることができる。配信開始の場合は、既に配信している ffmpeg プロセスを終了してから開始するフローにしている。
exec ノード
また、ブラウザから特定の URL へアクセスすることで配信の開始と終了をすることもできる。(192.168.13.4 はラズパイの IP アドレス)
※ ニーズがあるかどうか分かりませんが、enebular でフローを公開しておきます。(´・ω・`)
https://enebular.com/discover/flow/47b455f5-f4c1-4ca4-94af-267ae9b61705
NDI 送信の呪文
以前記事に書いた「ラズパイから NDI 送信してみた」も同じように enebular から 呪文 (シェルスクリプト) を唱える (実行する) ことができる。
NDI 送信環境
Wi-Fi 接続環境パターン①は問題無いが、パターン②では Wireless WAN 機能の付いた Wi-Fi ルーターを使用することでラズパイカメラの映像を PC へ送信することが可能。
NDI 送信開始フロー
exec ノードから NDI 送信スクリプト (ndi.sh) を実行する。
#!/bin/sh
raspivid -o - -rot 90 -t 0 -vf -hf -fps 10 -b 500000 | /home/pi/NDI/ffmpeg/ffmpeg -re -f h264 -i - -vcodec wrapped_avframe -strict experimental -f libndi_newtek -pix_fmt uyvy422 -s 640x360 RPiCamera
OBS で NDI 受信
ラズパイカメラの映像を PC の OBS で受信し、テロップ等を加えて YouTubeLive 配信することができる。
まとめ
enebular AWS IoT agent と enebular editor からラズパイを操作して YouTubeLive 配信をできるようにしてみました。ラズパイへ SSH でログインして 呪文 を唱える必要が無くなりました。
みなさんも 良き enebular ライフを!