プロジェクトは、年が明けた2010年1月より本格的に立ち上がりました。同時に、後藤氏が開発メンバーに加わりました*5。彼は、動画の圧縮技術に詳しく、心強いメンバーです。まずは、筆者と後藤氏の2人で、生放送を配信するための最適な方式に関する研究・調査を開始しました。

 課題はいくつもあります。大きな課題は、キャプチャした画像をどのタイミングで圧縮し、どのタイミングでサーバーに送信するかです。iPhoneでスクリーンキャプチャを連続的に撮影することで、1フレームずつのJPEG画像が取得できることまではわかりましたが、ここから先は未決定のままです。

 ニコ生アプリは、あくまでPCで見られることを前提にした「ニコニコ生放送」という既存のサービスに対して、iPhoneからも生放送を配信できるようにしよう、というものです。ですので、ニコニコ生放送で使用している生放送配信システムに基づいたシステム設計をする必要がありました。PCの「ニコニコ生放送」は、大まかに図2の仕組みで構成されています。

図2●ニコニコ生放送の仕組み
図2●ニコニコ生放送の仕組み
[画像のクリックで拡大表示]

 わかりやすく説明するために簡略化していますが基本的には、(1)Webカメラで撮影、(2)撮影した一連のフレーム画像を、リアルタイムで動画圧縮して、動画データを作成、(3)動画データをニコ生の配信サーバーに送信、(4)配信サーバーから、視聴者のPCのニコ生プレイヤーに動画データを送信、(5)ニコ生プレイヤーで動画データを再生*6、という流れです。

 生主側のPCの役割は、「カメラ映像からフレーム画像を取得し、動画圧縮を行い、動画データ配信サーバーに転送する」という役割を担っています。ニコ生アプリで生放送を実現するには、この部分をどうやって作るかが鍵(かぎ)になりました。

 まずは、プロトタイプとしてPCで行っている処理と同様の処理をiPhone上で作成しました。開発時はこの方式のことを「クライアントサイド圧縮方式」と呼んでいました。圧縮方式の処理の流れを図3に示します。iPhoneの内蔵カメラで撮影したフレーム画像を、iPhone内部で動画圧縮して、そのままiPhoneから配信サーバーに転送する、という方式です。なお、iPhoneアプリのSDKには、動画圧縮を行うためのAPIは用意されていないので、この部分は自前で作り込む必要がありました。動画の圧縮処理は非常に複雑なので、通常は「動画エンコーダー」と呼ばれる特殊なライブラリを使用します。ここでは、取りあえずオープンソースのエンコーダーを使って、プロトタイプを開発しました。

図3●プロトタイプであるクライアントサイド圧縮方式の仕組み
図3●プロトタイプであるクライアントサイド圧縮方式の仕組み
[画像のクリックで拡大表示]