uni-app技术分享|uni-app转小程序_实时音视频(uni app 视频教程)

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

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

前提

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

uni-app技术分享|uni-app转小程序_实时音视频(uni app 视频教程)

  • 线上版本配置 anyRTC 相关的服务器域名(本地调试可设置不校验域名)

如图所示:小程序原生本地设置不校验域名

uni-app技术分享|uni-app转小程序_实时音视频(uni app 视频教程)

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

uni-app技术分享|uni-app转小程序_实时音视频(uni app 视频教程)

代码逻辑

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

2. 初始化 SDK

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

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

必须填写 appid (在 anyRTC 控制台的项目管理中获取)

用户 uid 类型必须为字符串并且不重复

只有加入同一频道房间(类型必须为字符串)才可进行通话

代码实现

1. npm 引入 ar-rtc-miniapp

npm i ar-rtc-miniapp

2. 封装 rtc.js

// 引入 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 RTC 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转小程序_实时音视频(uni app 视频教程)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年4月7日 上午9:37
下一篇 2023年4月7日 上午9:53

相关推荐

  • 科研项目数据统计是做什么的

    科研项目数据统计是科研项目中非常重要的一环,其目的是对科研项目的数据进行收集、分析和总结,为后续的研究和决策提供支持。 在科研项目中,数据通常来自于各种不同的来源,如实验室实验、问…

    科研百科 2024年8月11日
    25
  • 科研项目强化过程管控

    科研项目强化过程管控 科研项目是科学技术发展的重要推动力量,而过程管控则是确保项目质量和效率的关键。在科研项目中,强化过程管控可以帮助我们更好地控制项目进展,提高项目的成功率和研究…

    科研百科 2024年11月15日
    0
  • u盘管理app(管理u盘的软件)

    管理u盘的软件 随着数字技术的发展,u盘已经成为人们日常生活中不可或缺的一部分。无论是存储文件还是传输数据,u盘都扮演着非常重要的角色。然而,随着u盘的使用频率的增加,管理u盘的软…

    科研百科 2024年6月3日
    34
  • 江苏齐邦建设监理有限公司违反《苏州市建筑市场管理办法》被处罚

      6月28日,常熟市住房和城乡建设局作出常住建罚决﹝2022﹞41号处罚决定书。信用中国(江苏苏州)官网载明:江苏齐邦建设监理有限公司违反《苏州市建筑市场管理办法 》第三十条第二…

    科研百科 2022年9月6日
    127
  • 研究性课题结题报告怎么写(研究性课题结题报告怎么写高中生)

      每个研究项目课题,都需要反映课题研究结果以何种方式呈现,这往往对课题的质量起着至关重要的作用。要写出课题研究成果的正确形式,需要先知道包含哪些形式,这样我们才能根据自己的研究情…

    科研百科 2024年4月8日
    48
  • 科研项目管理PPT

    科研项目管理PPT科研项目管理PPT 近些年,深圳一位妈妈,在每个月回来与老公和家里人交流时,常常感慨自己的未来。她说:“老公不知道我的想法,也不知道为啥。”这位妈妈非常希望儿子上…

    科研百科 2024年11月27日
    0
  • 科研项目预期价值怎么写

    科研项目预期价值怎么写 科研项目的预期价值是衡量一个项目成功与否的重要标准。一个具有预期价值的科研项目能够为学术界和工业界带来巨大的贡献,推动科学技术的发展。在撰写科研项目预期价值…

    科研百科 2024年10月22日
    3
  • 经费审批报销制度

    经费审批报销制度 经费审批报销制度是组织管理中非常重要的一环,它关系到整个组织的财务运作和管理。一个好的经费审批报销制度不仅能够提高工作效率,还能够保障组织的财务安全。本文将介绍经…

    科研百科 2024年8月20日
    24
  • 科研项目担任角色

    科研项目担任角色 科研项目是科学研究的重要组成部分,它为科学家们提供了一种创造性和挑战性的方式来探索未知的领域。在科研项目中,科学家们通常会承担一些特定的角色,这些角色可能包括研究…

    科研百科 2024年10月12日
    13
  • 项目管理工具网站

    项目管理工具网站: 让项目管理工作变得高效 随着数字化时代的到来,项目管理已经成为了现代企业必不可少的一部分。而项目管理工具网站则是实现项目管理的重要平台。一个好的项目管理工具网站…

    科研百科 2024年7月23日
    25