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月9日
    33
  • 协同办公系统功能(协同办公系统的平台)

    协同办公系统平台: 实现高效协作的关键 协同办公系统平台是一种可以帮助企业实现高效协作的工具。在现代企业中,团队合作已成为一项不可或缺的任务,而协同办公系统平台正是帮助团队成员更好…

    科研百科 2024年8月28日
    23
  • c 项目管理系统源码

    C 项目管理系统源码: 一个基于 Eclipse 的开源项目管理系统 随着软件开发的日益复杂,开发团队需要一种高效的项目管理工具来帮助他们管理项目进度、资源、风险等信息。在这种情况…

    科研百科 2024年12月19日
    0
  • 蓝创智慧党建系统8大平台解决党建难点助力党务工作建设(蓝创星智慧党建)

    关于党建工作的难点和痛点之前我们也给大家剖析过,如何让党建难点和痛点得到解决?今天我们蓝创科技智慧党建云平台开发部门就跟大家分享下蓝创智慧党建系统8大平台,轻松解决党建难点,助力党…

    科研百科 2023年11月16日
    121
  • 海洋牧场科研项目专员

    海洋牧场科研项目专员 随着全球气候变化和海洋污染的加剧,海洋牧场成为了一个非常重要的生态系统。海洋牧场是指海洋中的人工创建的牧场,通过人工手段,在海洋中创建一个稳定的生态系统,以保…

    科研百科 2025年3月12日
    0
  • 军品科研项目推广建议

    军品科研项目推广建议 随着国家军事实力的不断增强,军品科研项目成为了国家科技创新的重要领域之一。作为军品科研项目的推广者,我们需要具备深入的市场研究分析能力和专业的推广营销策略。以…

    科研百科 3天前
    2
  • 新时期加强物业企业党建工作的几点建议(物业企业党建十条举措)

    自1981年3月10日我国深圳第一家物业公司成立以来,经过39年左右的发展,目前物业服务企业已经超过6万多家,物业服务在全国各地蓬勃发展,取得了一定成绩,为国家的发展,社会的稳定,…

    科研百科 2024年6月26日
    160
  • 项目管理系统 必要性

    项目管理系统的必要性 随着现代商业的日益增长,项目管理水平已经成为了企业成功的关键因素之一。项目管理系统可以帮助企业更好地管理项目进度、成本、质量、资源等方面,提高项目管理的效率和…

    科研百科 2025年1月22日
    1
  • 泉州重点项目管理系统

    泉州重点项目管理系统:助力泉州城市快速发展 近年来,泉州这座城市在经济发展和城市建设方面取得了巨大的成就。其中,重点项目管理系统作为城市快速发展的重要支撑,发挥了重要作用。本文将介…

    科研百科 2024年12月31日
    2
  • 会议管理系统 价位

    会议管理系统价位 随着企业组织规模的不断扩大和业务的不断拓展,会议管理已经成为了企业组织中不可或缺的一部分。会议管理系统是一种可以帮助企业高效地管理会议、提高会议效率和质量的工具。…

    科研百科 2025年1月4日
    0