普段何気なくIPカメラにRTSPでリクエストを送って〜としていたがその内側についてよく知らなかったので調べてみる
rtspとは
RTSPとはReal-Time Streaming Protocolの略で、主にストリーミングメディアの制御を行うためのアプリケーション層プロトコル。
あくまで制御を行うプロトコルなのでこのRTSPリクエストのレスポンスに動画がのって返ってくるわけではない
つまり、RTSPは再生、停止などを伝える単なる「リモコン」の役割を果たす。
映像データはどこからきてる?
調べていて自分も一番疑問に思ったところだった。rtspが制御の役割をしてるのなら肝心の中身はどこからくるのか
結論から言うとRTPと言う別のアプリケーション層プロトコルを通じてデータが送信される。
基本的に、RTSPとRTPはセットで使われる。
RTP・・・トラックのような役割。RTSPの指示にしたがって映像や音声データを運ぶ役割
RTSP・・・トラックを制御するリモコンの役割。RTSPが「止めて」と言うリクエストを出せば、RTPはそれに従いとまる。
クライアント → 📷 (RTSP): 「この映像が見たいんだけど、準備して (SETUP)」とリクエスト。
📷 → クライアント (RTSP): 「OK!準備できたよ (200 OK)」と応答。
クライアント → 📷 (RTSP): 「じゃあ、再生して (PLAY)」とリクエスト。
📷 → クライアント (RTP): 応答として、映像データをRTPパケットに乗せて送信開始!
クライアント → 📷 (RTSP): 「ちょっと止めて (PAUSE)」とリクエスト。
📷: RTPパケットの送信を一時停止。
クライアント → 📷 (RTSP): 「もう見るのやめる (TEARDOWN)」とリクエスト。
📷: 通信セッションを終了し、RTPの送信も完全に停止。
何故分けてるのか
役割を分業することによって色々な恩恵がある。
RTPはベースでUDPが使用されている。これはいかに遅延なくリアルタイムに届けるかと言う思想からUDPを使用している。
しかしRTSPはベースでTCPを使用してる。これは再生・停止は確実性が必要になるので信頼性の高いTCPを使用している。
このように「制御」と「データ送信」で役割を分業することによってより効率的なシステムが構築される。
また、近い未来データ送信にさらに革新的なプロトコルができた場合でも、分業しているおかげでRTSPを使いながらもその中身を変更するだけで済む。
まとめ
rtspは動画をのせてるわけではなかった。中でrtpと言う別のプロトコルが仕事をして、映像を届けてくれていた。
間違い箇所等あったら指摘のほどよろしくお願いします!