php web音视频通话,实现音视频通话(Web)

实现音视频通话(Web)

网易云信音视频通话产品的基本功能包括高质量的实时音视频通话。当您成功初始化 SDK 之后,您可以简单体验本产品的基本业务流程。本文档为您展示音视频通话提供的基本业务流程。

前提条件

请确认您已完成以下操作:

快速跑通Sample Code

注意:在运行示例项目之前,请联系商务经理开通非安全模式。非安全模式建议只在集成开发阶段使用,请在应用正式上线前改回安全模式。

在SDK和示例代码下载页面或 Demo 体验页面下载需要体验的示例项目或 Demo 源码工程。

在 /src/views/home/index.vue 文件中配置 App Key。

data () {

return {

isSilence: false,

isDesc: true,

isStop: false,

desc: '等待对方进入...',

appkey: '', //填入您的appkey

token: '',

client: null,

localUid: Math.ceil(Math.random() * 1e5),

localStream: null,

remoteStream: null

}

},

运行项目。

该工程使用 vue(vue-cli 4.x) 技术栈,请使用 node 开发环境 version 8+。

// Project setup

npm install

// Compiles and hot-reloads for development

npm run dev

// Compiles and minifies for production

npm run build

// Lints and fixes files**

npm run lint

实现音视频通话

本节主要介绍如何使用 SDK 实现音视频通话。主要流程如下图所示:

8e37122659950a0996fec32dd9e119a1.png

WebRTC2 中有两个重要类:

Client

代表一个本地客户端。Client 类的方法提供了音视频通话的主要功能,例如加入房间、发布音视频流等。

Stream

代表本地和远端的音视频流。Stream 类的方法用于定义音视频流对象的行为,例如流的播放控制、音视频的编码配置等。调用 Stream 方法时,请注意区分本地流和远端流对象。

1. 引用文件

在项目相应的前端页面文件中,对 NIM_Web_WebRTC2_vx.x.x.js 文件进行引用。

import 方式引入:

import WebRTC2 from '../../NIM_Web_WebRTC2_vx.x.x.js'

script 标签引入:

2. 初始化

执行 createClient 方法创建 client 实例。

//示例

//创建client实例

rtc.client = WebRTC2.createClient({

appkey: 'xxx', //您的 appkey

debug: true, //是否开启调试日志

});

3. 设置本地视图

初始化成功后,可以设置设置本地视图,预览本地图像。加入房间后,可以执行 publish 方法发布自己的多媒体流至流媒体,供其他用户订阅。

//初始化本地流并且发布

function initLocalStream(){

//创建本端stream实例,销毁前无需重复创建

rtc.localStream = WebRTC2.createStream({

uid: uid, // 本端的uid

audio: true, // 是否从麦克风采集音频

microphoneId: microphoneId, // 麦克风设备 deviceId,通过 getMicrophones() 获取

video: true, // 是否从摄像头采集视频

cameraId: cameraId // 摄像头设备 deviceId,通过 getCameras() 获取

})

//启动本地音视频流,销毁前无需重复初始化

rtc.localStream.init().then(()=>{

console.warn('音视频初始化完成,播放本地视频')

//用于播放视频的div元素

let div = document.getElementById('local-container')

//开始播放本地视频流

rtc.localStream.play(div)

//设置播放的视频容器大小

rtc.localStream.setLocalRenderMode({

width: 180,

height: 150,

cut: true // 是否裁剪

})

// 将本地音视频流发布至云信服务器,加入房间前不用执行此方法。

rtc.client.publish(rtc.localStream).then(()=>{

console.warn('本地 publish 成功')

})

})

}

4. 加入房间

加入房间前,请确保已完成初始化相关事项。若您的业务中涉及呼叫邀请等机制,可以使用信令。

//加入频道

rtc.client.join({

channelName: '频道名称',

uid: uid,

token: ''

}).then((obj) => {

console.info('加入频道成功...')

//初始化本地流,并且发布

initLocalStream() //后面介绍说明

})

参数说明:

参数

说明

token

安全认证签名(NERTC Token)。可设置为:null。非安全模式下可设置为 null。安全性不高,建议在产品正式上线前联系对应商务经理转为安全模式。

已获取的NERTC Token。安全模式下必须设置为获取到的 Token 。若未传入正确的 Token 将无法进入房间。

推荐使用安全模式。

channelName

房间名称,设置相同房间名称的用户会进入同一个通话房间。

注意:您也可以在加入通道前,通过创建房间接口创建房间。加入房间时,若传入的 {channelName} 未事先创建,则云信服务器内部将为其自动创建一个名为 {channelName} 的通话房间。

uid

用户的唯一标识 id,房间内每个用户的 uid 必须是唯一的。

5. 设置远端视图

音视频通话过程中,除了要显示本地的视频画面,通常也要显示参与互动的其他连麦者/主播的远端视频画面。

通过以下回调获取相关信息:

peer-online:监听远端用户加入通话房间的事件,并抛出对方的 uid。当本端加入房间后,也会通过此回调抛出通话房间内已有的其他用户。

stream-added:监听远端用户发布视频流的事件,回调中携带对方的 uid 与发布的视频分辨率。

在监听到远端用户发布视频流后,本方可以通过 subscribe 方法对其发起视频流的订阅,来将对方的视频流渲染到视频画布上。

// 示例

//设置要订阅音频或者视频

remoteStream.setSubscribeConfig({

audio: true,

video: true

})

// 发起订阅

rtc.client.subscribe(remoteStream).then(()=>{

console.log('发起订阅对端成功')

})

订阅成功后,可进一步在 stream-subscribed 回调中播放远端视频流。

//播放订阅的对端的音视频流

rtc.client.on('stream-subscribed', evt => {

console.warn('订阅别人的流成功的通知')

var remoteStream = evt.stream;

let div = document.getElementById('remote-container')

//开始播放远端音视频流

remoteStream.play(div).then(()=>{

console.log('播放对端的流成功')

remoteStream.setRemoteRenderMode({

width: 180,

height: 150,

cut: true

})

})

})

6. 退出通话房间

通过 leave() 接口退出通话房间。

//用户无需做一些清除动作,sdk会自动做清除逻辑

rtc.client.leave()

7. 销毁实例

当确定短期内不再使用音视频通话实例时,可以释放对应的对象资源。

//一般情况下无需使用

rtc.client.destroy()

本篇文档内容是否对您有帮助?

04c71eec4a2781fca7013f8beb54eb1e.png有帮助

2739a73467429f691aa770d9f31af7ff.png我要吐槽

如果遇到产品相关问题,您可 提交工单 或 在线客服 寻求帮助。

您的改进建议

×

问题类型

内容错误

内容没更新

描述不清

链接有误

步骤不完整

内容缺失(缺少代码/示例)

其他

更多建议

请输入您的建议或问题(至少5个字符,至多500个字符)

联系方式

标记内容

同时提交标记内容

提交

此文档对你是否有帮助

×

04c71eec4a2781fca7013f8beb54eb1e.png有帮助

2739a73467429f691aa770d9f31af7ff.png我要吐槽

×

反馈成功

0caf71608042dc93edd3c864e71208b5.png非常感谢您的反馈,我们会继续努力做得更好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Open vSwitch】Open vSwitch的VxLAN隧道网络实验

验参考: Open vSwitch的VxLAN隧道网络实验 实验步骤: 1. 预先配置: 1. 验证两虚拟机的OvS服务是否被启动好: # ps –ef|grep ovs 2. 登陆两台安装Mininet的虚拟机,分别查看IP地址: VM1(192.168.0.102&#…

centos oracle创建库,CentOS Oracle安装必要的软件创建数据库

CentOS Oracle安装系统的特性,既可作为高校计算机专业CentOS Oracle安装学习,也可以作为CentOS系统开源爱好者、CentOS系统用户CentOS Oracle安装系统的特性,,既可作为高校计算机专业CentOS Oracle安装学习,也可以作为…

【Open vSwitch】Open vSwitch流表应用实战

实验参考: Open vSwitch流表应用实战 如何在ubuntu系统下搭建一个opendaylight Beryllium版本环境 实验步骤: 1. 前期准备。 1.创建2个虚拟机,一个是选择OpenDaylight镜像的虚拟机作为控制器(注:内存大于2G&#xff09…

oracle sql loop merge,Oracle之存储过程和MERGE INTO语句

一、MERGE INTO语句1、merge into语句的功能:我们操作数据库的时候,有时候会遇到insert或者Update这种需求。我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方法效验数据是否存在,这种操作完全可以用merge into语句代替&…

七月暴雨

狼是弱者 是生命无从着落的弱者 是黯然神伤的异族 它们此刻在星光月夜里 悲情地凝望厮守缠绵过的故园 在逡巡的感伤里作别 为了生命 为了延续 选择死亡或者选择离去 就像时间无意从指间滑过一样 悄悄的溜走 没有…

【OpenFlow】OpenFlow1.3协议基于Mininet部署与验证

实验参考: OpenFlow1.3协议基于Mininet部署与验证 实验步骤: 1. 安装mininet,具体步骤请看实验参考。 2. Mininet创建拓扑后连接支持OpenFlow1.3的控制器: 在连接前,可以通过命令确认控制器的端口号: 3. 进…

【OpenDaylight】OpenDaylight的C/S模式实验

实验参考: OpenDaylight的C/S模式实验 实验步骤: 1. 启动OpenDaylight: 查看是否开启: 或: 2. 查看OpenDaylight的IP地址: 3. 用Miniet创建简易拓扑并连接ODL: 4. 在OpenDaylight虚拟机上查看监…

linux vnc 改端口号,基于Linux中vnc配置端口号的修改方法

vnc的默认端口是自己配置的,并不是这有一个端口号。通过打开/etc/sysconfig/vncservers。 这里就配置了2个桌面,一个桌面号是1, 一个是2.这里的配置的参数VNCSERVERS"2:root"VNCSERVERARGS[2]"-geometry 1280x800"就可以…

linux怎么查看本地磁盘空间,linux怎么查看磁盘空间

如果你在使用Linux过程中遇到无法读写磁盘,应用程序无法执行,请求响应不了等问题,那多半是Linux系统磁盘空间满了,那么怎么查看Linux磁盘空间呢?下面跟着学习啦小编一起来了解一下吧。linux怎么查看磁盘空间首先如果需要查看整个…

[hdu5629]Clarke and tree

首先由一个神奇的序列叫做Purfer序列,他可以表示一棵树,且每个节点出现此时为度数-1(因此总长为n-2)。 然后dp,用f[i][j][k]表示用前i个点中的j个点构成了一个长度为k的Purfer序列(当然要符合条件),那么有$…

linux指令与数据库,Linux指令每日背诵(第一天)

了解:Linux 命令的分类:内部指令、外部指令。Shell 在用户和内核之间充当了“翻译官”的角色。掌握:四种指令方式:1、命令字;2、命令字选项;3、命令之参数;4、命令字选项参数;命令字…

Scott Mitchell 的ASP.NET 2.0数据教程之五:: 声明参数

导言 在上一章的教程中,我们看了GridView、DetailsView和FormView绑定到OjbectDataSource控件显示数据,ObjectDataSource调用了类ProductsBLL的GetProducts()方法。方法GetProducts()返回一个有Northwind数据库的Products表的所有记录组成的强类型数据表…

IArea

用于获取一个几何对象的面积 IArea接口的第一个属性Area(只读,返回一个double类型的数值,为此Area的面积)IArea接口的第二个属性Centroid(只读,返回一个IPoint类型的变量,为此Area的重心&#x…

linux coreutils升级,Coreutils

Coreutils提供了配置工具,定义颜色代码更加方便;Coreutils包含的不仅仅是ls,同时作为Linux用户,我更习惯于使用GNU的各种shell工具。其实就是安装了Coreutils,就可以使用Linux下的程序,【ls/mkdir/mv】等等…

IDEA插件:search with bing、search with baidu

//转载请注明出处:https://www.cnblogs.com/nreg/p/11267169.html 当项目出现错误时,经常需要复制错误信息粘贴到浏览器查询,但是手动复制再粘贴太麻烦了, 因此IDEA官方给了右键菜单search with google, 感觉上方便了许多&#xf…

oracle 游标(学校)

这段时间实在是很忙,结婚、赶项目进度、被迫出书、教学。每件事都是不能得罪的。。。。前几天帮教务处修正oracle数据库数据问题,把代码贴出来防止以后找不到了 declareCURSORcurTTT isselectXN,XM,XQ,KCMC,XF,BJMC fromCJB;XN1 VARCHAR2(10);XM1 VARCHA…

[原创]公布读取瑞星注册码的小程序源代码

大概一年多了,瑞星一直都没更改其序列号保存方式。这还是偶在学校时无聊研究的。偶是菜鸟,就不多说了。 关键代码如下: 1stringrisingpath;2inti, j 0; longsnoffset, idoffset;34//以下读取5//HKEY_LOCAL_MACHINE\SOFTWARE\rising\Rav,并存在…

Selenium 2自动化测试实战4(引用模块)

一、模组1.模组也叫类库或模块,引用模块 在python中,通过import….或from….import….的方式引用模块,下面引用time模块 import time print (time.ctime())#输出结果为“Tue Jul 30 11:34:32 2019”在time模块下面有一个ctime()方法用于获得当…

appsan可以扫描linux吗,[经验]使用appscan实现多站扫描简单自动化

随着年龄增长,身上负担的压力也越来越大。在工作中很多时候都会需要短时间内扫描多个网站,可能是平时时间不够,或者是客户特别要求,很多时候工作中的扫描工作要放在晚上睡觉时间来做。但是白天忙了一天,晚上不可能一直…

tinyxml c语言,开源TinyXML 最简单的新手教程

TinyXML它是基于一个非常受欢迎的现在DOM型号XML解析器,简单易用且小巧玲珑,很适合存储简单数据。配置文件。当前最新版本号是2.6.2先看一下源代码文档的结构:Docs是帮助文档。里边有许多的使用说明,只截一张图看一下:…