C#コードに30FPSのビデオのフレームがあり、他のすべてのアプリケーションが使用できるようにローカルホストでブロードキャストしたいと思います。ただし、これはビデオであり、パケットが失われたり、クライアントから接続/受け入れたりする必要がないため、UDPを選択することをお勧めします。
しかし、ここには多くの問題があります。
- UDPユニキャストを使用する場合は約25FPSの速度で十分です(CPU使用率は25%で、4コアCPUの1つのスレッドで100%を意味しますが、これは理想的ではありません。ただし、少なくとも十分なデータセットを送信します)。ただし、ユニキャストはすべてのクライアントにデータを配信できません。
- 私が放送を使用する場合、速度は非常に遅いです。同じCPU使用率で約10FPS。
私に何ができる?!データは同じコンピュータにあるので、LANなどからリモートアクセスする必要はありません。同じマシンの異なるアプリケーション間で毎秒約30Mバイトのデータを転送する方法が必要です。(640x480は画像の固定サイズx 30fps xピクセルあたり3バイトは約27000Kバイト/秒です)
- UDPマルチキャストの方がパフォーマンスが優れていますか?!
- 各クライアントを受け入れて個別に送信した場合でも、TCPを使用するとパフォーマンスが向上しますか?!
- ソケットより良い方法はありますか?!メモリーシェアリングか何か?!
- なぜUDPブロードキャストはそれほど遅いのですか?!毎秒約10Mバイト?!
- 高性能でフレームを圧縮する(1秒間に30 fpsをエンコードし、他の部分でデコードする)高速な方法はありますか?クライアントアプリはC++であるため、これはクロスプラットフォームの方法である必要があります。
ここで他の開発者の経験やアイデアを知りたいので、あなたの考えを書いてください。
編集:
データに関する詳細情報:データはビットマップRGB24形式であり、デバイスから30FPSを使用してアプリケーションにストリーミングされます。このデータを他のアプリケーションにブロードキャストしたいのですが、他のアプリケーションはこの画像をRGB24形式にする必要があります。ヘッダーなどはなく、固定サイズのビットマップデータのみです。すべての操作はその場で実行する必要があります。非可逆圧縮アルゴリズムなどを使用する必要はありません。