首页 > 其他分享 >通过WebRTC简单实现媒体共享

通过WebRTC简单实现媒体共享

时间:2023-11-10 11:22:24浏览次数:47  
标签:function 媒体 offer 发送 pc video 共享 WebRTC

通过WebRTC简单实现媒体共享

媒体协商

  1. 在设置本地描述符(offer/answer)前,我们总是需要将媒体添加到连接中,只有这样在描述符中才能包含需要共享的媒体信息,除非你不需要共享媒体。
  2. 在实际应用中,我们通常没办法让两个客户端直接通信,进行媒体协商。因此我们通常需要一个双方都可以访问的中间服务器交换彼此的属性描述符这个服务器称之为信令服务器。建议使用websocket。
 //以下代码并没用实现如何接收和发送描述符,这里只展示了接收到对应信息后应该如何设置。接收和发送属性描述符应该由具体业务决定
const pc = new RTCPeerConnection();

  //这里是共享屏幕的方法
    function screenSharing(){
        navigator.mediaDevices.getDisplayMedia({
                video: true,
                audio: true
            }).then((stream) => {
                //将本地流添加到连接器中
                stream.getTracks().forEach((track) => {
                    pc.addTrack(track, stream);
                });
                //createOffer
                pc.createOffer()
                    .then(async (desc) => {
                        //设置本地描述
                        await this.pc.setLocalDescription(desc);
                        //发送offer
                        //发送offer代码省略,你可以使用如何方式将offer发送到另一个客户端

                    }).catch((err) => {
                        //这里是错误处理
                    });

            }).catch((err) => {
                //这里是错误处理
            });
    }

            //接送到远程的answer后调用
            function setRemoteAnswer(Answer){
                  pc.setRemoteDescription(new RTCSessionDescription(Answer));
            }
            //接收到远程的offer后调用
            function setRemoteOffer(Offer) {
                pc.setRemoteDescription(new RTCSessionDescription(data.desc))
                            .then(() => {
                                pc.createAnswer().then((desc) => {
                                   pc.setLocalDescription(desc)
                                        .then(() => {
                                           //这里是发送answer应答  
                                           //发送answer代码省略,你可以使用如何方式将answer发送回offer发送的客户端
                                        })
                                })
                            })
            }

            //创建pc的实例后调用
            function setRemoteMedia(){
                pc.ontrack = (e) => {
                    //这里是处理接收的远程媒体。这个示例表示将媒体流在id为remoteVideo 的video元素中播放
                    //在用户没有和页面有互操作前,可能无法直接播放
                    let video = document.getElementById("remoteVideo") as HTMLVideoElement;
                    video.srcObject = e.streams[0];
                    video.onloadedmetadata = (e) => {
                        video.play();
                    }
                }

            }

            //创建pc的实例后调用
            function setRemoteMedia(){
               pc.onicecandidate = (e: RTCPeerConnectionIceEvent) => {
                    //这里会在协商完成后发送ice候选
                    //发送ice代码省略
                }

            }
            //收到ice候选后的调用
            function SetRemoteIce(candidate){
                pc.addIceCandidate(new RTCIceCandidate(candidate))
                            .then(() => {
                              //这里成功设置了ice候选
                 })
            }

更详细信息可参考一下文档

  1. 信令与视频通话
  2. RTCPeerConnection

标签:function,媒体,offer,发送,pc,video,共享,WebRTC
From: https://www.cnblogs.com/jiangyun/p/17823510.html

相关文章

  • 为什么在财务共享中心建设初期人员不降反增?
    在财务共享建设过程中,人员规划是极其重要的一环,它牵扯职责调整、岗位变动、编制规模等敏感问题,因此往往受到格外重视,尤其是人员数量的测算。很多企业在财务共享中心上线之初就希望达到立竿见影的减员效果,但从实践经验来看,此期望并不符合实际规律,反之,在上线之初会存在不降反增的情况......
  • 基于Spark的共享单车数据存储系统的设计与实现-计算机毕业设计源码+LW文档
    摘 要近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,共享单车数据存储系统利用计算机网络实现信息化管理,使整个共享单车数据存储管理的发展和服务水平有显著提升。本文拟采用java技术和Springboot搭建系统框架,后台使用MySQL数据库进......
  • 配置VMware的Ubuntu开发环境,ssh+文件共享目录
    1.安装samba1.更新当前软件。sudoapt-getupgradesudoapt-getupdatesudoapt-getdist-upgrade2.安装samba服务器。sudoapt-getinstallsambasamba-common3.添加用户(下面的zhongshan是我的用户名,之后会需要设置samba的密码)。sudosmbpasswd-atest4.配置sa......
  • Go语言开发Web网站实现流媒体,Web视频网站的关键技能
    Go语言开发Web网站实现流媒体,Web视频网站的关键技能一,流媒体直播框架分析Golang是一门高并发、高性能的编程语言,非常适合用于流媒体直播等实时场景。下面是几个比较常用的Golang流媒体直播框架:go-rtmp:一个基于Go的RTMP服务器和客户端库,支持RTMP直播推流和拉流。An......
  • ubuntu22.04挂载windows的smb3文件共享
    现在windows一般使用smb3.0版本 可以看到,支持smb3直接编辑/etc/fstab 如果目标目录有空格,可以用\040进行转义,通常的转义在这儿不管用。/etc/cirfs-credentials用于配置用户名密码  手动挂载可以使用sudomount.smb3//192.168.31.20/samba /mnt/samba-ousername......
  • springboot“共享书角”图书借还管理系统-计算机毕业设计源码+LW文档
    摘 要随着社会的发展,图书借还的管理形势越来越严峻。越来越多的借阅者利用互联网获得信息,但图书借还信息量大。为了方便借阅者更好的获得本图书借还信息,因此,设计一种安全高效的“共享书角”图书借还管理系统极为重要。为设计一个安全便捷,并且使借阅者更好获取本图书借还信息,本......
  • 共享租车车app软件开发小程序多功能
      共享经济已经成为一种新的模式,当然也包括共享租车。app软件开发小程序多功能模式也受到了众多人的关注,下面就来看看共享租车APP小程序的功能都有那些。  一、用户注册和登录功能  APP小程序软件开发之前下考虑软件的界面,功能,符合用户的需求,选择不同的车型,租车方式......
  • 使用 TortoiseGit 在两个项目之间共享代码(cherry-pick)
    需求:项目A需要新增项目B的部分代码,要求不变更commitmessage信息做法项目A新增上游Remote,RemoteURL为项目B的URL新增方式:依次点击项目A文件夹内右键→TortoiseGit→Settings→Git→Remote,输入上游名称和URL点击确定后,TortoiseGit会询问是否为其禁用T......
  • 2007-多媒体教学的基础知识
    一、什么是多媒体教学?   多媒体教学是指在教学过程中,根据教学目标和教学对象的特点,通过教学设计,合理选择和运用现代教学媒体,并与传统教学手段有机组合,共同参与教学全过程,以多种媒体信息作用于学生,形成合理的教学过程结构,达到最优化的教学效果。   多媒体教学在八十年代已......
  • 电脑连接外置网卡共享网络
    方法电脑外置网卡网线连接路由器LAN口路由器设置界面设置LAN口的为192.168.137.2,之后通过此可以访问路由器设置界面电视端DNS设置为192.168.137.1或:路由器中的DNS设置为8.8.8.8114.114.114.114......