uniapp实现视频通话功能

需求:接入即构SDK实现RTC视频通话

前言

提示:此处功能需求运用在window和安卓设备:

uniapp接入即构,快速实现实时音视频通话功能。接入ZEGO Express SDK:由 ZEGO 提供的实时音视频 SDK,能够为开发者提供便捷接入、高清流畅、多平台互通、低延迟、高并发的音视频服务。
关于SDK的使用(官方使用手册


下面详解一下我的使用过程(浅浅记录一下)

一、实时音视频通话?

示例:实时音视频通话
插一句:之前写过电商直播带货功能websocket直播间人数过多连接数多余500人,服务器垃圾不行崩了,后面改用了im即时通讯。
这次使用uniapp开发自助售卖机的视频通话咨询客服功能,经商量选择了即构SDK实现

二、使用步骤

1.uniapp插件的安装

(1)官网下载Express SDK和js封装层

(2)下载后如下操作(注:没有nativeplugins文件夹就新建,插件才能导入完成):

在这里插入图片描述

2.视频通话页面基本使用(nvue页面)

建立ui界面此处我需要兼容浏览器和安卓踩了坑(nvue页面开发注意):
1、引入components里面js封装层所需要的组件,注册,使用

import ZegoRemoteView from "@/components/zego-ZegoExpressUniApp-JS/zego-view/ZegoRemoteView";
import ZegoLocalView from "@/components/zego-ZegoExpressUniApp-JS/zego-view/ZegoLocalView";
components: {
        ZegoLocalView: ZegoLocalView,
        ZegoRemoteView: ZegoRemoteView,
    },
 <view class="zego-video-area">
	     <view class="zego-video-view">
	         <!-- #ifdef APP-PLUS -->
	         <zego-remote-view
	             v-if="engine"
				 :viewMode="AspectFill"
	             :streamID="playStreamID"
				 class="video-view"
				 style="height: 403.84rpx; flex: 1"
	         >
	         </zego-remote-view>
	         <!-- #endif -->
	         <!-- #ifdef H5 -->
	         <video
	             id="remote_video"
	             class="video-view"
	             autoplay
	             playsinline
	             crossorigin="anonymous"
	             :muted="!playVideoMuted"
	         ></video>
	         <!-- #endif -->
	     </view>
        <view class="zego-video-view">
            <!-- #ifdef APP-PLUS -->
            <zego-local-view class="video-view" :viewMode="AspectFill" style="height: 403.84rpx; flex: 1"></zego-local-view>
            <!-- #endif -->
            <!-- #ifdef H5 -->
            <video
                id="local_video"
                class="video-view video"
                autoplay
                playsinline
                crossorigin="anonymous"
                object-fit="cover"
                :muted="pubVideoMuted"
            ></video>
            <!-- #endif -->
         </view>
		</view>

2、页面初始化时开启相机权限

async mounted() {
       // #ifdef APP-PLUS
       if (uni.getSystemInfoSync().platform === "android") {
           await permision.requestAndroidPermission(
               "android.permission.RECORD_AUDIO"
           );
           await permision.requestAndroidPermission(
               "android.permission.CAMERA"
           );
       }
       // #endif
        // #ifdef H5
       this.localVideoElem = document.querySelector("#local_video video");
       this.playVideoElem = document.querySelector("#remote_video video");
       // #endif
    },

3、在官方示例的封装基础上更方便(官方demo

官方示例目录列表:
在这里插入图片描述
以quick-start.nvue为例子,进去该视频通话页面之前接口获取到了token和userId及appid,设置完成

import keyCenter from '@/pages/KeyCenter.js'
keyCenter.setAppID(loginRes.appId);
keyCenter.setUserID(loginRes.userId);
keyCenter.setToken(loginRes.token);

跳转到该页面后获取房间号和PlayStreamID。
quick-start页面初始化进行了
1、绑定推流Id(PublishStreamID)绑定(PlayStreamID)
//quick-start.vue(调用该方法)

//用了官方示例封装,直接调用对应方法
 this.bindPublishStreamIDChange(PublishStreamID)
 this.bindPlayStreamIDChange(PlayStreamID)

2、操作:
(1)创建引擎
//quick-start.vue(调用该方法)

this.onClickCreate(PlayStreamID)//创建引擎/房间号用了PlayStreamID

(2)进入房间
//mixins-》index.js

//创建引擎onClickCreate方法里面添加进入房间推流和拉流操作
```javascript
    this.loginRoom(this.roomID,this.userID,this.userName)//登录房间
	this.onClickPublish()//预览本地
	this.onClickPlay()//播放对方视频流

(3)已经可以视频通话了
关于挂断调用 销毁引擎方法
//quick-start.vue(主动调用该方法)

this.destroyEngine()

(4)对方进入和离开
需要监听进入退出房间操作,创建引擎onClickCreate时已经使用roomStreamUpdate监听了房间进入状态,修改对应回调:

        this.engine.on("roomStreamUpdate", (roomID, updateType, streamList) => {
                // 流更新的相关操作, 以及关于断网后的重连出发的流更新
                const stream = streamList.find(item => item.streamID === this.playStreamID)
                if(stream) { 
                    // 0 为add, 1 为delete
                    if (updateType == 0) {
                    //播放对方视频
                        this.startPlayingStream(this.playStreamID);
                    } else if (updateType == 1) {
                    // 对方退出了设置被动挂断
						this.destroyEngine()
                    }
                }
            });

自己做业务处理,一方退出进行什么操作修改一下

总结

初始化页面设置房间号、设置推流Id,拉流Id 。获取当前用户的userId和Token。
根据参数开始 (1)进入房间 (2)开始推流(3)开始拉流 (4)同时开始监听房间进入回调实现1对1视频时,进出房间所需的业务操作,例如退出当前页面

Uniapp是一种跨平台的开发框架,可以用于实现视频通话功能。使用Uniapp开发音视频通话功能的步骤如下: 1. 安装Uniapp插件:在Uniapp项目中,通过安装第三方插件来实现视频通话功能。可以通过在插件市场搜索相关插件并进行安装。 2. 配置视频通话页面:创建一个nvue页面,该页面将用于展示视频通话的界面。可以在页面中添加视频窗口、音频控制按钮等相关组件,以便用户进行实时的音视频通话。 3. 参考官方示例进行封装:可以参考官方提供的示例代码进行封装,以便更方便地使用音视频通话功能。官方示例中可能包括初始化SDK、登录账号、呼叫对方、接听来电等功能实现。 总结起来,实现Uniapp视频通话功能的步骤包括插件安装、页面配置和参考示例进行封装。通过这些步骤,你可以在Uniapp实现视频通话功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [uniapp实现视频通话功能](https://blog.csdn.net/zwy1231/article/details/129303199)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [如何在uni-app 平台快速实现一对一音视频通话应用](https://blog.csdn.net/ZEGO123/article/details/124139054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值