uniapp实现视频通话功能

这篇具有很好参考价值的文章主要介绍了uniapp实现视频通话功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

前言

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

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


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

一、实时音视频通话?

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

二、使用步骤

1.uniapp插件的安装

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

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

uniapp实现视频通话功能

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)

官方示例目录列表:
uniapp实现视频通话功能
以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视频时,进出房间所需的业务操作,例如退出当前页面文章来源地址https://www.toymoban.com/news/detail-435773.html

到了这里,关于uniapp实现视频通话功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp Vue 使用 sip.js进行语音通话视频通话

    下载或者安装 sip.js 到 uniapp 项目,APP 端在 menifest.json 中配置麦克风权限 menifest.json 中 app 权限配置选中: android.permission.RECORD_AUDIO android.permission.MODIFY_AUDIO_SETTINGS sip.js 低版本 如 V0.13.0 版本的写法 sip.js 高版本如 V0.21.2 用法 (参数同上,只列出 methods 里的部分) APP模式下检测麦

    2024年02月13日
    浏览(152)
  • 基于Java+SpringBoot+Vue+Uniapp小程序前后端分离租房管理系统设计与实现(支持支付宝支付、有需求解析文档50页、演示视频)

    博主介绍: ✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品: 《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-

    2024年02月06日
    浏览(44)
  • 使用uniapp实现小程序图片和视频的下载功能

    提示:本人亲测可直接使用 url: http 图片/视频 is_video:false图片下载 true视频下载 提示:这是使用的小程序,可以去体验

    2024年02月11日
    浏览(47)
  • 基于javaweb的考研自习室的音视频通话功能设计(附完整版代码)

    考研自习室的音视频通话功能设计 陆健康负责云服务申请和部署,后端 Java servlet 制作,音视频通话的逻辑设计,数据库连接等设计。 占钟鸣负责安卓前端 UI 制作,前后端数据传输方式设计,接收数据后的触发响应设计,以及图片字体和整体颜色的选用。 李森负责数据库设

    2023年04月09日
    浏览(76)
  • WebRTC音视频通话-实现iOS端调用ossrs视频通话服务

    WebRTC音视频通话-实现iOS端调用ossrs视频通话服务 之前搭建ossrs服务,可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 这里iOS端使用GoogleWebRTC联调ossrs实现视频通话功能。 iOS端端效果图 ossrs效果图 WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站

    2024年02月13日
    浏览(59)
  • Java实现视频通话

    视频通话是现在的主流,但是你知道是如何实现的吗?如果想要实现这些技术,肯定是需要了解TCP协议,因为在数据传输时可能会存在粘包的问题,如果没有了解,那么是做不出来的。这里以socket示例,在netty中也会一通百通。 项目准备,导入读取相机流的jar包 客户端 客户

    2024年02月12日
    浏览(23)
  • socket实现视频通话-WebRTC

    最近喜欢研究视频流,所以思考了双向通信socket,接下来我们就一起来看看本地如何实现双向视频通讯的功能吧~ 首先思考如何获取视频流呢? 其实跟录音的功能差不多,都是查询电脑上是否有媒体设备,如果有录音和录像的设备,首先就需要授权,然后将视频流通过socket传

    2024年02月03日
    浏览(43)
  • uniapp实现视频上下滑动功能(小程序)以及video组件的暂停和播放

    uni推荐使用swiper组件实现,在video组件的下面介绍有写。 这里实现方式是: 父组件先用swiper组件实现纵向滑动,然后在每个swiper-item中插入视屏组件video-item-vx(自己定义的组件),在video-item-vx组件中实现视屏播放,具体别的细节根据需要自己实现。 注意:不能无限添加swi

    2023年04月22日
    浏览(67)
  • 解决苹果Safari 浏览器下html不能自动播放声音和视频的问题-实时语音通话功能【唯一客服】...

    在实现我的客服系统中,实时语音通话功能的时候,如果想自动播放音视频流,在苹果设备上遇到了问题。 苹果浏览器(Safari)在默认情况下不允许声音在背景里自动播放。这是出于用户体验和隐私方面的考虑,避免在用户没有意识到的情况下自动播放声音。 解决办法是 iOS

    2024年02月12日
    浏览(132)
  • UniApp中获取手机通话记录的方法及源代码实现

    UniApp中获取手机通话记录的方法及源代码实现 近期有用户在UniApp开发中询问如何获取Android手机的通话记录,这里将介绍一种使用plus.android接口的方法,并提供相应的源代码示例。 UniApp是一种基于Vue.js的跨平台开发框架,可以同时开发iOS和Android应用。在UniApp中,我们可以通过

    2024年01月17日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包