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でカメラの回転はできなくなったようです。