zoukankan      html  css  js  c++  java
  • [javascript] 使用javascript实现webrtc视频聊天demo

    自己的ID是自动获取的 ,然后输入对方的ID , 对方的ID可以这样获取 , 再打开新的浏览器或者手机也可以 

    原理是 利用js的h5新特性获取摄像头视频流, 通过peerjs的服务交换双方的信息 , 然后使用浏览器的webrtc特性进行点对点通信 , 这个时候是不需要中间服务器的

     代码如下:

    <html>
    <head>
        <title>视频聊天</title>
        <meta charset="utf-8">
        <script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
        <script src="https://cdn.bootcdn.net/ajax/libs/peerjs/1.3.1/peerjs.min.js"></script>
    </head>
    <body>
    <h3>本地视频</h3>
    <video id="localVideo" style=" 400px;height: 300px;"></video>
    <div style="text-align: left">
        自己ID<input type="text" id="myPeerid"/>(自动获取)
        对方ID<input type="text" id="youPeerid"/>(请手动输入)
        <button id="callBtn">聊天</button>
    </div>
    <h3>远程视频</h3>
    <video id="remoteVideo" style=" 400px;height: 300px;"></video>
    
    
    
    <script type="text/javascript">
        //访问用户媒体设备的兼容方法
        function getUserMedia(constrains,success,error){
            if(navigator.mediaDevices.getUserMedia){
                //最新标准API
                navigator.mediaDevices.getUserMedia(constrains).then(success).catch(error);
            } else if (navigator.webkitGetUserMedia){
                //webkit内核浏览器
                navigator.webkitGetUserMedia(constrains).then(success).catch(error);
            } else if (navigator.mozGetUserMedia){
                //Firefox浏览器
                navagator.mozGetUserMedia(constrains).then(success).catch(error);
            } else if (navigator.getUserMedia){
                //旧版API
                navigator.getUserMedia(constrains).then(success).catch(error);
            }
        }
        var localVideo = document.querySelector('video#localVideo');
        var remoteVideo = document.querySelector('video#remoteVideo');
        var localStream=null;
        $(function(){
            getUserMedia({video: true, audio: true}, function(stream) {
                localStream=stream;
                localVideo.srcObject = stream;
                localVideo.autoplay = true;
                localVideo.play();
            }, function(err) {
                console.log('Failed to get local stream' ,err);
            });
    
            var peer = new Peer();
            peer.on('open', function(id) {
                $("#myPeerid").val(id);
            });
            peer.on('call', function(call) {
                call.answer(localStream);
                call.on('stream', function(remoteStream) {
                    console.log(remoteStream);
                    remoteVideo.srcObject = remoteStream;
                    remoteVideo.autoplay = true;
                });
            });
            $('#callBtn').click(function(){
                var remoteId=$("#youPeerid").val();
                if(remoteId==""){
                    alert("请输入对方ID");return;
                }
    
                var call = peer.call(remoteId,localStream);
                call.on('stream', function(remoteStream) {
                    console.log(remoteStream);
                    remoteVideo.srcObject = remoteStream;
                    remoteVideo.autoplay = true;
                });
                call.on('close', function() {
                    console.log("call close");
                    _this.loading.close();
                });
                call.on('error', function(err) {
                    console.log(err);
                    _this.loading.close();
                });
            });
        });
    </script>
    </body>
    </html>

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com

    赞赏作者

    微信交流

  • 相关阅读:
    Martix工作室考核题 —— 打印一个菱形
    Martix工作室考核题 —— 打印一个菱形
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第一题
    fiddler模拟发送post请求
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14359243.html
Copyright © 2011-2022 走看看