![]() | 組込み開発のための実践的プログラミング【電子書籍】[ 鷹合 大輔 ] 価格:2,970円 |
ながれです。
今回は下回りの話になります。
私は組み込み開発で、USBカメラ周りの開発に携わりました。
USBカメラの映像を表示するソフトウェアを開発したのですが、どう頑張っても全然パフォーマンスが出ない時がありました。
その中で色々と調べながら学んだことについて、お話します。
下回りの話になりますが、アプリにも関わる話でもありますので是非最後までご覧ください!
はじめに
USBカメラの映像を表示するアプリを開発する際、以下の3つが重要になってきます。
・解像度
・フレームレート
・圧縮方法
ご存知とは思いますが、補足します。
解像度:「640×480」や「1920×1080」など、横と縦のピクセルを表す数値です。この数値が大きいほど、画質が綺麗になります。ちなみによく聞く画質でフルHDは1920×1080、4Kは3840×2160です。
フレームレート:映像のコマ数を表します。映像は、何枚もの画像をパラパラ漫画のように見せることで、動いているように見せています。フレームレートとは、その画像が一秒間に何枚見えるのか?を表す値です。例えば、フレームレートが30の場合、画像が一秒間に30枚見えるため、フレームレート30未満よりもヌルヌルな映像になります。
圧縮方法:映像の圧縮方法を表します。先程説明した通り、映像は複数枚の画像で構成されています。その画像を圧縮することでUSBカメラ→ソフトウェアへの画像の転送速度が上がります。ただし処理コストが上がります。理由については、また今度説明します。

USB2.0とUSB3.0
さて、本題です。
私の経験した開発では、USBカメラの映像をPCやスマホなどの端末に表示するソフトウェアを作成していました。
先ほどの、全然パフォーマンスは出なかったというのは
想定していたフレームレートが出なかった、ということです。
例えば、USBカメラ側でフレームレート30と設定しても、ソフトウェア側ではフレームレート10程度しか出ていない、というような現象です。
結果として、原因はソフトウェア側ではなくUSBの規格の問題でした。
USBカメラ→端末内ソフトウェアへの映像の転送速度は、解像度・フレームレート・圧縮率によって変わります。
高解像度・高フレームレート・無圧縮の映像を転送するには、限度があるということですね。
で、USBはUSB2.0とUSB3.0がありますよね。
USB2.0よりもUSB3.0の方が転送速度は早いです。(当たり前ですね)
ここで、私はつまづいてしまったのです…。
わかる人だったら、そんなことで引っかかってるのか笑となるようなことです。
それでは、具体的にUSB2.0・USB3.0とUSBカメラの転送可速度を見ていきましょう。
USB2.0とUSB3.0の転送速度

USB2.0とUSB3.0の転送速度の理論値は以下となります。
USB2.0 : 480Mbps
USB3.0 : 5Gbps
理論値を超える速度は出ません。
次にUSBカメラの転送速度を見てみましょう。
USBカメラの転送速度は以下のように計算できます。
(解像度)×(圧縮方法)×(フレームレート)×(色空間(RGBとか))=転送速度(bps)
今回、色空間はあまり気にしなくて良いです。
例えば、解像度フルHDでフレームレート30の圧縮方法はYV12の場合
1920×1080×1.5×30×8=746,496,000bps(約746Mbps)
となります。
746Mbpsということは、USB2.0の理論値を超えています。
こうなると、フレームレート30は出なくなるわけです。
これが、全然パフォーマンスが出ない原因となっていました。
おわりに
アプリ開発をする方も、カメラを使用するアプリを作る可能性があります。
クライアントの要件で、USBカメラも対応してほしいとなった際には、上記の転送速度の話を思い出してください。
クライアントによっては、USB2.0やUSB3.0の転送速度の話を知らない場合があります。
よくわからないまま、「対応可能です!」というのは後々問題になりますので、ご注意ください。
![]() | 組み込みソフトウェア開発スタートアップ ITエンジニアのための組み込み技術入門 (Design wave mook) [ Design wave magazine ] 価格:2,420円 |