位置: 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修饰什么)

  • 苹果手机小圆点怎么设置只用一个(苹果手机小圆点怎么设置)(苹果手机小圆点的功能)

    苹果手机小圆点怎么设置只用一个(苹果手机小圆点怎么设置)(苹果手机小圆点的功能)

  • 重装系统电脑里的东西还在吗(重装系统电脑里的东西怎么备份)

    重装系统电脑里的东西还在吗(重装系统电脑里的东西怎么备份)

  • 苹果icloud空间不足怎么清理(苹果iCloud空间不足怎么办)

    苹果icloud空间不足怎么清理(苹果iCloud空间不足怎么办)

  • 抖音钻石卡怎么搞(抖音里的抖音钻卡怎么集)

    抖音钻石卡怎么搞(抖音里的抖音钻卡怎么集)

  • Word怎么删掉页眉(Word怎么删掉页眉页脚)

    Word怎么删掉页眉(Word怎么删掉页眉页脚)

  • 下载了钉钉为什么还显示未激活(下载了钉钉为什么安装不了)

    下载了钉钉为什么还显示未激活(下载了钉钉为什么安装不了)

  • 微信按住说话如何设置(微信按住说话如何转文字)

    微信按住说话如何设置(微信按住说话如何转文字)

  • 解释程序产生了目标程序而汇编程序(解释程序出现问题为什么)

    解释程序产生了目标程序而汇编程序(解释程序出现问题为什么)

  • 华为荣耀可以以旧换新吗(华为荣耀以前手机自带的健身励志视频)

    华为荣耀可以以旧换新吗(华为荣耀以前手机自带的健身励志视频)

  • 手机充电慢耗电快是什么原因(手机充电慢耗电快怎么解决华为)

    手机充电慢耗电快是什么原因(手机充电慢耗电快怎么解决华为)

  • 华为无线耳机怎么接电话(华为无线耳机怎么使用)

    华为无线耳机怎么接电话(华为无线耳机怎么使用)

  • 苹果7系统能分屏吗(苹果7能分身吗)

    苹果7系统能分屏吗(苹果7能分身吗)

  • 手机串号怎么看(手机串号怎么看手机激活时间)

    手机串号怎么看(手机串号怎么看手机激活时间)

  • qq音乐怎么设置卡2的铃声(qq音乐怎么设置铃声)

    qq音乐怎么设置卡2的铃声(qq音乐怎么设置铃声)

  • 手机号绑定的app怎么查(如何注销手机号绑定的app)

    手机号绑定的app怎么查(如何注销手机号绑定的app)

  • ipadmini5实体店什么时候可以买(ipad 2020 实体店)

    ipadmini5实体店什么时候可以买(ipad 2020 实体店)

  • 小红书怎么查看订单(小红书怎么查看通讯录好友)

    小红书怎么查看订单(小红书怎么查看通讯录好友)

  • echarts 横纵坐标设置(echarts纵坐标加单位)

    echarts 横纵坐标设置(echarts纵坐标加单位)

  • 大雪山上的花鼠,日本北海道 (© plainpicture/Score. by Aflo/Takao Onozato/Aflo)(雪山上的老鼠)

    大雪山上的花鼠,日本北海道 (© plainpicture/Score. by Aflo/Takao Onozato/Aflo)(雪山上的老鼠)

  • 10分钟学会python对接【OpenAI API篇】(10分钟学会万用表)

    10分钟学会python对接【OpenAI API篇】(10分钟学会万用表)

  • 自动驾驶感知——激光雷达基本概念|激光雷达点云|激光雷达的标定(自动驾驶感知决策控制)

    自动驾驶感知——激光雷达基本概念|激光雷达点云|激光雷达的标定(自动驾驶感知决策控制)

  • vant 的表单校验(vant表单验证并提交表单)

    vant 的表单校验(vant表单验证并提交表单)

  • 软件退税收入会计分录
  • 增值税加计扣除怎么做账
  • 公司章程在工商局
  • 注销股本对所有股票影响
  • 社保基数与工资不符
  • 专项科研经费
  • 应收账款补提坏账是什么意思
  • 总公司要合并分公司报表吗
  • 电子增值普通发票经营范围呢免费吗
  • 一般纳税人哪些项目可以简易征收
  • 个人所得税申报退税的条件
  • 食堂外包服务费可以抵扣进项税吗
  • 外贸出口支付方式
  • 已知不含税金额和增值税如何计算税率
  • 个人所得税适合月度税率表有哪些
  • 现金流量表怎么做
  • 物流公司油卡怎么抵税的
  • mac怎么修改图片格式jpg
  • win7电脑怎么开
  • 积极的财政政策有哪些
  • 建筑业增值税会计核算是哪门课的内容
  • 个人以房产投资一人有限公司时,房产要开发票吗
  • psdrvcheck.exe - psdrvcheck是什么进程 有什么用
  • PHP:xml_set_processing_instruction_handler()的用法_XML解析器函数
  • php输出当月日历
  • 松木山在哪
  • 劳务公司怎么做进项
  • 劳务派遣公司账目如何做
  • 用php做计算
  • 汽车因质量原因泡水能退车吗
  • thinkphp整合layuiadmin
  • 矿产资源补偿费计入管理费用吗
  • react keepalive
  • 最全面的心脏检查怎么做
  • 应收账款与企业价值的关系
  • 提取现金准备发放工资
  • 怎么保证发票是真的
  • 个体工商户该如何开发票
  • 稳岗补贴钱给谁
  • 上年科目记错如何更正
  • 货物入库会计分录怎么做
  • 用税盘开发票税费扣除是怎么回事?
  • 出口生产型企业
  • 暂估库存商品计算怎么算
  • mongodb4
  • 管理人员工资结构图
  • 开票机号填错了怎么办
  • 附加税减免额怎么算
  • ipv6的设置
  • 无形资产的意思是
  • 增值税专用发票的税率是多少啊
  • 劳务公司到外地需要交的税
  • 差旅费科目设置
  • 预存话费发票能报销吗
  • 行政单位年终奖的相关发放规定
  • 付给农民的土地使用费
  • 集团公司对子公司总经理的绩效考核
  • 跨年度费用如何计算
  • 提供加工劳务计入什么科目
  • 产品销售成本计算表
  • 数据库 mysql
  • centos mtr
  • win7系统换桌面
  • win10正版系统禁止设置密码
  • 电脑开机出现ntfs
  • 平板电脑截图
  • linux系统基本操作命令
  • linux与windows有哪些主要区别
  • win7显示桌面的组合键
  • js require()
  • javascript+
  • [置顶]津鱼.我爱你
  • jsforeach循环遍历数组
  • div +css
  • 批处理技术有哪些
  • 安卓模拟器比手机快吗
  • js设置图片大小
  • python 电话号码
  • 合肥税务网几时成立的
  • 纳税信用b级可以贷款多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设