ベースのWebRTCのオーディオおよびビデオ通話

WebRTC(ウェブリアルタイムコミュニケーション)

  • WebRTC(ウェブリアルタイムコミュニケーション)は、ビデオストリーミングのためのブラウザとの接続点を(ピア・ツー・ピア)を確立するために、仲介者の助けを借りずに、ネットワークアプリケーションやサイトを可能にするリアルタイムの通信技術であり、及び(又は)、オーディオストリーム、またはその他のデータ伝送。これらの基準はのWebRTCは、アドホック(ピアツーピア)データ共有や会議が可能呼び出しを作成するために、任意のプラグインやサードパーティ製のソフトウェアをインストールすることなく、ユーザーを可能にしています。

WebSocketを

  • WebSocketのある通信プロトコルは、それが単一であってもよいTCP接続のための全二重通信を。よる2011年のWebSocketプロトコルIETFは、として標準RFC 6455の後、RFC 7936の補足仕様。ウェブIDLはでのWebSocket APIであるW3Cの標準化。

    WebSocketは、サーバーが積極的にクライアントにデータをプッシュすることができ、より簡単にクライアントとサーバー間のデータ交換を可能にします。WebSocket APIでは、ブラウザとサーバーはハンドシェイクを完了する必要があり、次の2つ、および双方向のデータ伝送間の永続的な接続を作成することができます。

基本構成

  • WebSocketの設定のサポートは、注入が注意しなければならない必要@Autowired

    • 初期化は、プロジェクトの開始のWebSocket、春がそのサービスを注入します、この時間は、オブジェクトがnullではない@Autowired

    • しかし、春のデフォルトの管理シングルトンは、サービス、新しいユーザーがチャットに入ったときに、システムは、新しいオブジェクトがWebSocketのサービスを注入していない、@Autowiredがnullエラーです。この時間を新しいのWebSocketオブジェクトを作成を注入します

    • ソリューション:stataic ||春を使用して変更のWebSocketの実装が来ます

    • /**
       * 开启WebSocket支持
       * 
       * @author wangJiaLun
       * @date 2019-06-19
       **/
      @Configuration
      public class WebSocketConfig extends ServerEndpointConfig.Configurator{
      
          @Bean
          public ServerEndpointExporter serverEndpointExporter() {
              return new ServerEndpointExporter();
          }
      
      }
      
  • WebSocketのアクセス・パスの設定、および主な方法が説明

    • @Component
      @ServerEndpoint(value = "/websocket/chat",configurator = WebSocketConfig.class)
      public class WebsocketServer {
           /**
           *  连接建立成功调用的方法
           *  判断接受人与当前登录人是否已经拥有房间,无则创建
           *  输出历史消息
           * @param session 会话
           */
          @OnOpen
          public void onOpen(Session session) {
          }
           /**
           *  收到客户端消息后调用的方法
           * @param message 客户端发送过来的消息
           * @param session 会话
           */
          @OnMessage
          public void onMessage(String message, Session session) {
          }
           /**
           * 当关闭浏览器后,则删除session记录和对话准备
           */
          @OnClose
          public void onClose(Session session) {
          }
        	/**
           * 当发生异常错误调用的方法
           * @param session 会话
           * @param error 异常信息
           */
          @OnError
          public void onError(Session session, Throwable error) {
          }
      }
      
      
  • 接続用WebSocketを作成します。

    • ws = new WebSocket("ws://192.168.3.102:8070/websocket/chat");
      
  • シグナリングビルドのWebRTC

    • インスタンスPeerConnectionを作成します

      • var PeerConnection = (window.PeerConnection || window.webkitPeerConnection00 || window.webkitRTCPeerConnection || window.mozRTCPeerConnection);
        

前と信号交換プロセスを転送した後、

  • スタート接続

    • すぐに接続成功データを送信開く時にwebcketを作成し、フロントエンド・プロセスの後

    • this.ws = new WebSocket("ws://192.168.3.102:8070/websocket/chat");
      let self = this;
      this.ws.onopen = function(ev) {
        self.ws.sendJson({
          messageHistoryVO: {
            senderId: ,
            recipientId: 
          },
          messageTypeEnum: "CONNECTION_SUCCESS"
        });
      };
      
    • @OnMessage方法は後端を発射後端の先端がデータを転送する必要がない場合は、このステップなしで実施することができます

    • プロセスで直接ビジネスロジックを完了し@OnOpen

    • すべての分析データの最初の

    • MessageStruct messageStruct = new MessageStruct();
      try {
          messageStruct = JSON.parseObject(message,MessageStruct.class);
      }catch (Exception e){
          e.printStackTrace();
      }
      MessageContent messageContent = new MessageContent();
      
    • 送信メッセージタイプのフロントエンドの異なるステップを実行します

    • switch (messageStruct.getMessageTypeEnum()){
          case CONNECTION_SUCCESS:
              messageContent.setMessageState(new ConnectionSuccessMessageState());
              break;
          case SINGLE_CHAT_TEXT:
              messageContent.setMessageState(new SingleChatMessageState());
              break;
          case INITIATE_SINGLE_CHAT_AUDIO_VIDEO:
              messageContent.setMessageState(new InitiateSingleChatAudioVideoMessageState());
              break;
          case ACCEPT_SINGLE_CHAT_AUDIO_VIDEO:
              messageContent.setMessageState(new AcceptSingleChatAudioVideoMessageState());
              break;
          case SINGLE_SENDER_SIGNALING:
              messageContent.setMessageState(new SingleSenderSignalingState());
              break;
          case CONNECTION_CLOSE:
              messageContent.setMessageState(new ConnetionCloseState());
              break;
          default:
              ;
      }
      messageContent.doOperation(messageStruct.getMessageHistoryVO(), session);
      
  • オーディオとビデオの対話型プロセス

ここに画像を挿入説明

リリース5元の記事 ウォンの賞賛4 ビュー239

おすすめ

転載: blog.csdn.net/weixin_45141382/article/details/104053912
おすすめ