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

  • vivo怎么退出原子桌面(vivo怎么退出原子组件)

    vivo怎么退出原子桌面(vivo怎么退出原子组件)

  • 美团众包要满100才能提现吗(美团众包要满几岁才能跑)

    美团众包要满100才能提现吗(美团众包要满几岁才能跑)

  • 哔哩哔哩怎么换绑手机号(哔哩哔哩怎么换实名认证)

    哔哩哔哩怎么换绑手机号(哔哩哔哩怎么换实名认证)

  • ios13可以隐藏运营商吗(ios13应用隐藏)

    ios13可以隐藏运营商吗(ios13应用隐藏)

  • 华为荣耀20青春版有膜吗(华为荣耀20青春版多少钱一台)

    华为荣耀20青春版有膜吗(华为荣耀20青春版多少钱一台)

  • 快手如何自动识别字幕(快手怎么设置自动识别字幕)

    快手如何自动识别字幕(快手怎么设置自动识别字幕)

  • 美团众包单子少怎么办(最近美团众包单子少)

    美团众包单子少怎么办(最近美团众包单子少)

  • qq字符gem是什么意思(qq字符gem是什么关系)

    qq字符gem是什么意思(qq字符gem是什么关系)

  • 苹果有应用分身吗(苹果手机应用可以分身吗)

    苹果有应用分身吗(苹果手机应用可以分身吗)

  • 荣耀10乱跳屏的原因(荣耀十手机屏幕老是自己跳)

    荣耀10乱跳屏的原因(荣耀十手机屏幕老是自己跳)

  • 微信pc版安装到手机(微信pc端安装包)

    微信pc版安装到手机(微信pc端安装包)

  • ipadpro2017是第几代(ipad pro2017是什么型号)

    ipadpro2017是第几代(ipad pro2017是什么型号)

  • 苹果手机拨号键盘怎么输入字母(苹果手机拨号键查询序列号)

    苹果手机拨号键盘怎么输入字母(苹果手机拨号键查询序列号)

  • 三星s20和s20+的区别(三星s20和s20+的区别参数)

    三星s20和s20+的区别(三星s20和s20+的区别参数)

  • qq音乐内测资格有什么用(qq音乐内测资格是每个人都有吗)

    qq音乐内测资格有什么用(qq音乐内测资格是每个人都有吗)

  • 苹果5sa1518是什么版本(苹果5sa1457是什么版本)

    苹果5sa1518是什么版本(苹果5sa1457是什么版本)

  • windows的剪贴板是用于临时存放信息的什么(windows的剪贴板是什么中的一块区域)

    windows的剪贴板是用于临时存放信息的什么(windows的剪贴板是什么中的一块区域)

  • 快手点赞达到上限怎么办(快手点赞赞多少就上限了)

    快手点赞达到上限怎么办(快手点赞赞多少就上限了)

  • 耳机漏音怎么解决(耳机漏音怎么办)

    耳机漏音怎么解决(耳机漏音怎么办)

  • 魅族16s怎么一键锁屏(魅族16s一键锁屏)

    魅族16s怎么一键锁屏(魅族16s一键锁屏)

  • 如何申请微信号不绑定手机(手机如何申请微信号)

    如何申请微信号不绑定手机(手机如何申请微信号)

  • 苹果xr双卡怎么切换(苹果xr双卡怎么设置蜂窝数据)

    苹果xr双卡怎么切换(苹果xr双卡怎么设置蜂窝数据)

  • 苹果11pro max是双卡吗(苹果11pro Max是双扬声器吗)

    苹果11pro max是双卡吗(苹果11pro Max是双扬声器吗)

  • 手写带拼音的怎么设置(手写打字带拼音字母)

    手写带拼音的怎么设置(手写打字带拼音字母)

  • 苹果系统怎么修改IP地址 Mac修改IP地址图文教程(苹果系统怎么修改开机密码)

    苹果系统怎么修改IP地址 Mac修改IP地址图文教程(苹果系统怎么修改开机密码)

  • tracert命令的用法教程(tracert命令的用法)

    tracert命令的用法教程(tracert命令的用法)

  • 事件循环(Event Loop)

    事件循环(Event Loop)

  • 商品房价格居高不下的原因
  • 待办事项没有印章怎么办
  • 非税收入包括哪些来源
  • 实际发的工资跟个人所得税不一样
  • 外贸企业账务处理及报税
  • 企业购买产品
  • 赠品不开票如何做账
  • 贴现率和折现率相等吗
  • 进项票错了但是销项票开出去了怎么办
  • 企业收回以前注销时的坏账准备余额怎么处理?
  • 股权投资和债权投资的风险
  • 银行按揭方式销售开发产品
  • 个体工商户不经营会自动注销吗
  • 建设工程的停工损失包括哪些内容
  • 其他业务支出借方表示什么成本数额
  • 汇算清缴需要多久
  • 产生的信息服务有哪些
  • 发行长期债券会计分录例题
  • 航天发票上传不成功怎么手动上传
  • 税控盘证书密码一天可以输几次
  • 应收账款周转率高好还是低好
  • 小规模纳税人废品站卖废品发票开什么项目
  • 金税盘初始密码忘记了怎么办
  • 1697509246
  • 红利抵免的用法是什么
  • 车间管理人员工资记什么费用
  • 笔记本电脑的触摸板怎么用右键
  • 腾讯手游助手怎么卸载
  • 会计主要做些啥
  • 原材料进口关税计入成本吗
  • u盘装系统?
  • 以银行存款支付上述材料运费480元
  • 电子缴税回单在哪里打印
  • system占用cpu过高怎么解决
  • 收到客户预付的货款的会计分录
  • 期权能套现吗
  • 免征的增值税账务处理
  • element html
  • web攻防之业务安全实战指南
  • 个人所得税零报税怎么报
  • php获取开始与结束的函数
  • runas命令详解
  • 商场返点怎么核算
  • sqlserver数据库锁表如何解锁
  • 增值税抵扣凭证怎么做
  • 公司收到社保局的提醒函怎么办
  • 承租方支付的租房税款计入哪个科目
  • 等线支付给劳务派遣单位的工资怎么做账?
  • 为什么要加大研发投入
  • 虚购发票进项税怎么处理
  • 劳务税可以抵扣企业税比例
  • 工程结算价超过合同价10%
  • 台账和明细账有什么区别
  • 购买的办公用品需要入库出库吗
  • 供货商做产品配送怎么做
  • 其他非流动资产包括哪些
  • SQL Server 2012 sa用户登录错误18456的解决方法
  • xp系统自带浏览器打不开网页
  • win7系统怎么给C盘扩容
  • win7系统怎么开wifi热点
  • awk结果输出到文件
  • win8休眠如何唤醒
  • Windows 8 Modern Apps 网络隔离如何解除?
  • RedHatLinux AS3中APACHE+SendMail+OpenWebMail整合
  • 在linux系统中,用来存放系统所需要的配置文件
  • win10系统安全中心在哪
  • Android OpenGL ES(二)----平滑着色
  • js+html
  • vim tagbar
  • vuecli脚手架是干什么的
  • Android--VideoPlay--视频播放器
  • 安卓模拟器比手机快吗
  • python gensim
  • js判断iframe是否加载完成
  • 科技型中小企业认定有效期
  • 国家税务总局现任局长
  • 交通运输业的税率9%和13%
  • 个人所得税选择那种方式更好
  • 张某每月从单位取得工资15000
  • 财务会计制度及核算软件备案怎么填
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设