Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RTSPクライアントを自作してみた話

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 RTSPクライアントを自作してみた話

Avatar for simotin13

simotin13

May 30, 2026

More Decks by simotin13

Other Decks in Programming

Transcript

  1. Overview~RTSPとは何か~ Real Time Streaming Protocol。 ネットワークカメラ、ライブ配信などで使われるプロトコル Real Time Streaming Protocol

    市販のRTSP対応ネットワークカメラ (Tp-Linkとか) RTSP対応ソフト (VLC media playerとか) RTSPでストリーミングを受信して録画がしたい。
  2. RTPでのストリーミングデータの受信 ▪RTPのデータフォーマット RTPヘッダ:12byteとデータ部で構成される ▪RTPヘッダの内容 RTP Header(12 byte) Payload(n byte) 内容

    サイズ フィールド バージョン(2固定) 2bit Version パディング有無 通常は0 1bit Padding header extension 有無 1bit Extensition audio mixer 用 通常は0 4bit CSRC Count コーディック依存 H.264ではframe終了を表す 1bit Marker ペイロードタイプ 7bit Payload Type シーケンス番号 16bit Seq Frameのタイムスタンプ 32bit Timestamp ストリームID(送信元ID) 32bit SSRC
  3. NAL(Network Abstruct Layer)の解析 RTPのpayload_typeやSSRCをもとに映像データかどうかが判断できる H.264の場合、RTPのデータ部にNAL(Network Abstruct Layer)というデータ構 造でデータが格納されている。 NAL Header(1

    byte) Payload(n byte) 内容 サイズ フィールド forbidden_zero_bit(0固定) 1bit F フレーム間予測での参照値 2bit nal_ref_idc フレームタイプ 5bit Type
  4. NAL(Network Abstruct Layer)の解析 NALのデータによっては、複数のRTPパケットに分割されて送信されたり、1回のRTPのデー タの中に複数のNALユニットが含まれている場合がある。 映像を正しく表示・録画するためには、SPS・PPS の受信して保持しておく必要がある。 SPS(Sequence Parameter Set):映像の設定値(width,height,

    H.264のprofile) PPS(Picture Parameter Set): H.264のデコード用情報 内容 NALタイプ(番号) 複数のRTPパケットに分割して1つのNAL(基本的には画像フレームの データ)を送信する。 フレームデータは基本的にこのNALタイプで飛んでくることが多い。 FU-A(28) 1つのRTPパケットに複数のNALユニットが含まれている。 SPSやPPSはフレームデータと比べてデータ長が小さいので1つのRTP パケットにまとめることができる。 STAP-A(24) 1つのRTPパケットに複数の画像フレームデータをまとめる。 実際には1フレームは大きいので使われてないっぽい。 STAP-B(25)