デスクトップ画面のビデオをソケット (WebSocket、クライアントがブラウザーを使用しているため) 経由で他のユーザーに送信する必要がある Java アプリ (デスクトップ - Windows & Mac) が必要です。
今のところ、私はなんとかできました:
- を使用してスクリーンショットを取得し
Robot.getImageWritersByFormatName
ます(それほど高速ではありませんが、私が知る限り、他のクロスプラットフォームソリューションはありません) - ソケット通信のセットアップに成功しました
java socket client -> screenshare/socket server -> client(browser)
- JPEG 圧縮画像を送信してからブラウザでレンダリングしようとしましたが、ローカル ネットワークでは許容できましたが、WAN については非常に低速です (3/4fps で、ストリームは既に 350kbps を超えています)。
- ビデオ圧縮(JPEGのような静止画像ではない)、キーフレーム、iframeなどが必要であることがわかりました.ビデオのエンコード/デコードの経験はあまりありません
- JCodecライブラリが見つかりました(Java用の純粋なコーデックを備えた非常に優れたライブラリ、素晴らしい仕事ですが、ドキュメントはありません)
- サンプル コードのおかげで、BufferedImage 画像のシーケンスを h264/mp4 にエンコードすることができましたが、ファイルに保存することしかできませんでした
FileChannelWrapper (両方とも SeekableByteChannel を実装)の代わりにByteBufferSeekableByteChannelを使用し、ByteBufferを使用してデータをメモリに格納できる場合、ループ内で呼び出してバイト配列をソケット経由で送信できますが、ゼロでいっぱいの配列を取得できます。channel.read(someOtherByteBuffer)
誰かがこれを機能させる方法を知っていますか? 他のアドバイスや、このアプリを作成する方法についての他のアイデアは大歓迎です。