👓

はじめてOSS(rtsp-client-library)にコミットしてみた

2024/11/20に公開

はじめに

はじめてOSSにコミットしてみました。
「Thanks for PR」とコメントがあり、マージされたときは嬉しかったですね。何をしたか簡単に書き残しておきます。

何をコミットしたか

前回紹介した軽量化RTSPのクライアントライブラリ「rtsp-client-android」にコミットしてみました。

https://zenn.dev/takudooon/articles/ded8cf2d014b32

コミット内容はこちらです。
雑な英語ですが、なんとか伝わったようです。

[fix] SDP parsing issue by minwinmin · Pull Request #90 · alexeyvasilyev/rtsp-client-android

かいつまんで説明すると、上述したライブラリを使ってオーディオが扱えないネットワークカメラでストリーミングすると、映像が映らないといった不具合がありました。調べてみるとRTSPセッション中に交換されるSDP (Session Description Protocol) の情報を取得し、パースしているところに問題がありました。

実際に、先ほど述べたネットワークカメラのSDPの情報を調べてみると、
ライブラリのRtspClient.javaにあるgetTracksFromDescribeParams関数内で下記のような配列を得ることができました。

[Pair{v 0}, 
Pair{o - 294741794 1 IN IP4 192.168.0.0}, 
Pair{s IGCSMS}, Pair{i }, Pair{t 0 0}, 
Pair{a tool:IGCSMS}, 
Pair{m video 0 RTP/AVP 96}, 
Pair{c IN IP4 192.168.0.0}, 
Pair{b AS:2},
Pair{a rtpmap:96 H264/90000}, 
Pair{a fmtp:96 packetization-mode=1;profile-level-id=64001E;sprop-parameter-sets=Z2QAHqwsaoKAv+WbgICAgQ==,aO4xshs=}, 
Pair{a control:track=1}, 
Pair{m audio 0 RTP/AVP (null)}, 
Pair{c IN IP4 0.0.0.0}, 
Pair{b AS:64}, 
Pair{a rtpmap}, 
Pair{a control:track=2}]

そして、こちらの情報がパースされます。
オリジナルの処理では、下記の(null)をint型の整数にパースにしようとしたところで例外が発生していました。

Pair{m audio 0 RTP/AVP (null)}

そこで例外処理を加えた修正を行うことで、ストリーミング時、映像が映らない不具合を解決しました。

// library-client-rtsp/src/main/java/com/alexvas/rtsp/RtspClient.java
try{
    currentTrack.payloadType = (values.length > 3 ? Integer.parseInt(values[3]) : -1);
}catch (Exception e){
    currentTrack.payloadType = -1;
}

コミット手順

後学のためにまとめておきます。

  1. まずはコミットするリポジトリをforkします

alt text

  1. forkしたリポジトリをクローン
  2. クローンしたリポジトリにオリジナルのリポジトリをUpstreamに登録。
// 今回の場合
git remote add upstream https://github.com/alexeyvasilyev/rtsp-client-android

そして、下記のコマンドで登録した内容を確認して、

git config -l

追加されていれば完了です。

remote.upstream.url=https://github.com/alexeyvasilyev/rtsp-client-android
remote.upstream.fetch=+refs/heads/*:refs/remotes/upstream/*
  1. ブランチを切って修正を行いpush
  2. オリジナルのリポジトリに対してプルリクエストを出します

おわりに

コミットが許可されるかドキドキでしたが、通って良かった!

alt text

Discussion