SlideShare a Scribd company logo
1
Raspberry Pi Zero と
カメラモジュールで作る
ライブ配信実験機
Tetsuyuki Kobayashi
2018.4.25 Streaming Conference #2
2
 The latest version of this slide will
be available from here
 http://www.slideshare.net/tetsu.koba/presentati
ons
3
Who am I?
 20+ years involved in embedded systems
 10 years in real time OS, such as iTRON
 10 years in embedded Java Virtual Machine
 Now GCC, Linux, QEMU, Android, …
 Blogs
 https://qiita.com/tetsu_koba
 http://d.hatena.ne.jp/embedded/
 http://kobablog.wordpress.com/(English)
 Twitter
 @tetsu_koba
はじめに
 ラズパイの H.264 ハードウェアエン
コーダが意外にいけてる
 ラズパイを堅牢にする工夫はいろいろ
あるが、今回は省略。
ライブ配信実験機
本日話すること
 ラズパイの H.264 ハードウェアエン
コーダ
 YouTube Live に配信してみよう
 応用編 1: BGM を流そう
 応用編 2: 加速度センサーで設置角度
を自動設定しよう
ラズパイの H.264
ハードウェアエンコーダ
 1920x1080 30fps 可能。
 これを使えば CPU の負荷はオーディ
オのエンコードとネットワーク処理だ
け。
 専用コマンド (raspivid) の他に
GStreamer と ffmpeg から使用可能
映像の入力
 USB の WebCam からの映像入力では
フレームレートが出ない
 640x480 20fps くらい
 おそらくメモリの帯域が足りない
 専用カメラモジュールならば OK
 専用コマンド (raspivid) を使うとカ
メラ入力を直接 H.264 エンコーダに
つなげられるらしい
YouTubeLive に配信してみよう
必要な部材
 Raspberry Pi Zero WH ケースセット
 Raspberry Pi カメラモジュール
 電源 (microUSB: モバイルバッテリー可 )
 microUSB B オス to USB A メス変換ケー
ブル
 ネットワーク ( 以下のどれか )
 USB Ethernet アダプタ
 内蔵 WiFi
 スマフォで USB テザリング
Raspberry Pi Zero WH
ケースセット
秋月で 2,680 円 ( 税込み )
Tips
 ピンヘッダのピンが邪魔でカメラ用
ケースのフタが閉まらない !?
 「そんなのはニッパーで切ればいいん
ですよ」 by 同僚の電気エンジニア
カメラモジュール
 ラズパイ純正のカメラモジュールはい
くつかの種類がある
 初代は少し安く入手できる 3,080 円
 使用時に赤 LED が点灯
 v2 は SONY 製 4,300 円
 ピント調整の治具が付属
 そのほか赤外線カメラもある
 ソフトウェア的にはどれもほぼ同じ。
  YouTube 側の準備
 YouTubeLive の「いますぐ配信」を
使うのが簡単。
 エンコーダの映像フォーマットに合
わせてくれるので設定の不一致が起
こらない。
 live_dashboard のページで調べてメモ
 RTMP の URL ( サーバー URL )
 stream key ( ストリーム名 / キー )
ラズパイ側の準備
 sudo apt install ffmpeg
 次のページのスクリプトで
STREAM_KEY だけ自分のものに修正
する
 マイクは無いので無音をエンコードし
ている
 画像解像度はデフォルトの
1920x1080
youtube.sh
#!/bin/sh
STREAM_KEY=your_stream_key
ping -c 5 a.rtmp.youtube.com || exit $?
raspivid -o - -t 0 -rot 270 -fps 30 -b 4500000 | 
ffmpeg -re 
-ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero 
-r 30 -f h264 -i - -vcodec copy -acodec aac -ab 128k 
-f flv rtmp://a.rtmp.youtube.com/live2/$STREAM_KEY
/boot/youtube.sh
これらのコードは gist で公開
tetsu-koba/00_raspberrypi_livestream
エラーが発生したらリトライ
#!/bin/sh
green_led=/sys/class/leds/led0
led_green_ok(){
echo timer > $green_led/trigger
# pi zero seems to swap on and off
echo 3000 > $green_led/delay_off
echo 200 > $green_led/delay_on
}
led_green_error(){
echo timer > $green_led/trigger
echo 50 > $green_led/delay_on
echo 50 > $green_led/delay_off
}
mount -o remount,ro /
mount -o remount,ro /boot
while true; do
led_green_ok
./youtube.sh
led_green_error
sleep 10
done
/boot/run.sh
残念ながら
純正ケースでは
フタを閉めると
LED は見えない
電源を入れたら自動で配信開始
#!/bin/sh -e
[ -x /boot/run.sh ] && (cd /boot; ./run.sh ) &
exit 0
/etc/rc.local
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
/etc/fstab に以下の行を追加
応用編
BGM を流そう
 内蔵マイクが無いが無音はさみしい
 SD カード内に置いた音声ファイルを
BGM として繰り返し流す
 音声ファイルはあらかじめ AAC に変
換して /boot/audio/ に置く
 ffmpeg -i music.mp3 music.aac
 AAC のエンコードが不要になるの
で CPU の負荷が軽くなる
加速度センサーで設置向きを自動認識
 映像の回転角度を 0, 90, 180, 270 の 4
つを指定可能。
 加速度センサーの値から、この 4 つの
うちのどれがよいかを自動判別する
 3 軸加速度センサー [ATD345] 販売
価格 : 395 円 ( 税別 )
 http://www.aitendo.com/product/9548
 判別するのは電源 ON の後の最初の 1
回のみ。 ( 手抜き実装 )
加速度センサーを追加
ATD345
camera module v1
youtube.sh
#!/bin/sh
STREAM_KEY=your_stream_key
AFIFO=/tmp/afifo.$$
ping -c 5 a.rtmp.youtube.com || exit $?
rm -f $AFIFO
mkfifo $AFIFO
ROT=`/home/pi/axd`
raspivid -o - -t 0 -rot $ROT -fps 30 -b 4500000 | 
ffmpeg -loglevel warning -re -f aac -i $AFIFO -r 30 -f h264 
-i - -vcodec copy -acodec copy -bsf:a aac_adtstoasc 
-f flv rtmp://a.rtmp.youtube.com/live2/$STREAM_KEY &
while true; do
cat /boot/audio/*.aac
done >> $AFIFO
/boot/youtube.sh
設置向きの判定
 i2c につながった加速度センサーの設
定、測定値読み込み、設置向きの判定
を行う部分は golang で書いた。
 tetsu-koba/00_raspberrypi_livestream
 参考
 組み込みLinuxでのGolangのススメ
スマフォの USB テザリング
 以下のサイトを参考に。
 Raspberry Pi 2でAndroidのUS
Bテザリングを使う
 Raspberry Pi 2でiPhoneのUS
Bテザリングを使う
最後に
 ここで書いたことは基本的に他の
Raspberry Pi シリーズでも適用可能。
 RTMP の URL と stream key が入手で
きるサイトなら同様にいけるはず。
 エラー発生時のリカバリは手抜き。実
験用。
 デモは懇親会の時に。
27
Q & A
@tetsu_koba
Thank you for listening!

More Related Content

PDF
Try new transport protocol SRT (ver. 2)
Tetsuyuki Kobayashi
 
PPTX
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
Tokoroten Nakayama
 
PDF
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Kiyotaka Doumae
 
PDF
30分でわかるマイクロサービスアーキテクチャ 第2版
Naoki (Neo) SATO
 
PDF
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Masahito Zembutsu
 
PDF
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
 
PDF
PostgreSQL 15 開発最新情報
Masahiko Sawada
 
PPTX
トランクベース開発を活用して爆速に開発した話
Tier_IV
 
Try new transport protocol SRT (ver. 2)
Tetsuyuki Kobayashi
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
Tokoroten Nakayama
 
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Kiyotaka Doumae
 
30分でわかるマイクロサービスアーキテクチャ 第2版
Naoki (Neo) SATO
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Masahito Zembutsu
 
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
 
PostgreSQL 15 開発最新情報
Masahiko Sawada
 
トランクベース開発を活用して爆速に開発した話
Tier_IV
 

What's hot (20)

PDF
組み込みLinuxでのGolangのススメ
Tetsuyuki Kobayashi
 
PPTX
Keycloakの実際・翻訳プロジェクト紹介
Hiroyuki Wada
 
PDF
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
 
PDF
MCC CTF講習会 pwn編
hama7230
 
PPTX
マイクロサービスにおける 結果整合性との戦い
ota42y
 
PDF
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
NTT DATA Technology & Innovation
 
PDF
Dockerからcontainerdへの移行
Kohei Tokunaga
 
PDF
gRPC入門
Kenjiro Kubota
 
PDF
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
 
PPTX
Gstreamer Basics
Seiji Hiraki
 
PPTX
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
SEGADevTech
 
PPTX
フロー技術によるネットワーク管理
Motonori Shindo
 
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
NTT DATA Technology & Innovation
 
PDF
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
 
PDF
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
 
PDF
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
Unity Technologies Japan K.K.
 
PDF
暗号技術の実装と数学
MITSUNARI Shigeo
 
PPTX
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
PDF
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
Satoshi Takami
 
組み込みLinuxでのGolangのススメ
Tetsuyuki Kobayashi
 
Keycloakの実際・翻訳プロジェクト紹介
Hiroyuki Wada
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
 
MCC CTF講習会 pwn編
hama7230
 
マイクロサービスにおける 結果整合性との戦い
ota42y
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
NTT DATA Technology & Innovation
 
Dockerからcontainerdへの移行
Kohei Tokunaga
 
gRPC入門
Kenjiro Kubota
 
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
 
Gstreamer Basics
Seiji Hiraki
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
SEGADevTech
 
フロー技術によるネットワーク管理
Motonori Shindo
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
NTT DATA Technology & Innovation
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
 
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
Unity Technologies Japan K.K.
 
暗号技術の実装と数学
MITSUNARI Shigeo
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
Satoshi Takami
 
Ad

Similar to Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機 (20)

PDF
Starting qt5beta at_raspberry_pi Qtnagoya#6
Kazuo Asano (@kazuo_asa)
 
PDF
Tricky implementation of Go ARM soft float
Tetsuyuki Kobayashi
 
PDF
SIerによるSIerのためのRaspberry Pi 入門4 (タイムラプス、Lチカ)
catmoney
 
PPT
Open VZ
Kazuaki Fujikura
 
PDF
Pdp11 on-fpga
magoroku Yamamoto
 
PDF
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Kunihiro TANAKA
 
PDF
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
yaegashi
 
PDF
Cell/B.E. プログラミング事始め
You&I
 
PDF
FM音源をいじれるWebサービスを作った
CHY72
 
PPTX
ロボットシステム学2015年第7回
Ryuichi Ueda
 
ODP
Programming camp Codereading
Hiro Yoshioka
 
PDF
Building Static Website With Github And Jekyll
Yoji Shidara
 
PPT
Hacking Vox and Plagger
Tatsuhiko Miyagawa
 
PDF
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
 
PDF
WSL2+docker+JupyterとVS Codeリモート環境の構築
Saito5656
 
PDF
React+Redux+Node.js+Raspberry Piで ビデオプレイヤーを作りたかった話
Akira Fukuoka
 
PDF
Ansible2.0と実用例
OSSラボ株式会社
 
PPTX
Seti@home on debian 20140725
Yukiyoshi Yoshimoto
 
PDF
Windows コンテナを AKS に追加する
Yuto Takei
 
PPTX
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
VirtualTech Japan Inc.
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Kazuo Asano (@kazuo_asa)
 
Tricky implementation of Go ARM soft float
Tetsuyuki Kobayashi
 
SIerによるSIerのためのRaspberry Pi 入門4 (タイムラプス、Lチカ)
catmoney
 
Pdp11 on-fpga
magoroku Yamamoto
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Kunihiro TANAKA
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
yaegashi
 
Cell/B.E. プログラミング事始め
You&I
 
FM音源をいじれるWebサービスを作った
CHY72
 
ロボットシステム学2015年第7回
Ryuichi Ueda
 
Programming camp Codereading
Hiro Yoshioka
 
Building Static Website With Github And Jekyll
Yoji Shidara
 
Hacking Vox and Plagger
Tatsuhiko Miyagawa
 
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
Saito5656
 
React+Redux+Node.js+Raspberry Piで ビデオプレイヤーを作りたかった話
Akira Fukuoka
 
Ansible2.0と実用例
OSSラボ株式会社
 
Seti@home on debian 20140725
Yukiyoshi Yoshimoto
 
Windows コンテナを AKS に追加する
Yuto Takei
 
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
VirtualTech Japan Inc.
 
Ad

More from Tetsuyuki Kobayashi (20)

PDF
some topic of ffmpeg
Tetsuyuki Kobayashi
 
PDF
New VIdeo CODEC AV1
Tetsuyuki Kobayashi
 
PDF
Try new transport protocol SRT
Tetsuyuki Kobayashi
 
PDF
WebOS Open Source Edition を試してみた
Tetsuyuki Kobayashi
 
PDF
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Tetsuyuki Kobayashi
 
PDF
組み込みLinuxでのGolangのススメ(Go con版)
Tetsuyuki Kobayashi
 
PDF
ARM 64bit has come!
Tetsuyuki Kobayashi
 
PDF
Virtual memory 20070222-en
Tetsuyuki Kobayashi
 
PDF
Simple and efficient way to get the last log using MMAP
Tetsuyuki Kobayashi
 
PDF
Tips of Malloc & Free
Tetsuyuki Kobayashi
 
PDF
Basic of virtual memory of Linux
Tetsuyuki Kobayashi
 
PDF
Patch101
Tetsuyuki Kobayashi
 
PDF
ADB(Android Debug Bridge): How it works?
Tetsuyuki Kobayashi
 
PDF
Tweaking Google TV emulator
Tetsuyuki Kobayashi
 
ODP
Inter-process communication of Android
Tetsuyuki Kobayashi
 
PDF
Android is NOT just 'Java on Linux'
Tetsuyuki Kobayashi
 
PDF
Android ipm 20110409
Tetsuyuki Kobayashi
 
PDF
Init of Android
Tetsuyuki Kobayashi
 
PDF
Android On Ubuntu for developer
Tetsuyuki Kobayashi
 
PDF
Reusing your existing software on Android
Tetsuyuki Kobayashi
 
some topic of ffmpeg
Tetsuyuki Kobayashi
 
New VIdeo CODEC AV1
Tetsuyuki Kobayashi
 
Try new transport protocol SRT
Tetsuyuki Kobayashi
 
WebOS Open Source Edition を試してみた
Tetsuyuki Kobayashi
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Tetsuyuki Kobayashi
 
組み込みLinuxでのGolangのススメ(Go con版)
Tetsuyuki Kobayashi
 
ARM 64bit has come!
Tetsuyuki Kobayashi
 
Virtual memory 20070222-en
Tetsuyuki Kobayashi
 
Simple and efficient way to get the last log using MMAP
Tetsuyuki Kobayashi
 
Tips of Malloc & Free
Tetsuyuki Kobayashi
 
Basic of virtual memory of Linux
Tetsuyuki Kobayashi
 
ADB(Android Debug Bridge): How it works?
Tetsuyuki Kobayashi
 
Tweaking Google TV emulator
Tetsuyuki Kobayashi
 
Inter-process communication of Android
Tetsuyuki Kobayashi
 
Android is NOT just 'Java on Linux'
Tetsuyuki Kobayashi
 
Android ipm 20110409
Tetsuyuki Kobayashi
 
Init of Android
Tetsuyuki Kobayashi
 
Android On Ubuntu for developer
Tetsuyuki Kobayashi
 
Reusing your existing software on Android
Tetsuyuki Kobayashi
 

Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機