iOSアプリでWebRTCを使用した私の経験

WebRTC(Eng。Real-time communication)は、ポイントツーポイントテクノロジーを使用して、ブラウザーまたはそれをサポートする他のアプリケーション間でストリーミングデータの転送を整理するように設計されたオープンソースプロジェクトです。



この記事を完全に理解するために、 ここで技術の基本原則を理解することをお勧めします。



画像



WebRTCを使用する必要性に至った経緯



プロジェクトの目的:



リアルタイムビデオストリーミングを相互に送信するために、2人のランダムユーザーを接続する必要があると想像してください。

問題の可能な解決策は何ですか?



オプション1:



ビデオストリームのソースとレシーバーに関するサーバーへの2人のユーザーの接続を整理し、対話者からビデオを受信するのを待ちます。



短所:





長所:





オプション2:



ユーザーに直接接続し、ユーザー間のデータ転送用のトンネルを形成し、サーバーからこのユーザーに関する情報を故意に受信します。



短所:





長所:





また、タスクは、サーバーに深刻な負荷をかけることなく、可能な限り予算内でこれを行うことでした。

オプション番号2を使用することが決定されました。



インターネットで熱心に検索し、 9000を超える時間を費やした後、WebRTCテクノロジーに出会い、問題を解決するためのアプローチを分析する過程で特定した欠点を解決することを提案しました。



実装



検索の第2段階が開始されました。 その上で、問題を解決するためのさまざまな有料ライブラリに出会い、WebRTCに関する多くの資料を見つけましたが、iOSの実装は見つかりませんでした。



その後、偶然、Googleからブラウザーのgitコアにアクセスして、「WebRTC」というフォルダーがあり、その中にいくつかのファイルと2つのフォルダー「Android」と「iOS」があることに気付きました。 他のフォルダーよりも楽しいフォルダーに入った後、大量のライブラリーソースファイルと「AppRTC」というプロジェクトのある「Example」フォルダーを見つけました。



画像



私はすぐに自分のデバイスと手元にある2番目のiOSデバイスでこのプロジェクトを立ち上げ、それらを接続して2台の電話で自分とチャットすることに成功しました。



すでにいくつかの機能(登録、承認)を備えたビデオチャットをアプリケーションに統合する最速の方法は、アプリケーションに「AppRTC」の例を適用することでした。



この時点で、プロジェクト中に、アプリケーションのサーバー部分を実装する必要がある段階になりました。 「AppRTC」用のサーバーの例を見つけることにし、サーバー側の開発者と一緒にサーバーをデバッグし、サーバーをクライアントと「友達にする」ために多くの時間を費やしました。



最終的に、「サービス」のすべてが2つの部分に分割されました。





開発は進みましたが、デバッグが開始された後、ライブラリが完全に不安定であり、絶えず接続が切断され、ビデオの品質が低下し、デバイスのプロセッサが120%、低フレームレートなどであることに気付きました。 最適化に多くの時間を費やしましたが、実際の結果には至りませんでした。作業速度にわずかな変化がありましたが、まだケーキではありませんでした。 また、VP8コーデックには多くのリソースが必要でしたが、その時点ではサービスには他のリソースがありませんでした。



ライブラリを完全に更新することを考えました。 更新前に記述されたコードの80%を変更した後、それはまだ機能せず、例は現在のバージョンに更新されませんでした。 サーバー部分は、新しいバージョンのライブラリを使用することも拒否しました。



解決策は、WebRTCにサーバーを使用しないことでした。 つまり、アプリケーション自体のサーバーは、接続されているユーザーのみを分析し、接続することを提案しました。その後、アプリケーションは「AppRTC」自体のサーバーとの連携を開始し、パケット送信とのすべての相互作用、STUNおよびTURNサーバーがそこで行われました。 また、アプリケーションのすべてを現在のバージョンに自分で書き直す必要がありました。 この間、ユーザー間で転送されるデータの暗号化が追加され、H264コーデックが統合されたことにより、デバイスの負荷が大幅に削減され、1秒あたりのフレーム数が増加しました。



ビデオチャットコードの完全なリファクタリングが実行され、アプリケーションはさらに高速に動作し、より使いやすくなりました。 コードの最適化の結果、ライブラリは別の「ポッド」に移動しました。



おわりに



問題は解決され、ダウンロードして起動した2人のランダムなユーザーを相互に接続するアプリケーションができました。 ビデオチャットは材料費をほとんど必要とせず、新しいテクノロジで実装され、ビデオの品質はユーザーのインターネットチャネルの帯域幅に直接依存します。



AppRTCライブラリ自体の動作を最適化するためのいくつかのソリューションが開発および提示され、開発者に送られました。



All Articles