投稿日: | 最終更新日:
ラズパイZeroに動画配信サーバーを構築する
ラズパイZeroに搭載されているSocのエンコーディング機能を使い、自宅内で使える動画配信サーバーを構築します。
FFmpegで高速エンコード
ラズパイZeroのSoc(System on Chip)と呼ばれるハードウェアを使い、動画をエンコードします。動画変換ソフトはFFmpegを使い、動画の形式はH.264形式です。FFmpegは、動画と音声を変換することのできるフリーソフトウェアです。
動画を配信するには?
Webサーバーアプリケーションのnginxを使います。リアルタイムに配信できるように、RTMPモジュールを導入します。動画ファイルは、前回作成したファイルサーバーに保存します。
→ラズパイZeroにファイルサーバー(samba)を構築する
今回作業の流れ
前回までの内容
どのラズパイでもよいのですが、ラズパイZeroを使います。ラズパイZeroにSSH接続して、ラズパイと同じLAN内のPCが共有できる領域を作成します。
→ラズパイZeroにOSをインストールしてリモートアクセス(サーバー利用)
→ラズパイZeroにファイルサーバー(samba)を構築する
今回の内容
SSHの接続、コマンド操作は全てリモートPCを使って行います。ラズパイZeroを直接操作はしません。
ラズパイZeroを起動し、SSH接続します。
↓
FFmpegのビルド・インストールを実行します。
↓
FFmpegで、mkv形式動画をmp4形式に変換します。
↓
nginxのビルド・導入をします。
↓
ラズパイからコマンドで動画を配信します。
↓
クライアントPCから、vlcで動画を受信します。
準備
ラズパイOSのインストール・SSH接続・初期設定を完了したものとします。(※前回の投稿)
用意するもの
本体 | RaspberryPi Zero |
---|---|
OSイメージ | Raspbian Jessie Lite |
SDカード | 4GB以上のSDカード |
電源 | USB-ACアダプター |
有線LANアダプター | LAN-GTJU3 |
USBハブ | U2HS-MB01-4BBK |
USBメモリー | SanDisk USB Flash Drive 32GB |
ラズパイZeroにリモート操作するPC
今回はLinuxを前提に説明しますが、windowsやMacでも操作可能です。
OS | Ubuntu 16.04.1 LTS 64bit |
---|
ネットワーク環境
市販のブロードバンドルーターにラズパイZeroとリモート操作用のPCを接続します。
SSH接続
①SSH接続をします。以下のコマンドでラズパイZeroに接続します。
ssh pi@IPアドレス
FFmpegのビルド・インストール
ハードウェアエンコーディング機能を使うため、FFmpegを有効にします。
①インストール前にアップデートを実行します。
sudo apt-get update sudo apt-get upgrade
②ネットワークが切れても状態を保持するため、tmux(端末多重化ソフトウェア)をインストールします。
sudo apt-get install git tmux
③tmuxを実行します。
tmux
④ホームディレクトリに移動し、「git clone」でFFmpegを入手します。
cd git clone https://github.com/FFmpeg/FFmpeg.git
⑤FFmpegディレクトリに移動し、オプションを設定を変更します。
cd FFmpeg ./configure --enable-gpl --enable-omx --enable-omx-rpi --enable-nonfree
⑥コンパイルします。(※コンパイルに時間がかかります。)
make
⑦ビルドしたソフトウェアをインストールします。
sudo make install
⑧実際に動画を変換します。「.mkv」形式のファイル(sample.mkv)を共有フォルダ「/var/shared」に保存します。
⑨以下のコマンドでsample.mkvをH.264形式にハードウェアエンコードします。
cd /var/shared ffmpeg -i sample.mkv -c:v h264_omx -c:a aac sample.mp4
-i |
入力ファイルのパスを指定します。(複数指定可) |
---|---|
-c:v h264_omx | H.264形式にハードウェアエンコードするためのコーデック(h264_oxm)を指定します。 |
-c:a acc | 音声用のコーデック(acc)を指定します。 |
nginxのビルド・導入
Raspbianには最初からnginxパッケージが含まれていますが、RTMPモジュールが組み込まれていません。これをソースコードからビルドします。
①以下のパッケージをインストールします。
sudo apt-get install libpcre3-dev libssl-dev
libpcre3-dev | 構文と意味をできるだけ「Perl 5」のものに似せた正規表現に対応するための関数のライブラリです。 |
---|---|
libssl-dev | 開発用 SSL ライブラリ、ヘッダおよびドキュメントです。 |
②ホームディレクトリに移動し、wgetで以下のファイルを取得します。(2017年5月現在、1.13.0が最新です。新バージョンが公開されていれば、「nginx-1.13.0.tar.gz」に最新バージョンを指定して下さい。→https://nginx.org/en/download.html)
cd wget https://nginx.org/download/nginx-1.13.0.tar.gz
③圧縮ファイルを解凍します。
tar zxvf nginx-1.13.0.tar.gz
④RTMPモジュールを取得します。
git clone https://github.com/arut/nginx-rtmp-module.git
⑤nginx-1.13.0ディレクトリに移動し、オプションを設定を変更します。
cd nginx-1.13.0/ ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
–with-http_ssl_module | デフォルトで無効なモジュールを有効にします。 |
---|---|
–add-module=../nginx-rtmp-module | サードパーティモジュール(nginx-rtmp-module)の追加します。 |
⑥コンパイルします。(※コンパイルに時間がかかります。)
make
⑦ビルドしたソフトウェアをインストールします。
sudo make install
⑧インストールが完了したら、nginxの設定ファイルを編集します。
sudo nano /usr/local/nginx/conf/nginx.conf
以下のハイライトの部分を「nginx.conf」に追記して下さい。
#access_log logs/host.access.log main; location / { root html; index index.html index.htm; } location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xls; } location /stat.xsl { root home/pi/nginx-rtmp-module; } location /control { rtmp_control all; } #error_page 404 /404.html;
一番下の行に、以下の記述を追加します。
} rtmp { server { listen 1935; ping 30s; notify_method get; application video { live on; } } }
⑨以下のコマンドでnginxを起動します。
sudo /usr/local/nginx/sbin/nginx
動画の配信
ラズパイ側の作業
以下のコマンドを実行します。先ほどの動画サンプル(sample.mkv)を「video」アプリの「sample」というチャンネルで配信するコマンドです。
while [ 1 ] ; do ffmpeg -re -i /var/shared/sample.mkv -c:v h264_omx -c:a aac -f flv rtmp:192.168.1.200/video/sample; done
while [ 1 ] ; do 〜 ;done | 無限ループです。 |
---|---|
rtmp:192.168.1.200/video/sample | 「video」というアプリの「sampe」というチャンネルを配信します。「192.168.1.200」は、ラズパイのipアドレスです。 |
クライアント側の作業
RTMPの動画を受信できるクライアントソフトを利用して動画を見ます。
①「VLC media player」をインストールします。
sudo apt-get update sudo apt-get install vlc
②「VLC media player」を起動します。メニューの「メディア」→「ネットワークストリーム」を開くを選んで、「ネットワークにURLを入れて下さい」に「rtpm://rtmp:192.168.1.200/video/sample」を入力して再生します。
- Python 114
- 制作 54
- RaspberryPi 41
- Django 40
- WordPress 40
- Linux 27
- VPS 22
- JavaScript 21
- PHP 20
- HTML・CSS 19
- AWS 16
- 仮想環境 15
- レスポンシブデザイン 13
- マイコン 11
- WEB全般 11
- 動画製作 9
- Webサービス 8
- 統合開発環境 8
- 機械学習 8
- PyCharm 7
- jQuery 7
- AfterEffects 7
- 起業・設立 7
- Django REST framework 6
- C# 6
- デザイン 6
- SEO 6
- pydata 6
- Visual Studio 5
- 数学 5
- 携帯サイト 5
- heroku 5
- Mac 5
- illustrator 5
- node.js 5
- Anaconda 5
- Nginx 4
- Jupyter Notebook 4
- インフラ 4
- Google Colaboratory 4
- symfony 4
- Webスクレイピング 3
- photoshop 3
- Go言語 3
- PC 3
- ツール 3
- Docker 3
- facebook 3
- 作業効率化 3
- データベース 3
- Cloud9 3
- コマンド 2
- micro:bit 2
- Kali Linux 2
- Webサーバー 2
- MariaDB 2
- ドローン 2
- コンテナ 2
- DaVinci Resolve 2
- ネットワーク 2
- Java 2
- movie 2
- PCDJ 2
- 音楽 2
- XSERVER 2
- Ansible 1
- Vue.js 1
- JSON 1
- Bootstrap 1
- バージョン管理システム 1
- SSL 1
- S3 1
- ムームードメイン 1
- ネットワーク 1
- アニメーション 1
- D3.js 1
- Rhino 1
- アニメ 1
- git 1
- windows 1
- アクセス解析 1
- スマートフォン 1
- アフィリエイトノウハウ 1
- 知識 1
- TypeScript 1
- 役立つ本・書籍 1
- データサイエンス 1
- ESP32 1
- AI 1
- ownCloud 1
- API 1