2022年2月19日土曜日

Raspberyy Pi rtsp server

 


Raspberyy Pi  rtsp

Raspberry Pi と USB接続のWebカメラ で


1 はじめに

手軽に利用できるRTSPサーバ:Raspberry Pi 

使用:v412rtspserver

https://github.com/mpromonet/v4l2rtspserver


Linux OSのディストリとバージョン

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.4 (stretch)
Release: 9.4
Codename: stretch

カーネル

$ uname -a
Linux raspberrypi 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l GNU/Linux

(3) Webカメラ

http://buffalo.jp/product/multimedia/web-camera/bsw32km01h/


3 コンパイル等


(1) カメラの認識

カメラが /dev/video0 で認識できていることの確認

$ v4l2-ctl --list-devices
USB Camera: USB Camera (usb-3f980000.usb-1.1.3):
/dev/video0

/etc/modulesbcm2835-v4l2を追加して再起動する

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
bcm2835-v4l2

(2) 必要モジュールのインストール

$ sudo apt-get install cmake
$ sudo apt-get install subversion
$ sudo apt-get install liblivemedia-dev

(3) コンパイル及び、インストール

$ git clone https://github.com/mpromonet/h264_v4l2_rtspserver.git
$ cd h264_v4l2_rtspserver
$ sudo cmake .
$ sudo make install

コンパイル及び、インストールが完了すると、/usr/local/bin/v4l2rtspserverが利用可能になります。

Install the project...
-- Install configuration: ""
-- Installing: /lib/systemd/system/v4l2rtspserver.service
-- Installing: /usr/local/bin/v4l2rtspserver
-- Installing: /usr/local/share/v4l2rtspserver/index.html
-- Installing: /usr/local/share/v4l2rtspserver/hls.js/dist/hls.light.min.js

4 配信

v4l2rtspserverを実行するだけで、デフォルト値でRTSPサーバとして動作します。(採用されたデフォルト値は、コンソールに表示されます。)

$ sudo v4l2rtspserver
Create V4L2 Source.../dev/video0
driver:uvcvideo capabilities:84200001 mandatory:4000001
/dev/video0 support capture
/dev/video0 support streaming
/dev/video0:YUYV size:640x480
Cannot set pixelformat to:H264 format is:YUYV
/dev/video0:MJPG size:640x480 bufferSize:614400
fps:1/30
nbBuffer:0
Device /dev/video0 nb buffer:10
Create Source .../dev/video0
begin thread

デフォルトで起動した場合、rtsp://<RaspberryPiのアドレス>:8554/unicastでアクセス出来ます。(デフォルトでポート8554、パスは/unicastとなっています)

パラメータでデフォルト値以外の指定も可能です。

./v4l2rtspserver [-v[v]] [-Q queueSize] [-O file] \
[-I interface] [-P RTSP port] [-p RTSP/HTTP port] [-m multicast url] [-u unicast url] [-M multicast addr] [-c] [-t timeout] \
[-r] [-s] [-W width] [-H height] [-F fps] [device1] [device2]
-v : verbose
-vv : very verbose
-Q length: Number of frame queue (default 10)
-O output: Copy captured frame to a file or a V4L2 device

RTSP options :
-I addr : RTSP interface (default autodetect)
-P port : RTSP port (defa-ult 8554)
-p port : RTSP over HTTP port (default 0)
-U user:password : RTSP user and password
-R realm : use md5 password 'md5(::')
-u url : unicast url (default unicast)
-m url : multicast url (default multicast)
-M addr : multicast group:port (default is random_address:20000)
-c : don't repeat config (default repeat config before IDR frame)
-t secs : RTCP expiration timeout (default 65)
-S[secs] : HTTP segment duration (enable HLS & MPEG-DASH)

V4L2 options :
-r : V4L2 capture using read interface (default use memory mapped buffers)
-w : V4L2 capture using write interface (default use memory mapped buffers)
-s : V4L2 capture using live555 mainloop (default use a separated reading thread)
-f : V4L2 capture using current capture format (-W,-H are ignored)
-fformat : V4L2 capture using format (-W,-H are used)
-W width : V4L2 capture width (default 640)
-H height: V4L2 capture height (default 480)
-F fps : V4L2 capture framerate (default 25, 0 disable setting framerate)
-G x[x] : V4L2 capture format (default 0x0x25)

ALSA options :
-A freq : ALSA capture frequency and channel (default 44100)
-C channels: ALSA capture channels (default 2)
-a fmt : ALSA capture audio format (default S16_LE)

device : V4L2 capture device and/or ALSA device (default /dev/video0)

5 自動起動

Raspberry Pi を起動しただけで、自動的に配信が開始するように、/etc/rc.local に /usr/local/bin/v4l2rtspserver を書いておきます。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi

/usr/local/bin/v4l2rtspserver -W 1280 -H 960 -F 7

exit 0