カメラモジュールの映像をH.264で圧縮してRTSPプロトコルによりストリーミング配信(その2)

raspividとLIVE555を組み合わせて使う方法でも同じことはできるが、大きなdelayが問題だ。そこで、もう少しdelayが少ない方法としてh264_v4l2_rtspserverを試してみた。

こちらも同じようにまずは、前準備としてRaspberry Piにカメラモジュールが正しく接続されていることを確認しよう。

raspi-configを起動してEnable Cameraを設定し、カメラモジュール用のデバイスドライバがインストールされていることを確認する。

  1. $ v4l2-ctl --list-devices
  2. mmal service 16.1 (platform:bcm2835-v4l2):
  3. /dev/video0

ブート時にデバイスドライバーをロードするよう、/etc/modules に次の1行を追加し、再起動しておく。

  1. bcm2835-v4l2

再起動して、必要なパッケージをインストールする。

  1. $ sudo apt-get install cmake
  2. $ sudo apt-get install subversion
  3. $ sudo apt-get install liblivemedia-dev

h264_v4l2_rtspserverのソースをダウンロードする。

  1. $ git clone https://github.com/mpromonet/h264_v4l2_rtspserver.git

作成されたh264_v4l2_rtspserverディレクトリに移動してビルドする。

  1. $ cd h264_v4l2_rtspserver
  2. $ sudo cmake .
  3. $ sudo make
  4. $ sudo make install

次のようにして実行する。

  1. $ sudo h264_v4l2_rtspserver -F 25 -W 1280 -H 720 -P 8554 /dev/video0
  2.  Create V4L2 Source.../dev/video0
  3.  driver:bm2835 mmal 85200005
  4.  /dev/video0 support read/write
  5.  /dev/video0 support streaming
  6.  /dev/video0:H264 size:1280x720 bufferSize:921600
  7.  fps:1/25
  8.  nbBuffer:1
  9.  Start V4L2 Capture.../dev/video0
  10.  Device /dev/video0 nb buffer:10
  11.  Play this stream using the URL "rtsp://192.168.1.80:8554/unicast"
  12.  begin thread
  13.  profile-level-id=640028;sprop-parameter-sets=J2QAKKwrQCgC3QDxImo=,KO4CXLA=
  14.  V4L2DeviceSource::doStopGettingFrames

VLCメディアプレイヤーで確認する。この方法では、delayが1秒程度に抑えられた。

  1. rtsp://192.168.1.80:8554/unicast

このh264_v4l2_rtspserverは、次のようなオプションがありお手軽に使えそうだ。ソースを見ればすぐにわかるが、実はh264_v4l2_rtspserverも内部でLIVE555を使っている。

  1. ./h264_v4l2_rtspserver [-v[v]] [-Q queueSize] [-O file] \
  2.    [-I interface] [-P RTSP port] [-T RTSP/HTTP port] [-m multicast url] [-u unicast url] [-M multicast addr] [-c] [-t timeout] \
  3.    [-r] [-s] [-W width] [-H height] [-F fps] [device1] [device2]
  4.  -v : verbose
  5.  -vv : very verbose
  6.  -Q length: Number of frame queue (default 10)
  7.  -O output: Copy captured frame to a file or a V4L2 device
  8.  RTSP options :
  9.  -I addr : RTSP interface (default autodetect)
  10.  -P port : RTSP port (default 8554)
  11.  -T port : RTSP over HTTP port (default 0)
  12.  -u url : unicast url (default unicast)
  13.  -m url : multicast url (default multicast)
  14.  -M addr : multicast group:port (default is random_address:20000)
  15.  -c : don't repeat config (default repeat config before IDR frame)
  16.  -t secs : RTCP expiration timeout (default 65)
  17.  V4L2 options :
  18.  -r : V4L2 capture using read interface (default use memory mapped buffers)
  19.  -s : V4L2 capture using live555 mainloop (default use a separated reading thread)
  20.  -f : V4L2 capture using current format (-W,-H,-F are ignored)
  21.  -W width : V4L2 capture width (default 640)
  22.  -H height: V4L2 capture height (default 480)
  23.  -F fps : V4L2 capture framerate (default 25)
  24.  device : V4L2 capture device (default /dev/video0)

このコマンドを見てすぐに、認証用のユーザとパスワードが無いことに気が付くと思う。

無いんです本当に、、、でもご安心あれ。ちょっとソースを変更するだけで認証が可能になる。

2016年02月09日