いちおう画像データのことも載せておこう
Brynhildrではデスクトップの画像をjpegデータとして転送します(少なくとも公開されているサンプルソースでは…)。一般的にはデスクトップの情報は通信量を少なくするためにそれぞれのGUI部品に分解して、その描画用情報を送るというのが常套手段でした。
が、Brynhildrでは、最終的に出来上がっているデスクトップの画面そのものを一枚の画像として転送する方法を取りました。昔のようにGUI部品それぞれが単純な部品で構成される場合かなり軽いのですが、最近では殆どビットマップ情報を転送するような形になるので、普通に転送すると結局重たいままになるようです。
それだったら、最終的な画面情報だけをデータ圧縮して送ったほうが結局軽くなるんでない?というのがアイデアだと思われます。クライアントソフトは、送られてきた圧縮済み画像データを紙芝居の如く到着するたびに表示するだけに専念できるということですね。ま、音も再生しないといけませんが(^_^;
下のサンプルだとおよそ98KBです。Brynhildrサーバはこのような画像を全力で送りつけてきます(^_^;
この情報は通常のJPEGファイルなので、ファイルに書きだすようにすれば、通常の画像ファイルとしてダブルクリックで閲覧することが出来ます。枚数が恐ろしく多いので、今はどんどん上書きするようにしてますが。
通常のJPEGファイルなのでヘッダーも存在します。バイナリで見ると以下の様な感じです。
実はヘッダーの詳しい内容は知りません…Qt5さんが勝手に解釈してくれるので(^_^;
これが一秒間に30枚表示できれば、30 FPSになるわけですね。Qt Brynhildr (仮称)では、ネットワーク経由で
データが到着する度に、1枚分画像が送られてきたかをチェックして、1枚分受け取ったと思ったら、どりゃーと表示をQt5にお願いするということをしています。描画処理自体は、Qt5さんにおまかせです。Qt5さんはメモリ経由で渡されたJPEGヘッダを解析して勝手に描画してくれます。
画像描画、音再生などをどのタイミングで再生するかはあまり考えてなくて、到着次第すぐに再生という指示だけ行うのですが、まぁいろいろタイミングを考えるよりは楽チンでいいかなと思います、マルチスレッド面倒だし。
ま、紙芝居表示するのに実ソースコード1300行(コメント含む)というのはやはりQt5さんのお陰なのです。JPEGも詳細を知らなくても表示できてるし(^_^;
#PNGとかに変更できるとメリットあるのかな…でもサーバを実装しないといけないな…まずはクライアントを完成させなくては。
明日は早いので、もう寝ます。
#読者はおよそ一名様状態なので…ぼちぼちでいいかなぁ。
#何かありましたらご指摘ください…変なこと書いていたら(^_^;
« 音を出すにはどうするの? | トップページ | 音がでないなぁ »
コメント