0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

認証付きRTSPストリームのヘルスチェック(その2)

Posted at

はじめに

前回、以下の記事

を書き、またその記事中の

他の方法で対応(その2)

で記載したコードを組み込み評価を進めてきた。

ところがとあるIPカメラにて、カメラのパスワードとシステム側のパスワードが不一致だが、RTSP DESCRIBEで稀に200 OKが返り、システム側はそのカメラが生きていると判断しているケースに遭遇した。
またそのIPカメラにVLCで視聴を試みると確実に401となり、ID/PASS入力ダイアログを表示していた。

この違いは何か。改めて前回のサンプルとVLCを動かした時のパケットをキャプチャし比較してみた。

比較結果

比較した結果、違いがあったのは以下の3点。

  • CSeqの振り方
  • UserAgent
  • OPTIONSの有無

CSeqの振り方

サンプルでは1からにしているが、VLCでは2からになっていた。でもたかがシーケンス番号なのでね、、、。VLCと同じにしたところで変化はなさそうである。

UserAgent

たかが文字列なのでね、、、。VLCと同じにしたところで変化はなさそうである。というか同じにするのもイマイチである。

OPTIONSの有無

前回の記事で書いたサンプル通り、サンプルではDESCRIBEをリクエストしているが、VLCではOPTIONS → DESCRIBEとなっていた。

正しい。確かにOPTIONSで何を利用できるかを判断してからDESCRIBEをするのは。

が、ほぼ確実に利用可能な(と思っている)DESCRIBEを最初から利用しても問題ないんじゃね???、とも思うが他の違いと比べると一番改善・回避できる可能性が高そうである。

結果

OPTIONSの有無では変化がなかった。

え、じゃぁCSeq?と試してみた。OPTIONSのリクエストは残しつつ、CSeqもVLCと同じで2からに。
となるともうほぼVLCと手順は同じである。しかし!変化はなかった。え?。え??

UserAgent???。たかが文字列じゃないの???。
と、まずはVLCのUserAgentをそのまま記載してみる。え?。え??

ばっちり。今のところ200 OKになっちゃうことはない。

変更前のUserAgent
User-Agent: rtspclient/1.0.0
変更後のUserAgent
User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2016.11.28)

※バージョンは若干古い。経緯については後述する。

curlも変更前の形式と同じである。

curlのUserAgent
User-Agent: curl/7.81.0

UserAgentの書き方

調べてみるとMDN Web Docsにたどり着く。

構文
User-Agent: <product> / <product-version> <comment>

となっている。また、よくある書式として、以下のようにも書かれてある。

よくある書式
User-Agent: Mozilla/5.0 (<system-information>) <platform> (<platform-details>) <extensions>

ということは、

<product> / <product-version>

Mozilla/5.0

で、

<comment>

(<system-information>) <platform> (<platform-details>) <extensions>

あたりか。

いずれにしろ、このIPカメラは<comment>部分の文字列または書式によって想定外の挙動をする問題が潜んでいそうだ。(最悪、認証を回避できたり???)

ひとまず

User-Agent: rtspclient/1.0.0 (RTSP Streaming Meida v1.0.0)

にして様子をみることにする。

おわりに

IPカメラのCGI呼び出しでも発生

この記事ではRTSP DESCRIBEの話に焦点を当てているが、システム側から呼び出すCGIも稀に200 OKになることが判明した。

CGI呼び出しログの抜粋
・
・
・
get : options.url = http://nnn.nnn.nnn.nnn/sd/
dumpResponse : url = http://nnn.nnn.nnn.nnn/sd/ , statusCode = 401
get : options.url = http://nnn.nnn.nnn.nnn/sd/
dumpResponse : url = http://nnn.nnn.nnn.nnn/sd/ , statusCode = 200
get : options.url = http://nnn.nnn.nnn.nnn/sd/20250326/
dumpResponse : url = http://nnn.nnn.nnn.nnn/sd/20250326/ , statusCode = 401
get : options.url = http://nnn.nnn.nnn.nnn/sd/20250326/
dumpResponse : url = http://nnn.nnn.nnn.nnn/sd/20250326/ , statusCode = 401
・
・
・

このIPカメラは今回とは逆の事象(通常は200だが稀に401を返す)も発生することがあり、ひとまず200以外になってもリトライするようにしている。上記のログは401が返り、リトライしたら200が返って時のものである。(以降はまた401が返り始め、再度200になることはなかった)

この辺りもUserAgentを変更すると改善するのかもしれない。

VLCのバージョンが古い

経緯については以下にまとめている。

curlのUserAgent

RTSP DESCRIBEをcurlで試す話を書いているので良ければ。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?