1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Piで作るsipカメラ

Last updated at Posted at 2025-01-15

asteriskで出来ることを考えてたら、sipカメラの存在を知りました。
raspiで出来ないかと考え、できるかもと思い、作りました。
WebRTCで観るのではなく、SIPソフトフォンで観るのにしました。
スマホのソフトフォンから、内線番号をダイヤルすると、カメラの映像がみえます。

ハードとソフト

Rasberry Pi

  • Raspberry Pi 3B
  • CSIのとこにつける、ov5674なカメラ
  • raspi os (bookworm 32bit)
  • libcamera-tools
  • baresip

Rasberry Pi以外

  • asteriskが乗った、openwrt機
  • ddnsサービス
  • スマホのソフトフォン、Zoiperかacrobits(どちらも有料)

raspiのカメラの動作チェック

$ rpicam-vid -n -o movie.h264 --save-pts movie.pts -t 10000
$ mkvmerge -o movie.mkv --timecodes 0:movie.pts movie.h264

で、できたmovie.mkvをscpでデスクトップ機に持ってきて確認しました。

v4l2

baresipを起動すると、v4l2関係のエラーが出ます。
csiのカメラのv4l2は、素だとおかしいのだそうで、v4l2を使うコマンドは、先頭にlibcamerifyと書いてそのコマンドを通して起動する必要があります(v4l2-ctlとか、表示が変わります)。

$ sudo apt install libcamera-tools

で、インストールします。

openwrt, asterisk

openwrtは、新たにrtpポートをあけました。
ローカルdnsで、ddnsのFQDNは内部アドレスで返します。

openwrt上のasteriskは、
endpoint/allow = h264,ulaw
としました。
aor/remove_existing = yes
も追加しました。

baresip

baresipを一度起動すると、.baresipフォルダーに設定ファイル一式のひな型ができます。
.baresip/accountsは最終的にこうなりました。

<sip:「内線番号」@「asteriskのIP」:「asteriskのport」>;transport=udp;auth_pass=「内線番号のパスワード」;answermode=auto;regint=60

.baresip/configは、certと音声関係をコメントアウトし、動画関係は、

#video_source           v4l2,/dev/video0
#video_display          x11,nil
#video_size             352x288
video_size              320x240
video_bitrate           500000
video_fps               25.00
video_fullscreen        no
#videnc_format           yuv420p

の様にしました。必要なmoduleは、avcodec.so、v4l2.so, v4l2_code.soなどと思います(無駄があってもよい)。
avcodecはdefaultではlibx264ですが、h264_v4l2m2mも使えます。
ソフトフォンによって、挙動がちがうのでどちらがいいか決めかねています。 Zoiper以外h264_v4l2m2mだと、フレームがたまにしか更新されないので、libx264のほうがいいです。

$ libcamerify baresip

で、起動します。

ソフトフォンで掛けてみる

video対応のソフトフォンでbaresipの内線に掛けて映るか試します。すぐ映るときと数十秒かかるときがあり、映らないと判断するのが大変です。
lan内かどうかとか、video通話の始め方とかソフトフォンによって変わるので、試行錯誤して下さい。

結局、実用的でない 使えなくもない

しばらく使わないでいると、baresipが見つからないというエラーで、baresipの再起動が必要になってしまいます。 .baresip/accountsに;regint=60を追加して様子を見ています調子がいいです。どうも、タイマーが止まるか遅れているような気がします。
それと、lan内とスマホ回線で、どちらもうまくいくソフトフォンが見つかりません。

いろいろ試したソフトフォン

android端末、docomo simでいろいろ試した結果です。

  • linphoneは、lan内ではうまくいきますが、スマホ回線では、stunを指定してもうまくいきません。
  • Zoiperは、lan内(stunなし)とスマホ回線(stunあり)と設定を切り替えれば、videoは映ります。ですが、スマホ回線のとき内線の他の電話にかけると音声が片側だけになります。ドアホンに拡張したときに、問題になります。
  • acrobitsは、stunのありなしの切り替えが必要になりますが、どちらの回線でもうまくいきます。 「環境設定」「ネットワーク」でRTPのネットワーク優先度をモバイルデータにすれば切り替えの必要がありません。しかし、videoは縦いっぱいにひきのばされ、左右が切り取られたものになります。

なので、通話が必要なければ、lan内ではlinphoneをスマホ回線ではZoipherと使い分ければいいと思います。
通話が必要な時は、acrobitsになります。ちなみにv4l2でカメラの回転はできなくなったようです。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?