警告の言葉
これは、私があなたにこの努力を説得するのを思いとどまらせようとしているように聞こえるかもしれません. それどころか、SIP は (最終的には) 扱うのが楽しいプロトコルであり、すべてが一緒になっているのを見るのは非常にやりがいがあります。このような野獣を働かせたことで、あなたは大きな満足を享受するでしょう。ただし、準備が必要です。SIP を使用するのはイライラする獣です。
次のタイムラインは私自身の経験に基づいていますが、2 人いるためタイムラインを多少短くしています。私たちの開発サイクルは 1 年近く続きましたが、私はプロジェクトのリーダーであり、唯一のプログラマーでした。その時間には、UI、要件の調整、計画、ドキュメントなどで行われたすべての作業が含まれていました。
1週目と2週目
SIP は複雑な仕様であり、特にファイアウォール、転送、分岐、結合に関連する多くの拡張機能と特殊性があります。RFC の検索を開始することをお勧めします。シグナリング仕様と、アプリケーションに必要な拡張機能 (少なくとも基本仕様、SDP 仕様、ICE プロトコルを含む) を読むのに十分な時間を費やすことをお勧めします。仕様。
フルタイムで正しく行っている場合は、約 1 週間かかるはずです。第 2 週は、必要な拡張仕様 (プレゼンス表示、前提条件、会議、GRUU など) を検討し、時間をかけてそれらも読んでください。それらを相互にドリルダウンします。それは多くの情報であり、それらが相互にどのように関連しているかという点で比較的複雑です。
プロトコル アナライザー (Wireshark など) を分解し、ネットワーク上でアプリが何をしているかを確認します。仕様を読めば、さまざまな SIP 製品が互いにうまく連携するのが難しい理由と、独自のアプリでの作業を開始する方法のアイデアを理解できるようになります。
3~6週目
適切なツールキットを使用したとしても、1 か月の大半を費やして、SIP に必要な処理を確実に行わせ、SIP 信号に応答するために必要なインフラストラクチャを作成します。非常に多くのエッジ ケースがあり、並行処理で想像できるすべての落とし穴は、3 つの独立したエージェントがあり、そのうちのいくつかは非常に長い待機時間と信頼性の低いネットワーク接続を持ち、すべてが調整しようとしているという事実によって拡大されます。同取引について。
近道をしないで、コードを書いて、テストして、さらにコードを書いて、障害や特殊なケースを探して、続けてください。RFC は、遭遇する問題を理解する上で非常に役立ちますが、そのうちのいくつかは、ただ通り抜ける必要があります。
第7週と第8週
アプリケーションの要件によっては、エンドユーザー エージェント間の基礎となる接続を確立するだけで、信頼性の高い製品を作成するための労力のほとんどを占めることになります。2 人で、この部分を初めて機能させるために今後数週間を費やし、アプリの残りの開発サイクル全体で数え切れないほどの時間をエッジ条件の診断に費やすことになるでしょう。ここには、メディア プロキシが必要なエッジ ケースと、ユーザーがひどくファイアウォールで保護されていて何もできないという勝ち目のないエッジ ケースがあることに注意してください。それらを処理することを忘れないでください。
9~11週目
この時点で、経験とネットワークの知識に応じて、かなり厳格なファイアウォールを介して、電話が(かなり)確実に相互に接続するはずです. 前提条件の仕様は、ネットワーク層が既に接続されるまで呼び出し音を保留できるため、ここで知覚される遅延を減らすのに非常に役立ちます。Java の場合、メディアのエンコードとデコードは銀の大皿で私に渡されましたが、quicktime は別として、自分でやらなければなりませんでした。プロトコルがうまく機能し、SDP を介してプロトコル情報を確実に通信できるようになるまで、1 週間か 2 週間かかりますが、これは非常に楽観的な見積もりかもしれません。
これまでに RTP/RTCP を使用したことがない場合は、さらに 1 週間追加してください。言うまでもなく複雑ではありませんが、RTCP から得たフィードバックに適切に対応することは困難な場合があり、非常に重要ではありますが、やや暗い芸術のようなものです。最適なネットワーク利用とメディア品質を保証します。
12週目以降
おそらく、この時点で、接続できるようにしたい SIP 製品のいずれかが実装を好まないことに気付くでしょう。その理由は、まったく説明のつかない場合もあります。面倒な製品をサポートする必要がある場合は、その理由を診断するために今後数週間から 1 か月を費やすことになります。あなたの製品がプロプライエタリである場合、おそらくこのステップは気にしませんが、これは仕様をどれだけめちゃくちゃにしているかを二重にチェックする方法でもあります。(私たち全員がそうしているので、使用しているテスト製品が正しいと仮定しないでください! 常に再確認してください!)
追加
上記は主に、適切に記述された SIP/SDP/ICE ベースのソリューションが機能するまでにかかる時間を推定することを目的としており、そのようなインフラストラクチャを使用するアプリではありません。UX は iOS の世界の王様です。そのため、アプリが魅力的であることを確認し、それを正しくするために多くの時間を費やしてください。
コーディングを簡単にするためにライブラリを使用する場合でも、基礎となるプロトコルを学びましょう。物事がそのように機能する理由と、SIP ユニバースが非常に多くの壊れた製品でいっぱいである理由を理解することは、非常に有益です。