Brynhildr

KeroRemote

リモートデスクトップエンジニアのブログ。

超圧縮。
えー、ちょっと前にも書きましたけど、TrueRemoteにはついている「超高速」が、Brynhildrにはついていない事についての補足とゆーか御説明出来る内容が増えたよゆーかそーゆー時期とゆーかそんな感じです。

Brynhildrの映像圧縮エンジンは、TrueRemoteのGaeBolgVideoCodecをベースにしたものなのですが、これが2年くらい前からあんまり進化しておりません。その間は別に何もしてなかったという事では無いのですが、まず音声伝送の部分を作っていたという事があります。仕事の合間合間なので集中して開発できていなかったという事もありまして結構ズルズルな感じで伸びていましたがようやく完成してました、数か月前に。それでBrynhildrが公開できたワケです。

で、肝心の映像圧縮エンジンについてですが、Brynhildrには暗号化通信の処理があるので、その分映像圧縮展開処理が遅くなってしまっているというのは前に御説明したかと思います。映像圧縮エンジンの高速化は予定はしておりますが、もう少し先のお話で御座います。一応、高速化の内容までは決まっておりまして、これまでまったく使っていなかったMMXやSSEなどのCPU拡張命令を使う事や、C言語で書かれている圧縮展開エンジンのアセンブラ化、通信部分の最適化などなどです、まだ未定内容ですけど。だいたい倍くらいにはなってくれるのでは無いかと希望的観測です、全然わかりませんけど。

が、しかしどれだけ速度が速くなっても残り課題があります。

「圧縮率」です。

ここがGaeBolgVideoCodecの最大の欠点である事は随分と前から気づいてはいたのですが。上に書いてあるような処理性能が向上していくら処理速度が倍になっても、通信量も倍では全然面白くありません。ましてや映画とかアニメとかゲームだととんでもない通信量になってしまいます。全然エコじゃありません。

そこで2年くらい前から開発してきたものが、「超高速」ではなく

「超圧縮」です。

超ってついてますけど別に世紀の大発見的な感じでも何でも無く、いたって普通の映像圧縮だったりするんですが。とは言いつつもこれまでのGaeBolgVideoCodecと比較すると、映像データのサイズが約1/10~1/100になるので超圧縮なんですけど。そんな映像超圧縮エンジンの開発をここ2年間ほど、夜中を中心にゲームをしながらとか映画を見ながらとかモタモタと開発してきたわけで御座います。ちなみに開発コードは「叢雲」で御座います。

映像圧縮とありますが、GaeBolgVideoCodecは仕組み的には、「画像圧縮+差分処理」に過ぎず、本格的な映像圧縮となると、特許の絡みでまず個人事業主レベルが手を出す分野では無いよーな感じです。てかそもそも技術的にもレベルが高く、自分では全く手が出せないところではあるんですけど。数学は【計り知れない強さ】です。

そこで、世に出てる映像圧縮アルゴリズムを利用しよーと思ったワケで御座います。いやこれが結構、選定とか調査とかライセンスとかコンパイルとかコンパイルとか大変で御座いました。画質とか処理速度とかも重要なので、色んな要素をひっくるめてムムム・・・となっていわワケで御座います。

まー例えばあれですかねー、「H.264」とかー王道中の王道なんですけど、開発で使うとなるとx264とかなんでしょうけど、GPLライセンスなんで静的リンクだとソースコード公開が義務化とかで大変ですし、MPEG-LA社保有の特許の絡みがあるのでそこはx264LLCと契約とかなっても費用もかかるワケで大変ですけど、そもそもx264LLCとの契約書の英語が読めませんし。正直、詰んでます。使いたいですけど使えません。

さて・・・どうしよう?やっぱ自作?

ちょっと長くなってきたので、続きは後日!


11件のコメント ... ( 管理人承認制 )



こんにちは、以前TrueRemoteの件ではお世話になりました。
その後Brynhildrを使っていろいろやって、タイムラグが1秒近くあることを確認しました。もう少し早くならないかと、情報を求めwebsiteを訪ねたところ、このエントリを拝見しました。
つまるところ、BrynhildrよりTrueRemoteの方が早いということでしょうか?そうなると、やはりTrueRemoteを使いたいという気になってきます。
今は複数のPCがつながっているLANで使用していますが、ホストとゲストだけからなるLANにするとBrynhildrの速度も上がるというようなことはありますか?
よろしくお願いします。


ash  2012/05/15


> TrueRemoteとBrynhildr


そうですね、若干ではありますがTrueRemoteの方が速いと思います。これは、映像圧縮エンジン自体はほぼ同等なのですが、暗号処理や音声伝送が無いため通信部分が軽量であるためと考えて頂けるとわかりやすいと思います。ただ、速いと言いましても環境によって異なりますが、当方の環境ですと約1~5%ほどの違いです。


あとタイムラグが1秒とありますが、これはかなり遅いように思えます。そもそも、TrueRemoteやBrynhildrにはキャッシュ機能が存在しません。つまり、ハードやOS、他の通信ソフト等でキャッシュされている為に1秒程のタイムラグが発生している可能性があると思います。


可能性があるとすれば、ウイルス対策のソフトウェアでパケットをスキャンされているとか、プロキシ系のソフトウェアにより御通信のキャッシュが行われているかなどでしょうか。ウイルスに感染している可能性も否定できませんので、一度ネットワーク周り状態を確認した方が良いかもしれません。(OS標準ですとリソースモニターで通信を行っているプロセスを確認が可能かと思います)


あとハブで直接接続されたとありますが、ハブの種類や実際の通信速度なども計測した方が良いかと思います。


また結果の御報告を頂ければと思います。


IchiGeki  2012/05/15


実は接続チェックのときのみ同じハブにさしてやっていましたが、その後は離れたところで使用していました。
再度同じハブでつなぎご指摘にしたがってデータを取ってみました。
cliantからの命令はserver上ですぐに反映されているみたいです。たとえば、ウィンドウを閉じる操作を行うと、server画面ではすぐにウィンドウが閉じます。
何もしない状態では、大体15Fps以上で1Mbps以下の通信速度のようです。


Brynhildrを使用する目的は、serverPCにUSB接続されたCMOSカメラの映像を、cliantでリモートで見たいと思っておりまして、その画像取り込みソフトを動かすと2-8Fps、通信速度が7Mbpsぐらいになるようです。こうなると、画面の更新に1秒程度かかってしまいます。


これは、serverPCのスペックが低いことが原因なのでしょうか?ちなみに、第一世代corei5でメモリは2GBなのですが…


いずれUSB3.0のカメラを2台使用する予定ですが、serverのノートPCにはUSB3.0ポートが1個しかありません。USB3.0ハブを導入しようと思っていましたが、もしPCスペックが悪いということであれば、USB3.0ポートを2つ以上備えたPCを導入することもできるかもしれませんので、アドバイスいただけるとありがたいです。ちなみにserverはWin7Pro32bitです。


ash  2012/05/19


> 画面の更新に1秒程度かかってしまいます


なるほど。恐らく、serverPCの解像度によってなのですが、カメラとなると映像となりますので、通信データ量が膨らんで遅延が発生している可能性があります。


ちなみにserverPCの解像度はいくつになっていますでしょうか?あと、試しにserverPCの解像度を落として試してみて頂けますでしょうか?


IchiGeki  2012/05/19


serverPCの解像度は1900*600です。解像度を落としてもフレームレートにあまり変化はありませんでした。
ハブについても見てみました。これまで使っていたものは100Mbpsのものでしたので、1Gbpsのものにつないで見ました。しかし、serverPCのNICが100Mbpsでしたので、1Gpbsでの接続にはなりませんでした(cliantは1Gbpsでつながりました)。
ひとつ思ったのですが、Brynhildrでは1Mbps以下の通信でコネクトされているようです。これは何かで制限されている値なのでしょうか?現在のところ、最大100Mbpsの環境ですので、もっと高速につながっても良さそうなのかなと感じました。


ash  2012/05/21


> Brynhildrでは1Mbps以下の通信でコネクト


これはタスクバーの値(~Kbps)でしょうか?もしそうでしたら、通信速度ではなく通信量となります。環境にもよりますが、理論値で100Mbpsですと少なくとも30Mbpsくらいまでは出るように思えます。


ですが、解像度も高いようですし、やはりserverPC側での映像の圧縮処理に時間がかかっているように思えます。また、処理に時間がかかるだけではなく、データ量も大きくなってしまう為に全体的に速度が低下してしまっている可能性もあります。


解像度が高い環境での御利用となるとなかなか難しいように思えますので、一度解像度を下げるといった事を御検討頂ければと思います。


IchiGeki  2012/05/22


1Mbps以下というのはカメラ画像を転送しない場合の数値です。このときは15Fpsです。


15日にも記しましたとおり、10Mbps以下(7000Kbps)でした。この値はタスクバー(タイトルバー?)の数値ですし、タスクマネージャやリソースモニターに表示される数値を記しました。serverPCのCPU稼働率は50-70%でした。


解像度は800*600まで下げて試しましたが、1600*900のときに比べ変化はありませんでした(2-8Fps程度)。


“windows7 転送速度 遅い”で検索をすると、いろいろ情報が出てきましたので、これを試してみたいと思います。また結果をご報告します。


ash  2012/05/22


どこの記事にコメントを書こうか迷いましたが、継続事項もあるのでこちらにしました。
転送速度は結局改善しませんでした。ネットワークまわりが律速しているのではなく、画像圧縮待ちなのかもしれません。まだcpu稼働率には余裕があるようですし。


ところで、Ortlindeのリリースお疲れ様です。そしてありがとうございます。まだ ver. 0.9.0.0 しか試していませんが、フレームレートはかなり上がりました。しかし、これだけでは1秒程度の遅延がまだありました。最近のコメントを拝見して、windows aeroを切ってみたところ、0.3秒程度の遅延になりました。


実はserverPCにとりつけるカメラの問題で実際の使用環境ではテストできていませんが、Ortlindeのおかげで実用に足るレベルで運用できそうな印象を持っています。
これからも開発がんばってください。楽しみにしています。


ash  2012/05/29


> Ortlinde


ちょっとだけ改善されたようで良かったです。CPU稼働率に余力があるようでしたら、FPSを上げる技術はまだいくつかストックありますので、今後ひょっとするとすごいワイルドなやつが登場するかもしれませんwただCPUに余力のある方ばかりでもありませんのでなかなかどこを標準にするかといったところの見極めが難しいところではありますが。どうしても!という時はまた御相談下さいませ。


IchiGeki  2012/05/29


なるほど。Ortlindeで画質を選択できたように、FPSを調整するパラメータみたいな物があればよいのかもしれませんね。
FPSが大きくなるのはもちろん嬉しいのですが、高画質を遅延なく送ることができるようになるのも嬉しいです。


ash  2012/05/30


> Ortlinde


そうですね、高解像度で高画質で高FPSを実現出来るよう目下開発中で御座います。


IchiGeki  2012/05/30




... 不具合報告の際は、アプリのバージョンやOS等の動作環境の記載を御願い致します。

表記されている会社名・製品名・システム名などは、各社の商標、または登録商標です。
当サイトはAmazon.co.jpアソシエイトプログラムに参加しています。
© 2010-2023 KANEKO