微信小程序 实现实时音视频与 uniapp 转码成微信小程序 实现实时音视频两者是一样的,区别仅仅是一个是原生小程序一个是 uniapp 转码成小程序

本文使用uniapp转码成小程序实现音视频通话

前提

  • 确保微信开发平台 =》开发 =》开发管理 =》接口设置实时播放音视频流实时录制音视频流开启

  • 线上版本配置 anyRTC 相关的服务器域名(本地调试可设置不校验域名)
    如图所示:小程序原生本地设置不校验域名

  • uniapp 转小程序可以在小程序编辑器中配置也可在 uniapp 的 manifest.json 中配置

代码逻辑

1. 引入anyRTC 小程序版的实时音视频 SDK

2. 初始化 SDK

3. 加入相同的频道并将自己的视频流发布出去

4. 根据相关事件回调处理相关逻辑

必须填写 appid (在 anyRTC 控制台的项目管理中获取)
用户 uid 类型必须为字符串并且不重复
只有加入同一频道房间(类型必须为字符串)才可进行通话

代码实现

1. npm 引入 ar-rtc-miniapp

   ```jsnpm i ar-rtc-miniapp```

2. 封装 rtc.js

  ```javascript// 引入 RTCimport ArRTC from "ar-rtc-miniapp";console.log("ArRTC 版本", ArRTC);// 定义let Store = {appId: '',// 本地用户uiduserId: "",// 频道房间channelId: "",// RTC 客户端rtcClient: null,// 本地录制地址(小程序特有推流)livePusherUrl: "",// 远端播放(小程序特有拉流)livePlayerUrl: "",};// 初始化 RTCconst InItRTC = async (info) => {Store = Object.assign(Store, info)// 创建RTC客户端 Store.rtcClient = new ArRTC.client();// 初始化await Store.rtcClient.init(Store.appId);// 已添加远端音视频流Store.rtcClient.on('stream-added', rtcEvent.userPublished);// 已删除远端音视频流Store.rtcClient.on('stream-removed', rtcEvent.userUnpublished);// 通知应用程序发生错误Store.rtcClient.on('error', rtcEvent.error);// 更新 Url 地址Store.rtcClient.on('update-url', rtcEvent.updateUrl);// 远端视频已旋转Store.rtcClient.on('video-rotation', rtcEvent.videoRotation);// 远端用户已停止发送音频流Store.rtcClient.on('mute-audio', rtcEvent.muteAudio);// 远端用户已停止发送视频流Store.rtcClient.on('mute-video', rtcEvent.muteVideo);// 远端用户已恢复发送音频流Store.rtcClient.on('unmute-audio', rtcEvent.unmuteAudio);// 远端用户已恢复发送视频流Store.rtcClient.on('unmute-video', rtcEvent.unmuteAudio);return}// RTC 监听事件处理const rtcEvent = {// RTC SDK 监听用户发布userPublished: ({uid}) => {console.log("RTC SDK 监听用户发布", uid);if (Store.Mode == 0) {uni.showLoading({title: '远端加载中',mask: true,})}// 订阅远端用户发布音视频Store.rtcClient.subscribe(uid, (url) => {console.log("远端用户发布音视频", url);// 向视频页面发送远端拉流地址uni.$emit("livePusherUrlEvent", {livePlayerUrl: url});}, (err) => {console.log("订阅远端用户发布音视频失败", err);})},// RTC SDK 监听用户取消发布userUnpublished: ({uid }) => {console.log("RTC SDK 监听用户取消发布", uid);},// 更新 Url 地址updateUrl: ({uid,url}) => {console.log("包含远端用户的 ID 和更新后的拉流地址", uid, url);// 向视频页面发送远端拉流地址uni.$emit("livePusherUrlEvent", {livePlayerUrl: url});},// 视频的旋转信息以及远端用户的 IDvideoRotation: ({uid,rotation}) => {console.log("视频的旋转信息以及远端用户的 ID", uid, rotation);},// 远端用户已停止发送音频流muteAudio: ({uid}) => {console.log("远端用户已停止发送音频流", uid);},// 远端用户已停止发送视频流muteVideo: ({uid}) => {console.log("远端用户已停止发送视频流", uid);},// 远端用户已恢复发送音频流unmuteAudio: ({uid}) => {console.log("远端用户已恢复发送音频流", uid);},// 远端用户已恢复发送视频流unmuteAudio: ({uid}) => {console.log("远端用户已恢复发送视频流", uid);},// 通知应用程序发生错误。 该回调中会包含详细的错误码和错误信息error: ({code,reason}) => {console.log("错误码:" + code, "错误信息:" + reason);},}// RTC 内部逻辑const rtcInternal = {// 加入频道joinChannel: () => {console.log("加入频道", Store.rtcClient);return Store.rtcClient.join(undefined, Store.channelId,      Store.userId, () => {// uni.showModal({//   title: '加入频道'// })console.log("加入频道成功", Store.rtcClient);// 发布视频rtcInternal.publishTrack();}, (err) => {console.log("加入频道失败");});
},
// 离开频道
leaveChannel: (sendfase = true) => {console.log("RTC 离开频道", Store);},
// 发布本地音视频
publishTrack: () => {Store.rtcClient.publish((url) => {console.log("发布本地音视频", url);// 本地录制地址(小程序特有推流)Store.livePusherUrl = url;// 向视频页面发送本地推流地址uni.$emit("livePusherUrlEvent", {livePusherUrl: url});}, ({code,reason}) => {console.log("发布本地音视频失败", code, reason);})},}module.exports = {InItRTC,rtcInternal,}```

3. 页面调用

  • 页面
     <!-- 本地录制 --><live-pusher v-if="livePusherUrl" :url="livePusherUrl" mode="RTC" autopush @statechange="statechange" @error="error" style="height: 100%;width: 100%;" /><!-- 远端播放 --><live-player v-if="livePlayerUrl" :src="livePlayerUrl" mode="RTC" autoplay @statechange="statechange" style="height: 100%;width: 100%;position: absolute;z-index: -100;" />
  • 页面逻辑
  import ArRTC from "../rtc.js";export default {data() {return {// 可用宽度windowWidth: "",// 本地录制地址(小程序特有推流)livePusherUrl: "",// 远端播放(小程序特有拉流)livePlayerUrl: "",}},async onLoad() {// 初始化 RTCawait ArRTC.InItRTC({appId: "------------anyRTC 控制台项目管理中获取"userId: "----------------自定义",channelId: "----------自定义"});// 加入频道await ArRTC.rtcInternal.joinChannel();const _this = this;// // 推拉流变更uni.$on("livePusherUrlEvent", (data) => {if (data.livePusherUrl) {_this.livePusherUrl = data.livePusherUrl}if (data.livePlayerUrl) {_this.livePlayerUrl = data.livePlayerUrl}});// 获取页面宽度try {const res = uni.getSystemInfoSync();this.windowWidth = res.windowWidth;} catch (e) {// error}},onUnload() {// uni.$off()},methods: {// 组件状态statechange(e) {console.log('组件状态:', e)},// 组件错误error(e) {console.log("组件错误", e);}}}

uni-app技术分享| uni-app转小程序_实时音视频相关推荐

  1. 小程序如何实时音视频聊天

    1.先在项目里引入声网(https://www.agora.io/cn)的SDK 可以直接下载下来放入自己项目的库文件里面 下载下来的SDK 文件 更名为mini-app-sdk-production ...

  2. 微信小程序仿抖音视频

    微信小程序仿抖音视频 使用轮播图实现视频滑动效果. wxml 部分 <view class="video-contain"><!-- 自定义头部 -->&l ...

  3. 微信小程序集成实时音视频通话功能

    微信小程序集成实时音视频通话功能 背景 在项目的开发当中,很多时候,我们会有音频.视频通话的需求,但是一般都不会自己来写,所以我们就需要借助第三方来实现.尤其是这次的项目开发当中,需要在微信小程序当中 ...

  4. LiveVideoStack线上分享第四季(十二):实时音视频抗丢包的实践

    12月26日 19:30,LiveVideoStack线上分享第四季,第十二期,我们邀请到了好视通 音视频开发工程师 何永德分享"好视通"如何通过FEC.NACK .带宽自适应等技 ...

  5. LiveVideoStackCon讲师热身分享 ( 十五 ) —— 教育场景下的实时音视频解决方案

    LiveVideoStackCon 2018音视频技术大会是每年的多媒体技术人的盛宴,为了让参会者与大会讲师更多互动交流,我们推出了LiveVideoStackCon讲师热身分享第一季,在每周四晚19 ...

  6. 如何在小程序上增加音视频?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 作者:常青|腾讯视频云终端技术负责人 2017年第四季度,腾讯云终端团队和微信合作,将腾讯云多年积 ...

  7. 小程序类似抖音视频整屏切换

    更新 现在已经更新了github地址和效果gif,可在文章最后查看.如果我的代码对你有用,请帮我随手star一下. 需求 最近在项目中需要加一个功能,在小程序中将已有的短视频功能,按照抖音的方式来浏览 ...

  8. 微信小程序 live-player 实时音视频播放 组件

    完整微信小程序(Java后端) 技术贴目录清单页面(必看) 实时音视频播放(v2.9.1 起支持同层渲染).相关api:wx.createLivePlayerContext 暂只针对国内主体如下类目的 ...

  9. 【愚公系列】2022年04月 微信小程序-多人音视频对话

    文章目录 前言 一.多人音视频对话 1.wxml 2.js 前言 微信小程序开发多人音视频对话首先得去小程序管理后台,「开发」-「接口设置」中自助开通该组件权限. 相关属性: 一级类目/主体类型 二级 ...

最新文章

  1. qtp9.2测试java_QTP的使用举例说明
  2. leetcode 146.缓存机制(中等)
  3. 大话设计模式(十三 有了门面,程序员的程序会更加体面!)
  4. Virtualenv系列(一):使用Virtualenv搭建python虚拟环境
  5. Spring MVC : 概念模型 HandlerMethod(转载)
  6. win10锁屏c语言,怎样在Win10锁屏界面打开任意应用程序?
  7. Docker 安装zookeeper
  8. TensorFlow tf.feature_column
  9. coin3D中导入机器人模型
  10. 电子技术实训——多功能数字钟的设计
  11. 联想9439微型计算机拆机,e43a 拆解文章.docx
  12. 【基于Proteus 8 Professional和Keil uVision5简单共阴极数码管点亮】
  13. python绘图在图中添加标记
  14. Direct3D9初始化-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(6)
  15. 飞秋2013设置后无法保存配置问题
  16. bootstrap组件——导航条
  17. 手机卫星定位系统_手机怎样连接北斗导航?一打开这个设置,马上连接,很简单...
  18. Unity将当前场景渲染到图片上并导出图片(本地/服务器)
  19. Axure RP Extension for Chrome 安装插件
  20. Unity3D灯光详解

热门文章

  1. java sse spring_【SpringBoot WEB 系列】SSE 服务器发送事件详解
  2. 【C++】拷贝构造函数的调用时机
  3. chain.doFilter详解
  4. oracle 10046事件查看,使用oracle的10046事件跟踪SQL语句
  5. android7.12新功能,带来七大新功能 一加7T系列出厂即搭载Android 10
  6. 十、路由信息协议RIP(Routing Information Protocol)
  7. 考虑下行链路的蜂窝网络中存在多个D2D通信对和多个蜂窝用户,它们共享相同的频率资源并且蜂窝用户为主用户
  8. LCD液晶屏的使用小tips
  9. 台式计算机开机黑屏,台式电脑开机后出现黑屏,按f2后才能开机
  10. JS获取当前时间(年月日时分秒)