ホームページ Java &#&チュートリアル Java と WebSocket の組み合わせ: リアルタイムのビデオ ストリーミングを実現する方法

Java と WebSocket の組み合わせ: リアルタイムのビデオ ストリーミングを実現する方法

Dec 17, 2023 pm 05:50 PM
java websocket リアルタイム

Java と WebSocket の組み合わせ: リアルタイムのビデオ ストリーミングを実現する方法

インターネット技術の継続的な発展に伴い、リアルタイムビデオストリーミングはインターネット分野における重要なアプリケーションとなっています。リアルタイムのビデオ ストリーミングを実現するための主要なテクノロジには、WebSocket と Java が含まれます。この記事では、WebSocket と Java を使用してリアルタイム ビデオ ストリーミングを実装する方法を紹介し、関連するコード例を示します。

1. WebSocket とは

WebSocket は、単一の TCP 接続で全二重通信を行うためのプロトコルであり、Web 開発で使用されることが増えています。 WebSocket プロトコルの重要な機能は、クライアントとサーバー間の永続的な接続を維持し、リアルタイムの双方向データ ストリーミングを可能にすることです。

WebSocket over HTTP の利点は次のとおりです。

  1. サーバー側の負担が軽減されます。接続を頻繁に確立したり切断したりする必要がないため、サーバーをより効率的に使用できます。リソース;
  2. 情報送信の高速化: WebSocket プロトコルでは接続を確立するために最初のハンドシェイクのみが必要であるため、HTTP リクエストを再送信する必要がないため、その後のクライアントからサーバーへのデータ送信が高速になります。
  3. ## セキュリティの向上: WebSocket は SSL/TLS 暗号化を使用して通信のセキュリティを確保できます。
2. Java と WebSocket の組み合わせ

Java はインターネット開発で広く使用されている言語であり、WebSocket テクノロジをサポートしています。 Java では、Javax.websocket パッケージを使用して WebSocket 通信を実装できます。ここでは、以下に示すように、Tomcat WebSocket の関連する jar パッケージを追加し、このクラスが WebSocket のサーバーであることを示す注釈 @ServerEndpoint を追加する必要があります。

@ServerEndpoint("/video")
public class VideoSocket {

    Session session;

    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
    }

    @OnClose
    public void onClose() {}

    @OnError
    public void onError(Throwable error) {}

    @OnMessage
    public void onMessage(String message, Session session) {}
}

上記のコードでは、@ServerEndpoint は次のように指定します。サービス 末端への入り口、つまりWebSocketのURI、ここでは「/video」を例に挙げます。 @OnOpen、@OnClose、@OnError、@OnMessage などのアノテーションは、それぞれ WebSocket クライアントとサーバー間の成功した接続、接続の終了、例外、および情報処理メソッドに対応します。

3. リアルタイムのビデオ ストリーム再生を実現する方法

    フロントエンド テクノロジの実装
フロントエンドでは、 HTML5のvideoタグを利用して動画を再生し、WebSocketによるサーバーとの通信を実現することで、リアルタイムの動画ストリーム再生を実現します。具体的なコード例は次のとおりです。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket视频流播放</title>
    <style>
        video {
            width: 640px;
            height: 480px;
        }
    </style>
</head>
<body>
    <video id="video" src="" controls></video>
    <script>
        var ws = new WebSocket("ws://localhost:8080/video");

        ws.onopen = function() {
            console.log("WebSocket已连接");
        }

        ws.onmessage = function(event) {
            var data = event.data;
            var blob = new Blob([data], {type: "video/mp4"});
            var url = window.URL.createObjectURL(blob);
            var video = document.getElementById("video");
            video.src = url;
        }

        ws.onclose = function() {
            console.log("WebSocket已关闭");
        }
    </script>
</body>
</html>

上記のコードでは、まず WebSocket 経由でサーバーに接続し、サーバーから送信されたメッセージを受信したら、Blob オブジェクトを通じてメッセージをバイナリ オブジェクトに変換します。 、 URL.createObjectURL () メソッドを使用して、オーディオ、ビデオ、画像、およびその他のタグ ソースに使用できる URL を作成します。最後にvideoタグのsrc属性にURLを代入して動画の再生が完了します。

    バックエンド テクノロジの実装
サーバー側では、Java の WebSocket テクノロジを使用して、リアルタイム ビデオ ストリームの送信を実現できます。

@ServerEndpoint("/video")
public class VideoSocket {

    Session session;

    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
    }

    @OnClose
    public void onClose() {}

    @OnError
    public void onError(Throwable error) {}

    @OnMessage
    public void onMessage(String message, Session session) {}

    public void sendMessage(byte[] data) {
        try {
            session.getBasicRemote().sendBinary(ByteBuffer.wrap(data));
        } catch (IOException e) {}
    }
}

上記のコードでは、ビデオ ストリームをクライアントに送信するために使用される sendMessage() メソッドが定義されています。メソッド パラメータはバイト型のデータ ストリームです。 []。このうち、session.getBasicRemote().sendBinary()メソッドを呼び出してバイナリデータを送信します。

4. 概要

上記の紹介を通じて、WebSocket と Java の組み合わせと、WebSocket と Java を介してリアルタイムのビデオ ストリーミング再生を実装する方法について学びました。このテクノロジを実装するには、特定のフロントエンドおよびバックエンド アーキテクチャと特定のアプリケーション シナリオが必要であることに注意してください。実際のプロジェクト開発では、特定のニーズに応じてテクノロジーを選択して実装する必要があります。

以上がJava と WebSocket の組み合わせ: リアルタイムのビデオ ストリーミングを実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Excelは、動作しないことを見つけて交換します Excelは、動作しないことを見つけて交換します Aug 13, 2025 pm 04:49 PM

ChecksearchSettingslikeのように、「Matchentirecellcontents」および「Matchcase」byexpindedoptionsinfindandReplaceを使用して、「tocorrectscope内」内で「lookin "issettovaluesand」を保証します

Javaアプリケーションでロギングを構成する方法は? Javaアプリケーションでロギングを構成する方法は? Aug 15, 2025 am 11:50 AM

logbackまたはlog4j2と組み合わせたSLF4Jを使用することは、Javaアプリケーションでログを構成する推奨方法です。対応するMaven依存関係を追加することにより、APIおよび実装ライブラリを導入します。 2.コード内のSLF4JのLoggerFactoryを介してロガーを取得し、パラメーター化されたロギング方法を使用して分離した効率的なログコードを記述します。 3. logback.xmlまたはlog4j2.xml構成ファイルを介して、ログ出力形式、レベル、ターゲット(コンソール、ファイル)、およびパッケージレベルのログ制御を定義します。 4.オプションで、構成ファイルスキャン機能を有効にして、ログレベルの動的調整を実現し、スプリングブートをアクチュエータエンドポイントを介して管理することもできます。 5.を含むベストプラクティスに従ってください

Javaアプリケーションを展開する方法 Javaアプリケーションを展開する方法 Aug 17, 2025 am 12:56 AM

PrepareyourapplicationbyusingMavenorGradletobuildaJARorWARfile,externalizingconfiguration.2.Chooseadeploymentenvironment:runonbaremetal/VMwithjava-jarandsystemd,deployWARonTomcat,containerizewithDocker,orusecloudplatformslikeHeroku.3.Optionally,setup

JavaのCastorによるXMLデータバインディング JavaのCastorによるXMLデータバインディング Aug 15, 2025 am 03:43 AM

castorenablesxml-to-javaobjectmappingviadefault conventionsorexplicitmappingfiles;

JSは、配列の開始に要素を追加します JSは、配列の開始に要素を追加します Aug 14, 2025 am 11:51 AM

JavaScriptでは、配列の先頭に要素を追加する最も一般的な方法は、unshift()メソッドを使用することです。 1. unshift()を使用すると、元の配列が直接変更されると、1つ以上の要素を追加して、追加された配列の新しい長さを返すことができます。 2.元の配列を変更したくない場合は、拡張機能操作者([newElement、... arr]など)を使用して新しい配列を作成することをお勧めします。 3. concat()メソッドを使用して、新しい要素配列と元の番号を組み合わせて、元の配列を変更せずに新しい配列を返すこともできます。要約すると、元の配列を変更するときにunshift()を使用し、元の配列を変更しておくときは拡張オペレーターを推奨します。

パフォーマンスの比較:Java vs. Go for Backend Services パフォーマンスの比較:Java vs. Go for Backend Services Aug 14, 2025 pm 03:32 PM

gutypivityOffersbetterruntimeperformanceは、特にfori/o-heavyservices、duetoits lightgoroutinesineficientscheduler、whilejava、canslowertart、canmatchgoincpu-boundtasptimization.2.gouseslessme

JavaでJSONと協力する方法 JavaでJSONと協力する方法 Aug 14, 2025 pm 03:40 PM

Toworkwithjsoninjava、useathird-partylibrarylikejackson、gson、orjson-b、asjavalacksbuilt-insupport;

JavaのAssertキーワードは何ですか? JavaのAssertキーワードは何ですか? Aug 17, 2025 am 12:52 AM

theasertkeywordinjavaisusedtoeas sumptionsduringDevelopment、throwinganassertionerroriftheconditionispalse.2

See all articles