之前,我们已经介绍了即构小程序直播组件的功能、适用类目以及组件的集成方法,可以戳下面查看:

即构小程序组件功能及适用类目

即构小程序组件的集成指引

小程序直播功能可应用的场景非常广泛,例如秀场直播、在线直播课、电商直播卖货等。针对不同的场景需求,即构小程序直播组件提供了个性化的功能,例如针对电商直播场景,提供了音视频直播、商家后台管理、IM互动、商品列表推送、美颜、后台管理等功能。

下面我们来看,基于即构直播小程序组件,如何从零实现目前大热的电商直播功能。

一、初始化SDK

集成 SDK 后,若想使用 SDK 的功能,还需要对 SDK 进行初始化操作。


// 声明变量
let { ZegoExpressEngine } = require("../lib/ZegoExpressMiniProgram-1.6.0");
let zg;// 初始化实例
zg = new ZegoExpressEngine(this.data.appID, this.data.server);// 配置必要参数
zg.setLogConfig({logLevel: 'debug',remoteLogLevel: 'debug',logURL: this.data.logUrl
})

如果要实现一个完整的直播功能,还需要处理 SDK 的相关回调。回调只要在 SDK 生命周期内设置一次即可。

二、登录房间

1、设置房间相关回调

登录房间之前需要设置房间相关回调,便于登录房间成功后接收房间相关的事件通知,比如处理因网络中断退出房间等问题。

以房间状态回调为例:

zg.on('roomStateUpdate', (roomID, updateType, err) => {console.log('>>>[liveroom-room] roomStateUpdate, updateType: ' + updateType + ', err: ' , err);
})

房间状态 updateType 分为 'DISCONNECTED','CONNECTING' 和 'CONNECTED'。

DISCONNECTED:表示未连接状态,在登录房间前和退出房间后进入该状态。如果登录房间的过程出现稳态异常,例如 AppID 和 AppSign 不正确,或者有相同用户名在其他地方登录导致本端被 KickOut,都会进入该状态。

CONNECTING:表示正在请求连接状态,登录房间成功后会进入此状态,通常通过该状态进行应用界面的展示。如果因为网络质量不佳产生的连接中断,SDK 会进行内部重试,也会回到正在请求连接状态。

CONNECTED:表示连接成功状态,进入该状态表示已经登录房间成功,用户可以正常收到房间内的用户和流信息增删的回调通知。

其余回调接口请根据业务实际情况进行选择处理,完整的房间回调接口请戳这里查看~~~

2、登录获取Token

在开发阶段,ZEGO 提供了只用于测试环境获取 token 的接口,正式上线一定要由开发者的业务服务器实现 token 逻辑。登录 token 的获取详见:房间登录安全。

调用示例:


/* ZEGO 提供开发阶段获取 token 接口:https://wsliveroom-alpha.zego.im:8282/token,只能用于测试环境,正式环境一定要由客户业务服务器实现 token
*/// 获取登录 token
getLoginToken: function () {var self = this;const requestTask = wx.request({url: 'xxxx', // 该接口由开发者后台自行实现,开发者的 token 从各自后台获取data: {app_id: self.data.appID,id_name: self.data.userID,},header: {'content-type': 'text/plain'},success: function (res) {console.log(">>>[liveroom-room] get login token success. token is: " + res.data);if (res.statusCode != 200) {return;}zg.setUserStateUpdate(true);self.loginRoom(res.data, self);},fail: function (e) {console.log(">>>[liveroom-room] get login token fail, error is: ")console.log(e);}});
},

/**调用 `loginRoom` 登录房间**注意:需保证 `roomID` 信息的全局唯一,只支持长度不超过 128 字节 的数字,下划线,字母。登录房间成功是后续所有操作的前提。小程序中演示源码片段如下,仅供参考:
**/
zg.loginRoom(this.data.roomID, token, { userID: this.data.userID, userName: this.data.userName }).then(result => {console.log(TAG_NAME, 'login room succeeded', result);}).catch(err => {console.error(TAG_NAME, 'login room fail', err);})

三、推流

直播过程中,主播要推送自己的本地画面,需要执行推流操作。

1、组件说明

微信小程序中的推流功能,需要使用 ZEGO "小程序直播插件”提供的 zego-pusher 标签。

调用示例:


<zego-pusher id="zg-pusher" url="{{pusherInfo.url}}" class="push-content"waitingImage="{{waitingImage}}" enableCamera="{{enableCamera}}" debug="{{debug}}" autoFocus="{{autoFocus}}" aspect="{{aspect}}" minBitrate="{{minBitrate}}" maxBitrate="{{maxBitrate}}" zoom="{{zoom}}"mode="{{mode}}"muted="{{muted}}"beauty="{{beauty}}" whiteness="{{whiteness}}"orientation="{{orientation}}"bindstatechange="onPushStateChange" bindnetstatus="onPushNetStateChange">
</zego-pusher>

2、开始推流

主播登录房间成功后,根据业务逻辑准备推流。使用 SDK 推流播放需要执行如下步骤:

1)触发推流。

2)调用 SDK 的 startPublishingStream 获取 streamID 对应的推流地址。

3)将步骤 2 中获取的推流地址设置为 zego-pusher 的 url。

4)获取推流组件实例,然后调用实例 的 start() 录制视频。

调用示例:

zgPusher = this.selectComponent("#zg-pusher");

// 1/2. 主播登录房间成功后触发推流,调用 SDK 的 startPublishingStream 获取 streamID 对应的推流地址
zg.loginRoom(this.data.roomID, token, { userID: this.data.userID, userName: this.data.userName }).then(result => {console.log(TAG_NAME, 'login room succeeded', result);zg.startPublishingStream(this.data.pusherInfo.streamID).then(({ streamID, url}) => {this.data.pusherInfo = {streamID,url}this.setData({pusherInfo: this.data.pusherInfo}, () => {zgPusher.start();})});}).catch(err => {console.error(TAG_NAME, 'login room fail', err);})

3、推流事件处理

微信小程序会在 zego-pusher 的 bindstatechange 绑定的方法中通知出推流状态事件,开发者需要执行如下操作:

1)在 bindstatechange 绑定的回调函数中,调用 SDK 提供的 updatePlayerState API 将推流事件透传给 SDK。

2)在 SDK 提供的 publisherStateUpdate 回调中处理推流的开始、失败状态。

调用示例:

// zego-pusher 绑定推流事件
onPushStateChange(e) {console.log(`${TAG_NAME} onPushStateChange `, e.detail.code ,e.detail.message);zg.updatePlayerState(this.data.pusherInfo.streamID, e);
},// 推流后,服务器主动推过来的,流状态更新;主动停止推流没有回调,其他情况均回调
zg.on('publisherStateUpdate', ({ streamID, state, errorCode }) => {console.warn(TAG_NAME, 'publisherStateUpdate', state, streamID, errorCode);this.setData({publishing: state === 'PUBLISHING' ? true : false,beginToPush: false})})

3)微信小程序会在 zego-pusher 的 bindnetstatus 绑定的方法中通知出推流网络事件,开发者也需要在对应的小程序回调中,调用 updatePlayerNetStatus 将推流事件透传给 SDK。

调用示例:

// zego-pusher 绑定网络状态事件
onPushNetStateChange(e) {console.log(`${TAG_NAME} onPushNetStateChange `, e.detail.code ,e.detail.message);zg.updatePlayerNetStatus(this.data.pusherInfo.streamID, e);
},// SDK 获取推流网络质量
zg.on('publishQualityUpdate', (streamID, publishStats) => {console.log('publishQualityUpdate', streamID, stats);
});

4)停止推流

停止推流,开发者需要执行如下操作:

1)调用 SDK 提供的 stopPublishingStream(streamID) 清空推流状态。

2)调用 zego-pusher 实例提供的 stop() 停止推流。

注意:上述第 1 步为必选操作,否则可能导致 SDK 状态异常。

调用示例:

// 停止推流
zg.stopPublishingStream (this.data.pushStreamID);
zgPusher.stop();

四、拉流

直播过程中,如果直播间里的观众要看到主播的推流画面,就需要执行拉流操作。

1、组件说明

微信小程序中的拉流流功能,需要用到插件提供的 zego-player 标签。

调用示例:


<zego-player id="zg-player" sid="{{playerInfo.streamID}}" url="{{playerInfo.url}}"orientation="{{orientation}}" objectFit="{{objectFit}}" minCache="{{minCache}}" maxCache="{{maxCache}}" mode="{{mode}}" muted="{{muted}}" debug="{{debug}}"pictureInPictureMode="{{pictureInPictureMode}}" objectFit="{{objectFit}}" class="play-content" bindstatechange="onPlayStateChange" bindnetstatus="onPlayNetStateChange">
</zego-player>

2、开始拉流

观众登录房间成功后,根据业务逻辑准备拉流。使用 SDK 拉流播放需要执行如下步骤:

1)触发拉流

2)调用 SDK 的 startPlayingStream 获取 streamID 对应的播放地址

3)将步骤 2 中获取的推流地址设置为 zego-player 的 url, 流ID设置为sid。

4)获取拉流组件实例,然后调用实例 的 play() 播放视频 或者设置拉流组件的 autoplay 属性为 true,实现自动拉流。

调用示例:

//  通过 SDK 获取 streamID 对应的播放地址
zg.startPlayingStream(streamList[0].streamID).then(({ streamID, url }) => {console.warn(TAG_NAME, 'startPlayingStream', streamID, url);that.data.playerInfo.streamID = streamID;that.data.playerInfo.url = url;that.setData({playerInfo: that.data.playerInfo}, () => {console.error(that.data.playerInfo, zgPlayer)zgPlayer.play();})}).catch(err => {console.warn(TAG_NAME, 'startPlayingStream', err);});
zgPlayer = this.selectComponent("#zg-player");
zgPlayer.play();

3、拉流事件处理

微信小程序会在 zego-player 的 bindstatechange 绑定的方法中通知出拉流状态事件,开发者需要执行如下操作:

1)在 bindstatechange 绑定的回调函数中,调用 SDK 提供的 updatePlayerState API将推流事件透传给 SDK。

2)在 SDK 提供的 onPlayStateUpdate 回调中处理播推、拉流的开始、失败状态。

调用示例:


// zego-player 绑定的拉流事件
onPlayStateChange(e) {// 透传拉流事件给 SDK,type 0 拉流zg.updatePlayerState(e.detail.streamID, e);
},// 服务端主动推过来的 流的播放状态, 视频播放状态通知;type: { start:0, stop:1};
zg.onPlayStateUpdate = function (updatedType, streamID) {console.log(`${TAG_NAME} onPlayStateUpdate ${updatedType === 0 ? 'start ' : 'stop '} ${streamID}`);
};

3)微信小程序会在 zego-player 的 bindnetstatus 绑定的方法中通知出拉流网络事件,开发者也需要在对应的小程序回调中,调用 updatePlayerNetStatus 将推流事件透传给 SDK。

调用示例:

// zego-player 绑定网络状态事件
onPlayNetStateChange(e) {console.log(`${TAG_NAME} onPlayNetStateChange `,e.detail.info);zg.updatePlayerNetStatus(e.detail.streamID, e);
},// SDK 拉流网络质量回调
zg.on('playQualityUpdate', (streamID, stats) => {console.log(`${TAG_NAME} playQualityUpdate ${streamID}`, stats);
});

4、停止拉流

停止拉流,开发者需要执行如下操作:

1)调用 SDK 提供的 stopPlayingStream(streamid) 清空拉流状态。

2)调用 zego-player 提供的 stop() 停止推流。

注意:上述第 1 步为必选操作,否则可能导致 SDK 状态异常。

调用示例:

// 停止拉流
zg.stopPlayingStream(this.data.playInfo.streamID);
zgPlayer.stop();

五、退出房间

调用如下 logoutRoom 退出房间。在退出房间前,请确保停止推拉流,并清理相关状态。

调用示例:

// 停止拉流
zg.stopPlayingStream(this.data.playInfo.streamID);
zgPlayer.stop();

六、配置公众平台域名

ZEGO分配给开发者的 URL(包含 HTTPS、WSS 协议),需要在微信公众平台进行“合法域名”配置后,小程序才能正常访问。

微信后台配置地址:微信公众平台 -> 设置 -> 开发设置 -> 服务器域名

请开发者将 ZEGO 分配的请求域名,按照协议分类,填到指定的 request合法域名 或者 socket合法域名 中。例如:

通过以上步骤即可实现小程序直播功能,对于商品列表、后台管理等功能,可以在留言区或私信我开通,只需1周即可完成全部功能的配置。

零基础通过直播小程序组件实现电商带货相关推荐

  1. 小程序和vue语法对比_商城小程序对比传统电商的优势如何?

    自移动互联网兴起后,许多企业都将自己的业务重心转移到移动端.目前,小程序发展异常火爆,大家都争先恐后,通过长沙小程序开发,来布局自己的商城小程序.不过由于小程序发展较短,许多企业对此不甚了解.那么接下 ...

  2. 如何通过小程序建立化妆品电商平台?

    通过小程序建立化妆品电商平台可以让消费者方便地浏览和购买化妆品产品,以下是一些建立化妆品电商平台的步骤: 1.注册小程序账号:在微信公众平台上注册小程序账号,并选择适合的小程序模板. 2.产品选购:与 ...

  3. 玩转KOL,小程序社交信用电商小优店完成A轮千万美元融资

    [猎云网(微信:ilieyun)北京]7月17日报道(文/薄冬梅) 在自己关注的公众号下找到商品购买入口,进入小程序挑选商品,支付购买-- 或者,在微信主页面,下拉小程序任务栏,找到自己关注的公众号运 ...

  4. php实现秒杀倒计时,小程序中实现电商秒杀倒计时的效果

    在电商应用中,经常会用到秒杀,那么秒杀会有个倒计时功能,这里我们把上次给大家展示的倒计时功能用到电商应用中去. 基本实现功能 1,小程序仿电商网站秒杀倒计时 2,显示格式为:例如 1天11时11分11 ...

  5. 【短视频运营】短视频变现方式 ( 直播打赏 | 线上引流 | 电商带货 | 知识变现 | 品牌推广 | 粉丝数量 | 粉丝领域 | 粉丝质量 )

    文章目录 一.直播打赏 二.品牌推广 1.粉丝数量 2.粉丝领域 3.粉丝质量 三.线上引流 四.电商带货 五.知识变现 抖音的变现方式如下 ; ① 直播打赏 ② 品牌推广 ③ 线上引流 ④ 电商带货 ...

  6. 微信小程序组件(标签)—码虫带你飞

    微信小程序组件(标签) 组件文档:https://mp.weixin.qq.com/debug/wxadoc/dev/component/ 常用布局标签 <view></view&g ...

  7. 零基础学习微信小程序(7):组件

    view标签 text标签相当于html里的span标签,是行内元素,写入时,不会进行换行 text标签 view标签相当于html里的div标签,是块级元素,写入时,会导致换行 text标签只能嵌套 ...

  8. 一、零基础入门微信小程序开发之创建项目工程同时完成引导页开发

    前言 创建这个系列博客的原因是因为最近在加深微信小程序的学习,按照我之前的学习习惯是不喜欢记录的,加上自己有拖延症就更不太愿意做这件事情了,同时我要给学生上课,但总是缺少教材所以就开了这个系列的博客, ...

  9. 零基础入门微信小程序系列之——校园跑腿

    前段时间在准备校招的事情,没有太多经历给大家分享博客和视频.最近校招已经尘埃落定,在策划一个零基础入门小程序的系列视频,在某站持续输出. 小程序的主要功能与微信目前线上的校园跑跑乐同步. 从0开始编写 ...

最新文章

  1. 深度学习模型保存_Web服务部署深度学习模型
  2. postman模拟HTTP请求
  3. c语言 指针 a= amp b,c语言初学-引用和指针的异同点
  4. 2022年2月Python小屋编程比赛获奖名单
  5. 高德地图联手中国气象局,积水地图 AI 版实时预测道路积水
  6. 数据包接收系列 — IP协议处理流程(二)
  7. caffe matlab 崩溃,终于搞定caffe了(window官方版win7+VS2013)
  8. 如何向VISUAL SVN SERVER上传文件
  9. 笔记本风扇噪音太大,最简单操作风扇降噪
  10. r语言和python的区别-Python和R语言的区别_Python与R的区别和联系
  11. 《畅玩NAS》第3章 ESXI安装OpenMediaVault
  12. 【人脸识别】arcface-pytorch代码解析
  13. 批处理、批量复制文件:复制文件夹及子文件下所有特定文件,并且复制存在特定文件的子文件夹
  14. oled屏幕(IIC接口+1306驱动)+raspberrypi pico 显示基于RT-Thread
  15. 【C++】2048游戏系列---功能模块第四稿【结束检测】
  16. python虚拟宠物猫
  17. 同学聚会,进行点菜,点了大盘鸡 水煮鱼 大虾 以及4个凉菜 1箱啤酒 分别录入各个单价,并计算总价,录入总学生数,计算人均多少钱。
  18. Android 点击空白位置并且隐藏软键盘
  19. Android 性能优化概述
  20. 详解人工智能(AI) 机器学习(ML) 深度学习(DL)

热门文章

  1. 兴趣题:猴子吃桃问题
  2. ansible 以及填坑
  3. python 读取gif_如何使用opencv(python)从url读取gif
  4. PHP 文字生成透明图片之路
  5. HBase NoSQL数据库详解
  6. TPLINK免驱版网卡插上后无法识别到CD驱动器怎么办?
  7. visio设置页元素组
  8. lucene相关资料
  9. oracle vm 鼠标切换,VirtualBox的Linux虚拟机文本模式和图形模式的切换问题
  10. ChatGPT突遭大面积封号!网友应急出解封教程