位置: IT常识 - 正文

记录--uniapp开发安卓APP视频通话模块初实践(uniapp开发总结)

编辑:rootadmin
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 视频通话SDK用的即构的,uniapp插件市场地址 推送用的极光的,uniapp插件市场地址 即构音视频SDK uniapp插件市场的貌似是有些问题,导入不进项目,直接去官网下载,然后放到项目下的 nativeplugins 目录下,在配 ... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

推荐整理分享记录--uniapp开发安卓APP视频通话模块初实践(uniapp开发总结),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:uniapp开发app视频教程,使用uniapp开发app,uniapp开发实例,uniapp开发总结,uniapp 开发,uniapp开发项目,uniapp开发技巧,uniapp app开发,内容如对您有帮助,希望把文章链接给更多的朋友!

记录--uniapp开发安卓APP视频通话模块初实践(uniapp开发总结)

视频通话SDK用的即构的,uniapp插件市场地址推送用的极光的,uniapp插件市场地址即构音视频SDKuniapp插件市场的貌似是有些问题,导入不进项目,直接去官网下载,然后放到项目下的 nativeplugins 目录下,在配置文件中填入即构后台的appID和AppSign,接下来就可以开干了准备两个页面首页:/pages/index/index// 新建一个按钮<button @click="sendVideo">发送视频邀请</button>// 发送事件,主动发送直接进入下一个页面即可sendVideo(){uni.navigateTo({url: '/pages/call/call'})}通话页:pages/call/call这个页面会复杂一点注意这个页面为nvue页面先把所有代码都列出来,再一一做说明<template><view><view v-if="status === 1" class="switch-bg" :style="{'height': pageH + 'px'}"><view class="top-info u-flex"><image src="https://www.yuucn.com/wp-content/uploads/2022/11/1668749350-6c49bb0403761c1.jpeg" class="avatar"></image><view class="info u-flex u-flex-col u-col-top"><text class="text">值班中心</text><text class="text">正在呼叫</text></view></view><view class="switch-handle u-flex u-row-center"><image src="" class="img" @click="hangUp"></image></view></view><view v-if="status === 2" class="switch-bg" :style="{'height': pageH + 'px'}"><view class="top-info u-flex"><image src="https://www.yuucn.com/wp-content/uploads/2022/11/1668749350-6c49bb0403761c1.jpeg" class="avatar"></image><view class="info u-flex u-flex-col u-col-top"><text class="text">值班中心</text><text class="text">邀请您视频聊天</text></view></view><view class="switch-handle"><view class="u-flex"><text>切到语音接听</text><image src=""></image></view><view class="u-flex u-row-center u-row-between"><image src="" class="img" @click="hangUp"></image><image src="" class="img" @click="switchOn"></image></view></view></view><view v-if="status === 3" :style="{'height': pageH + 'px'}"><view><zego-preview-view class="face"></zego-preview-view><view v-for="(stream, index) in streamList" :key="index"><zego-view :streamID="stream.streamID"></zego-view></view></view><view class="switch-handle"><view><text>{{minute}}:{{seconds}}</text></view><view><view><view class="icon-round"><image src="" class="icon1" mode=""></image></view><text class="h-text">切到语音通话</text></view><view><image src="" class="img" @click="hangUp"></image><text class="h-text">挂断</text></view><view><view class="icon-round" @click="changeCamera"><image src="" class="icon2" mode=""></image></view><text class="h-text">转换摄像头</text></view></view></view></view></view></template><script>// #ifdef APP-PLUSvar jpushModule = uni.requireNativePlugin("JG-JPush")import ZegoExpressEngine from '../../zego-express-video-uniapp/ZegoExpressEngine';import {ZegoScenario} from '../../zego-express-video-uniapp/impl/ZegoExpressDefines'import {AppID,AppSign} from '../../zegoKey.js'var instance = ZegoExpressEngine.createEngine(AppID, AppSign, true, 0);// #endifexport default {data() {return {status: 1, // 1: 主动呼叫;2: 被呼叫pageH: '',// 页面高度innerAudioContext: null, //音乐对象streamList: [],msg_id: '',// 推送消息idmsg_cid: '',// 推送cidroomID: 'dfmily110001',publishStreamID: uni.getStorageSync('userinfo').nickname,userID: uni.getStorageSync('userinfo').nickname,userName: uni.getStorageSync('userinfo').nickname,camera_dir: 'before', // 摄像头 before 前置,after 后置};},destroyed: () => {console.log('destroyed');ZegoExpressEngine.destroyEngine();},mounted() {var client = uni.getSystemInfoSync()if (client.platform == 'android') {//安卓事先请求摄像头、麦克风权限var nativeEngine = uni.requireNativePlugin('zego-ZegoExpressUniAppSDK_ZegoExpressUniAppEngine');nativeEngine.requestCameraAndAudioPermission();}},onLoad(opt) {this.getSysInfo();this.playAudio();if(opt.status == 2){// 带参数 status=2时代表被呼叫this.status = parseInt(opt.status)}if(!opt.status){// 主动呼叫、需要发推送消息this.getPushCid();}this.initZegoExpress();},onBackPress() {// return true;this.innerAudioContext.stop();this.logout();},methods: {getSysInfo() { // 获取手机信息let sys = uni.getSystemInfoSync()this.pageH = sys.windowHeight},playAudio() { // 播放音乐this.innerAudioContext = uni.createInnerAudioContext();this.innerAudioContext.autoplay = true;this.innerAudioContext.src = '/static/message.mp3';this.innerAudioContext.onPlay(() => {console.log('开始播放');});},stopAudio(){// 停止播放音乐if (this.innerAudioContext) {this.innerAudioContext.stop()}},hangUp() { // 挂断this.stopAudio();this.sendCustomCommand(500)this.revocationPushMsg();this.logout();uni.navigateBack({delta:1})},switchOn() { // 接通this.stopAudio();this.status = 3this.sendCustomCommand(200)},changeCamera() { // 切换摄像头var instance = ZegoExpressEngine.getInstance();if (this.camera_dir == 'before') {instance.useFrontCamera(false)this.camera_dir = 'after'} else if (this.camera_dir == 'after') {instance.useFrontCamera(true)this.camera_dir = 'before'}},sendCustomCommand(msg){// 发送自定义信令var instance = ZegoExpressEngine.getInstance();instance.sendCustomCommand(this.roomID, msg, [{"userID": this.userID,"userName": this.userName}], res => {console.log(res)});},getPushCid(){// 极光推送cid获取uni.request({url: 'n-round {align-items: center;justify-content: center;width: 136rpx;height: 136rpx;border: 1rpx solid #fff;border-radius: 50%;.icon1 {width: 64rpx;height: 52rpx;}.icon2 {width: 60rpx;height: 60rpx;}}.h-text {margin-top: 10rpx;font-size: 26rpx;color: #fff;}}</style>说明:

代码中的masterSecret需要修改为极光后台的masterSecret,appKey需要修改为极光后台的appKey

view 部分:status=1 中的为主动呼叫方进入页面是初始显示内容,最重要的是 hangUp 方法,用来挂断当前邀请status=2 中的为被邀请者进入页面初始显示的内容,有两个按钮,一个hangUp挂断,一个switchOn 接听status=3中为接听后显示的内容(显示自己与对方视频画面)script 部分:最开始五行是引入相关SDK的。极光推送、即构音视频在 onLoad 中有一个判断语句,这个就是用于判断进入页面时是主动呼叫方还是被动答应方的,显示不同内容if(opt.status == 2){// 带参数 status=2时代表被呼叫this.status = parseInt(opt.status)}if(!opt.status){// 主动呼叫、需要发推送消息this.getPushCid();}sendCustomCommand 是用来在房间内发送自定义信令的,用于通知另一个人是接听了还是挂断了通话getPushCid 是获取极光推送的cid,避免重复发送推送消息(极光推送)changeCamera 切换摄像头revocationPushMsg 撤销推送(主动呼叫方挂断通话)sendPushMsg 发推送消息initZegoExpress 初始化即构音视频SDK相关,与官网demo,此处我做了小改动login 登录即构房间logout 退出即构房间publish 推流destroyEngine 销毁音视频实例removeStreams 删除流encode base64转码在App.vue中进行极光推送的初始化onLaunch: function() {console.log('App Launch')// #ifdef APP-PLUSif (uni.getSystemInfoSync().platform == "ios") {// 请求定位权限let locationServicesEnabled = jpushModule.locationServicesEnabled()let locationAuthorizationStatus = jpushModule.getLocationAuthorizationStatus()console.log('locationAuthorizationStatus', locationAuthorizationStatus)if (locationServicesEnabled == true && locationAuthorizationStatus < 3) {jpushModule.requestLocationAuthorization((result) => {console.log('定位权限', result.status)})}jpushModule.requestNotificationAuthorization((result) => {let status = result.statusif (status < 2) {uni.showToast({icon: 'none',title: '您还没有打开通知权限',duration: 3000})}})jpushModule.addGeofenceListener(result => {let code = result.codelet type = result.typelet geofenceId = result.geofenceIdlet userInfo = result.userInfouni.showToast({icon: 'none',title: '触发地理围栏',duration: 3000})})jpushModule.setIsAllowedInMessagePop(true)jpushModule.pullInMessage(result => {let code = result.codeconsole.log(code)})jpushModule.addInMessageListener(result => {let eventType = result.eventTypelet messageType = result.messageTypelet content = result.contentconsole.log('inMessageListener', eventType, messageType, content)uni.showToast({icon: 'none',title: JSON.stringify(result),duration: 3000})})}jpushModule.initJPushService();jpushModule.setLoggerEnable(true);jpushModule.addConnectEventListener(result => {let connectEnable = result.connectEnableuni.$emit('connectStatusChange', connectEnable)});jpushModule.addNotificationListener(result => {let notificationEventType = result.notificationEventTypelet messageID = result.messageIDlet title = result.titlelet content = result.contentlet extras = result.extrasconsole.log(result)this.$util.router(`/pages/public/answer?status=2`)});jpushModule.addCustomMessageListener(result => {let type = result.typelet messageType = result.messageTypelet content = result.contentconsole.log(result)uni.showToast({icon: 'none',title: JSON.stringify(result),duration: 3000})})jpushModule.addLocalNotificationListener(result => {let messageID = result.messageIDlet title = result.titlelet content = result.contentlet extras = result.extrasconsole.log(result)uni.showToast({icon: 'none',title: JSON.stringify(result),duration: 3000})})// #endif},不要忘了在最开始引入极光推送的插件

var jpushModule = uni.requireNativePlugin("JG-JPush")

官方demo的代码,直接拿过来了。。其中最重要的就是下面这段,用来监听获取推送消息的,这里如果收到推送消息自动跳转至通话页面,也就是上面status=2的状态下jpushModule.addNotificationListener(result => {let notificationEventType = result.notificationEventTypelet messageID = result.messageIDlet title = result.titlelet content = result.contentlet extras = result.extrasconsole.log(result)this.$util.router(`/pages/call/call?status=2`)});

https://juejin.cn/post/6954172658195906567如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

本文链接地址:https://www.jiuchutong.com/zhishi/310125.html 转载请保留说明!

上一篇:微擎框架破解版v2.7.7去授权一键安装纯净商业版(微擎纯净框架,无任何限制)-电脑学习网(微擎框架可以干什么)

下一篇:java中public修饰符是什么(java中public修饰什么)

  • 账面价值与计税基础一般会产生差异的是
  • 企业所得税减免所得税额计算公式
  • 房产税如何
  • 个人所得税是什么
  • 2021年白酒新政策
  • 公司户和个人户卖车的时候价格差多少
  • 企业所得税的营业成本
  • 退休职工怎么填写单位吗
  • 公司月底做账大约几天
  • 银行借款的补偿金是什么
  • 归属于母公司的净资产
  • 制造业三项费用占比行业怎么算
  • 哪些合同不需要缴纳印花税的通知
  • 社会团体收费项目有哪些
  • 计提个税会计分录怎么理解
  • 软件分几次开票怎么入账
  • 固定资产盘盈可计入
  • 员工私人车通行费能抵进项税吗
  • 全年一次性奖金计税方式
  • 建筑工程老项目时间
  • 销售商品会计凭证
  • 注册资本越大越有实力
  • 月末主营业务收入结转会计分录
  • 其他应付款转增股本
  • 分公司税率怎样确定
  • 扣缴上月税费会计分录
  • 研发支出期末列报
  • 进项为13%,销售时是否可按9%
  • 企业白条报销和采取措施
  • 污水处理增值税征收品目
  • 偿还借款利息是现金流量什么项目
  • boss直聘收费怎么这么贵
  • 暂时性差异的转回期间如何确定
  • 支付土地补偿款能以收据入账吗
  • 厂房租金计入什么费用部门
  • windows11 缩放
  • 减税期间还能开3%的票吗
  • 预收账款调增应纳税所得额
  • php 生成缩略图
  • antvl7
  • 委托外发加工会计分录
  • 利息收入包括
  • 没有初级会计证可以从事会计工作吗
  • 税务现金流量表填错了怎么办
  • 公司有残疾人如何申报残保金
  • 个税手续费返还增值税申报表怎么填
  • 个体工商户开具房屋租赁发票
  • 二手车如何计提折旧费
  • 应交税金等于销项减进项吗
  • 公司注销前如何先注销工会
  • 研发废料收入会计科目
  • 员工迟到扣款如何做账
  • 应收账款周转率越高越好吗
  • 固定资产原值减少后如何计提折旧
  • 如何计算更新改造后的入账价值
  • 软件行业成本如何归集
  • 固定资产抵扣比例
  • 老会计带新手教学真账实操
  • 应收账款增加说明企业什么
  • c# mysql实例
  • sqlserver表死锁
  • 开机f8显示英文字母
  • dx12不支持dx11解决办法
  • 32位win7安装
  • win7声音方案下载
  • 在linux操作系统中
  • shell案例讲解
  • 在unity中单例的主要作用
  • 简单好用的记账app
  • bootstrap按钮图标
  • node.js的概念
  • Unity3D游戏开发标准教程
  • javascript的简介
  • js操作对象的方法
  • jquery增删改查方法
  • jquery事件委托原理
  • 公司车辆购置税怎么做账
  • 个人所得税缴纳标准2024年
  • 上海《居住登记凭证》
  • 车船税完税证明查询官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设