👓
はじめてOSS(rtsp-client-library)にコミットしてみた
はじめに
はじめてOSSにコミットしてみました。
「Thanks for PR」とコメントがあり、マージされたときは嬉しかったですね。何をしたか簡単に書き残しておきます。
何をコミットしたか
前回紹介した軽量化RTSPのクライアントライブラリ「rtsp-client-android」にコミットしてみました。
コミット内容はこちらです。
雑な英語ですが、なんとか伝わったようです。
[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;
}
コミット手順
後学のためにまとめておきます。
- まずはコミットするリポジトリをforkします
- forkしたリポジトリをクローン
- クローンしたリポジトリにオリジナルのリポジトリを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/*
- ブランチを切って修正を行いpush
- オリジナルのリポジトリに対してプルリクエストを出します
おわりに
コミットが許可されるかドキドキでしたが、通って良かった!
Discussion