streaming
gstreamer
TinkerBoard

TinkerboardとWebCamで720p 30fpsでライブ配信をする

ラズパイでできなくてtinkerboardでできること

ラズパイではUSBのWebcamからの映像入力だと性能がでませんでした。私はこれをメモリ帯域が足りないためと推測しています。tinkerboardではメモリが LPDDR3のデュアルチャネルになっているのでメモリ帯域が広くなっています。これによってWebCamからの映像入力が余裕をもってできるようになっています。

この記事ではtinkerboardとWebcamでYouTube Liveにライブ配信する例を示します。
WebcamにはLogitec のC270を使用しています。

準備

tinkerboadのハードウェアエンコーダはgstreamerから使用可能です。
gstreamerのインストール。

sudo apt install gstreamer1.0-*

YouTubeLiveのlive_dashboardのページで自分のアカウントのstream_keyを調べておきます。

ライブ配信のスクリプト

普及価格のWebcamは最大で1280x720 30fps の映像が入力できます。このときの映像はmjpegで圧縮された状態で出てくるので、それをソフトウェアでデコードします。
H.264へのエンコードはハードウェアエンコーダを使用します。
音声はWebcam内蔵のマイクから入力して、ソフトウェアでAACにエンコードします。

STREAM_KEYのところは自分のstream_keyに修正してください。

livestream.sh
#!/bin/sh

RTMP_URL=rtmp://a.rtmp.youtube.com/live2
STREAM_KEY=your_stream_key

gst-launch-1.0 -v -e \
    flvmux streamable=true name=mux ! \
        rtmpsink sync=false location="$RTMP_URL/$STREAM_KEY" \
    v4l2src ! image/jpeg,width=1280,height=720,framerate=30/1 ! \
        jpegdec ! videoconvert! queue ! mpph264enc ! queue ! h264parse ! mux. \
    alsasrc device=plughw:1 ! audio/x-raw,width=16,depth=16,rate=48000,channels=1 ! \
        queue ! voaacenc bitrate=32000 ! queue ! mux. 

CPUの負荷

H.264のエンコードはハードウェアで行っています。
CPUでやっているのはwebcamから取得したmjpegのデコードと音声のAACエンコードです。
ライブ配信中のhtopの画面は以下の通り。まだ余裕があります。

スクリーンショット 2018-05-04 21.45.43.png

mjpegのデコードもハードウェアでできるかもしれないのですが、まだ成功していません。
それができればさらにCPUの負荷が減ります。

CPU、メモリともにまだ余裕があるので、ライブ配信画面に何か重ね書きしたりエフェクトを入れたりすることもできそうです。

ラズパイだと専用カメラモジュールを使えば最大1080p 30fpsのライブ配信ができますが、この場合はカメラとH.264エンコーダを直結して使うことになるので、カメラから来た映像に何かソフトウェアで加工するということはできません。

今回はまだ試していませんが、tinkerboardでラズパイ用のカメラモジュールをつないで使用することもできるようです。これなら1080p 30fpsいけそうです。

参考

Multimedia User Guide(Rockchip Linux)
gstreamer-rockchip-extra
rockchip-linux
「Raspberry Pi Zeroと カメラモジュールで作るライブ配信実験機」の話をしました
ラズパイ3よりもパワフルなTinkerboardを試す