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

  • 收购未税矿产品代扣代缴的资源税计入成本吗
  • 赠送给客户的库存商品怎么做账
  • 应税所得率表
  • 应交土地使用税和应交城镇土地使用税一样吗
  • 个人所得税申报截止时间
  • 业务招待费扣除标准营业收入包括
  • 分公司可以成为单位犯罪的主体吗
  • 固定资产计入了主营业务成本,该怎么办
  • 未达起征点是什么
  • 完税证明必须本人办理吗
  • 企业所得税研发费用怎么填
  • 个体工商户需要缴纳哪些税
  • 应付账款以前年度挂错
  • 物业公司销售门禁卡属于什么收入
  • 电子承兑银行承兑
  • 企业购进废旧厂房的分录
  • 境外企业分红怎么交税
  • 网上申请的增值税专用纸质发票收到后如何确认已收到
  • 一般纳税人既有批发零售又有不动产租赁
  • 普通发票收款方账号信息错了可以正常报销吗
  • 固定资产清查盘亏账务处理
  • 个人独资企业需要缴纳哪些税种
  • 金蝶资产减值损失取数计算公式
  • 上个月印花税少计提了怎么办
  • 收购发票使用范围税收规定
  • 包装物及其押金的消费税的注意事项
  • 商贸公司怎么结算成本
  • 进项税发票未认证
  • 合同资产和合同负债属于什么科目
  • 财产转让所得怎么申报个税
  • 默认网关不可用频繁掉线
  • mac电脑修改dns
  • 销售商品售后回购
  • 【Fiddler Everywhere】史上最强抓包工具(安装 修改教程)
  • kcleaner.exe是什么
  • 月入2万的10个小生意低成本
  • extract php函数
  • vue-router跳转
  • print-js
  • 彩石湖公园门票
  • 购货返利
  • php实现分页显示
  • yolov5使用
  • mlp是啥啊
  • php红包源码
  • thinkphp框架怎么用
  • 现金流量风险怎么解决
  • mysql中desc什么意思
  • sql server应用
  • 让渡资产使用权属于收入吗
  • 金税盘维护费应该在那个表填写
  • 外贸企业退税怎么申报
  • 电子承兑过期超过10天就无法转让吗
  • 红冲发票怎么写分录
  • 成品油预付卡销售*成品油卡 怎么入账
  • 什么是长期的
  • 招标代理服务费应该由谁支付
  • 企业实收资本怎么计算
  • 什么是电子发票如何打印报销
  • 私企公转私出纳有责任吗
  • sqlserver将查询结果作为临时表
  • mac如何强制退出微信
  • avc用什么打开
  • win系统文件在哪里
  • Win10 Mobile 10586.11已经在慢速通道推送 着离正式版更近了
  • 怎么在mac上查找iphone
  • 安卓炫酷壁纸
  • Python 中urls.py:URL dispatcher(路由配置文件)详解
  • webservice规范
  • android sdkmanager
  • Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
  • 请不要重复犯我在学习Python和Linux系统上的错误
  • javascript基础笔记
  • jQuery AJAX timeout 超时问题详解
  • javascript书写基本规范
  • 房产税从价计征税率
  • 商业保险扣除限额企业所得税
  • 会议服务的服务定位是什么
  • 关于个体户的个人所得税的最新政策法规
  • 青岛市地方税务局关于发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设