Odnoklassniki iPhoneアプリケーションでの呼び出し

金曜日に、 iPhoneアプリケーションの新しいバージョンをリリースしました 。 この投稿では、同様のサービスを開発した経験を共有したいと思います。



「通話」サービス-Odnoklassniki Webサイトでのビデオチャットは、Flashを使用して実装されます。 しかし、すべてのユーザーがコンピューター/ラップトップからOdnoklassnikiにアクセスするわけではありません。 ビデオチャットの視聴者を拡大するために、スマートフォンでもサポートすることにしました。



この記事では、iOSのアプリケーションにビデオコールを実装した経験について説明します。



アプリケーションのスキーム:







オーディオ/ビデオエンコーダーとデコーダー



C / C ++コードはiPhone用にコンパイルできるため、コーデックの選択に問題はありませんでした。ライセンスが商用アプリケーションでの使用を許可していれば、任意のオープンソースコーデックを使用できます。 サウンドとAndroid OSコードのH.263ビデオにSpeexを使用しました(フラッシュとの互換性のために少し変更する必要がありました)。



ビデオキャプチャモジュール



バージョン4.0以降、iOSには生のビデオをキャプチャするためのAPI(AVCaptureSession)があります。 ただし、このAPIには制限があります。特に、任意の解像度を設定することはできません(いくつかの固定プリセットがサポートされています)。 また、デバイスを回転させるときにビデオの向きを変更することもできません。 これらの制限を回避するために、必要以上のサイズのビデオフレームをキャプチャし、デバイスの向きに応じてビデオをカットおよび回転します。 これは非常に多くのプロセッサリソースを消費し、望ましくないズーム効果(「ズーム」)がありますが、このようなAPIの実装についてAppleに感謝するだけです。



ビデオは、ネイティブコーデック形式のYUVでキャプチャされます。 この点で、画面に「自分の」写真を表示するための「レンダリング」フレームの問題が発生します。 私たちもそれを決定しましたが、その詳細については、後ほど「ビデオを画面に表示する」セクションで説明しました。



言及する価値のあるもう1つの機能は、カメラ選択アルゴリズムです。デバイスにフロントカメラがある場合、アプリケーションはそれを選択します。 前面カメラがない場合、ビデオは背面カバーのカメラからキャプチャされます。 カメラがまったくない場合(iPadなど)、「ビデオを有効にする」ボタンは表示されません。



画面にビデオを表示する



ビデオデコーダー、およびカメラからのビデオキャプチャモジュールは、YUV形式でフレームを出力します。 デバイスの画面にフレームを表示するには、フレームをRGB形式に変換し、目的のサイズにする必要があります。 現在、メインプロセッサは他のタスクでビジーであるため、OpenGL ES 2.0を使用してこれらの操作をGPUに転送しました。 YUV形式のフレームはOpenGLテクスチャにロードされ、その後フラグメントシェーダーは各ポイントの色成分を再カウントします。 OpenGL ES 2.0をサポートしない古いデバイス(3GS未満)をサポートするために、アプリケーションにはシェーダーを使用せずにすべての計算を実行するコードブランチがあります。 そのようなデバイスでは、ビデオフレームレートを下げることで処理能力の不足を補う必要があります。



サウンドをキャプチャして再生する



マイクからサウンドをキャプチャしてスピーカーで再生するには、AudioSession APIを使用します。これはiOSアプリケーションからアクセスできる最低レベルのAPIです。 サーバーから送られてくる音はデコードされ、バッファに落ちます。これにより、ネットワークの「ジッター」が滑らかになります。 バッファの深さは、接続の品質によって異なります-ネットワークが悪いほど、バッファは深くなります。 ユーザーにとって、これは、悪いネットワークでは音声遅延が増加するという事実に現れています。



iPhoneには、サウンドを再生するためのルートがいくつかあります。電話のスピーカー、スピーカーフォン(デバイスの下部にあるスピーカー)、または接続されたヘッドセットから再生できます。 ヘッドセットが接続されていない場合、スピーカーフォンルートがデフォルトで選択されます。 近接センサーがトリガーされると、電話のスピーカーが接続されます。



マルチタスク



バージョン4以降、 iOSはマルチタスクのサポートを追加しました。 アプリケーションがバックグラウンドで実行されている場合でも、ビデオチャットコールを継続できます。 バックグラウンドモードに切り替えるときにリソースをできるだけ解放するために、アプリケーションはビデオの送受信を停止し、アプリケーションが再びアクティブになるまでグラフィカルインターフェイスを更新しません。 同時に、音がキャプチャされて再生され、「odnoklassniki」と刻印された赤い「バー」が上の画面に表示されます。これは、アプリケーションがマイクを「聴いている」ことを示します。 このパネルをクリックすると、アプリケーションはアクティブ状態に戻ります。



近接センサーを使用する



近接センサーは、電話の前面の上部に取り付けられたセンサーで、デバイスとオブジェクトの近接を判断します。 アイデアは、ユーザーがいつ電話を耳に当てるかを判断することです。 ビデオコール中、アプリケーションはこのセンサーのステータスを監視します。 センサーの場合、アプリケーションは画面を消し、ビデオの受信と送信をオフにし、音声を電話のスピーカーに切り替えます。 これは、電話で「昔ながらの方法で話したい」というユーザーにとって便利です。



通話品質への適応



アプリケーションのビデオ通話は、WIFIと3G / EDGEネットワークの両方で使用できます。 通話中、ネットワーク接続のステータスは常に監視され、通信の品質が低下した場合、フレームレートとビデオ品質が低下します。



改善したいこと





サービスの改善に関するご意見やご提案をお待ちしております。

Callsサービスの開発チーム。



All Articles