enebular で YouTubeLive 配信の呪文を唱えてみた。


はじめに

ラズパイカメラを使用して 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 という名前で保存する。)

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) を実行する。

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 ライフを!