微信小程序“用完即走”的轻应用形态深受用户喜爱,作为新颖便捷的使用方式,“小程序+直播”受到业内的广泛关注。本文从技术角度出发,分享在小程序上快速实现视频直播的方法。

一、小程序直播的优势

2017年12 月 26 日,微信小程序正式对外开放了实时音视频录制及播放能力,这次能力的开放,再次扩展了小程序的想象边界。一方面,小程序开放的实时音视频能力,封装了音视频采集、前处理、编码、推流、拉流、解码和渲染等功能,大大降低了音视频的开发门槛;另一方面,借助微信生态自有的绝对流量优势,小程序无需安装、用完即走和易于传播的特性,有效地降低企业的获客成本。拥有了实时音视频能力的小程序,在视频直播、视频社交、在线教育、视频会议、银行/证券在线开户、在线保险定损、网络庭审、远程指挥等众多应用场景开启了飞速的发展。

在小程序直播的开发中,微信对外提供<live-pusher>和<live-player> ,其中<live-pusher>是视频推流的主要功能组件,<live-player>的主要功能则是播放,所有接口都是以集成封装的形式提供,开发者可以依据需求在一定范围内灵活设置使用。

二、小程序直播的类型

业内直播产品目前的分类主要是基于观众的可参与功能进行划分,大致可以归为单向直播、连麦直播、视频互动直播三类,以下做一个简单的描述:

  • 单向直播

主播开启视频直播场景,观众端观看视频,但仅可通过文字形式与主播互动,该场景下对延迟的容忍度较高,例如:活动直播、安防监控等场景使用的就是单向直播模式;

  • 连麦互动直播

主播开启直播服务后,观众可以在观看主播视频直播服务的同时通过文字形式与主播进行交流互动,在特定时刻观众不满足于仅能通过文字与主播进行互动时,可以申请与主播进行音视频互动,例如:映客、花椒、虎牙等平台多使用的都是连麦互动直播模式;

  • 视频互动直播

主播开启视频互动直播服务后,观众加入房间后直接参与互动,该场景下对音视频的流畅性要求较高,例如:语聊房、视频相亲等场景使用的即是视频互动直播模式;

小程序目前支持的推流协议为flv或Rtmp协议,仅可以支持单向直播的视频需求,若需要实现连麦直播或视频互动类产品,就必须采取网关形式接入。小程序网关的主要作用是将rtmp或flv协议转换为对应厂商的实时协议。

即构全终端音视频服务

Zego基于自研的强大音视频引擎,实现了Android、IOS、PC/Mac、微信小程序、H5等全终端设备互连互通的音视频云服务体系,即构音视频云服务包含了小程序网关的协议转换、流媒体接收分发、混流、录制等等多种功能:

即构音视频云

功能实现参见即构-小程序功能集成说明:https://doc.zego.im/CN/387.html

三、实现小程序直播的方法

基于即构SDK实现小程序视频直播功能,流程大致可以归为以下几步:

初始化 SDK

ZegoLive/pages/liveroom/room/room.js
// 声明变量var ZegoSDK = require("../../../js/jZego-wx-1.0.2.js");var zg;
// 初始化实例
zg = new ZegoSDK.ZegoClient();
// 配置必要参数
zg.config({appid: appid,         // 必填,应用id,请从 即构管理控制台-https://console.zego.im/acount/register 获取idName: idName,       // 必填,用户自定义id,全局唯一nickName:  nickName,  // 必填,用户自定义昵称remoteLogLevel: 1,     // 上传日志最低级别,建议跟 logLevel 一致logLevel: 1,          // 日志级别,debug:0,info:1,warn:2,error:3,report:99,disable:100(数字越大,日志越少),建议选择 1server: server        // 必填,接入服务器地址,请从 即构管理控制台-https://console.zego.im/acount/register 获取logUrl: logUrl        // 必填,logServer 地址,请从 即构管理控制台-https://console.zego.im/acount/register 获取
});

登录房间

登录房间成功是后续所有操作的前提。即构音视频云小程序中演示源码片段如下,仅供参考:

ZegoLive/pages/liveroom/room/room.jszg.login(self.data.roomID, self.data.loginType == "anchor" ? 1 : 2, token, function (streamList) {// 登录成功处理console.log('>>>[liveroom-room] login succeeded');
}, function (err) {// 登录失败处理console.log('>>>[liveroom-room] login failed, error is: ', err);
});

开始推流

主播登录房间成功后,根据业务逻辑准备推流。使用 SDK 推流播放需要遵循如下步骤:触发推流,调用 SDK 的 startPlayingStream 获取 streamID 对应的推流地址,在 SDK 的回调 onStreamUrlUpdate 中获推流地址,调用微信小程序的 wx.createLivePusherContext 创建 live-pusher ,将步骤获取的推流地址设置为 live-pusher 的 url ,然后调用 live-pusher 的 star() 录制视频。

演示源码片段如下,仅供参考:

ZegoLive/pages/liveroom/room/room.js
// 1/2. 主播登录房间成功后触发推流,调用 SDK 的 startPublishingStream 获取 streamID 对应的推流地址
zg.login(self.data.roomID, self.data.loginType == "anchor" ? 1 : 2, token, function (streamList) {// 主播登录成功即推流if (self.data.loginType == 'anchor') {console.log('>>>[liveroom-room] anchor startPublishingStream, publishStreamID: ' + self.data.publishStreamID); zg.setPreferPublishSourceType(1); // 0:推流到 CDN,观众拉流延迟在 2 秒左右;1:推流到 ZEGO 服务器,延迟在 400ms 左右zg.startPublishingStream(self.data.publishStreamID, '');}
}, function (err) {console.log('>>>[liveroom-room] login failed, error is: ', err);
});
c// 3. 在 SDK 的回调 onStreamUrlUpdate 中获取推流地址// type: {play: 0, publish: 1};
zg.onStreamUrlUpdate = function (streamid, url, type) {console.log(">>>[liveroom-room] zg onStreamUrlUpdate, streamId: " + streamid + ', type: ' + (type == 0 ? 'play' : 'publish') + ', url: ' + url);...
};y
// 4. 调用微信小程序的 wx.createLivePusherContext 创建 live-pusher ,将步骤 3 中获取的推流流地址设置为 live-player 的 url,然后调用 live-pusher 的 start 录制视频
setPushUrl: function (url) {console.log('>>>[liveroom-room] setPushUrl: ', url);var self = this;...self.setData({pushUrl: url,pusherVideoContext : wx.createLivePusherContext("video-livePusher", self),}, function () {self.data.pusherVideoContext.stop();self.data.pusherVideoContext.start();});
},

开始拉流

观众登录房间成功后,根据业务逻辑准备拉流。使用 SDK 拉流播放需要遵循如下步骤:触发拉流,调用SDK的 startPlayingStream 获取streamID 对应的播放地址,在SDK的回调 onStreamUrlUpdate 中获取拉流地址,调用微信小程序的 wx.createLivePlayerContext 创建 live-player ,将获取的推流地址设置为 live-player 的 src,然后调用 live-player 的 play() 播放视频。此步骤也可以设置 live-player 为 autoplay,此时播放器会自动播放,无需再手动调用 play()。

演示源码片段如下,仅供参考:

ZegoLive/pages/liveroom/room/room.js
// 1. 登录后拉流
zg.login(self.data.roomID, self.data.loginType == "anchor" ? 1 : 2, token, function (streamList) {// 房间内已经有流,拉流self.startPlayingStreamList(streamList);
}, function (err) {console.log('>>>[liveroom-room] login failed, error is: ', err);
});
// 2. 通过 SDK 获取 streamID 对应的播放地址
startPlayingStreamList: function (streamList) {var self = this;...// 设置拉流目标地址,可选,0:auto;1:从 bgp 拉流zg.setPreferPlaySourceType(1); // 获取每个 streamID 对应的拉流 urlvar playStreamList = self.data.playStreamList;for (var i = 0; i < streamList.length; i++) {var streamID = streamList[i].stream_id;// 调用 SDK 的 startPlayingStream 获取 streamID 对应的播放地址zg.startPlayingStream(streamID);}
},
// 3. 在 SDK 的回调 onStreamUrlUpdate 中获取拉流地址// type: {play: 0, publish: 1};
zg.onStreamUrlUpdate = function (streamid, url, type) {console.log(">>>[liveroom-room] zg onStreamUrlUpdate, streamId: " + streamid + ', type: ' + (type == 0 ? 'play' : 'publish') + ', url: ' + url);...
};
// 4. 调用微信小程序的 wx.createLivePlayerContext 创建 live-player ,将步骤 3 中获取的拉流地址设置为 live-player 的 src,然后调用 live-player 的 play() 播放视频。此步骤也可以设置 live-player 为 autoplay,此时播放器会自动播放,无需再手动调用 play()
setPlayUrl: function (streamid, url, self) {...// 相同 streamid 的源不存在,创建新 playerif (!isStreamRepeated) {streamInfo['streamID'] = streamid;streamInfo['playUrl'] = url;streamInfo['playContext'] = wx.createLivePlayerContext(streamid, self);self.data.playStreamList.push(streamInfo);}...self.setData({playStreamList: self.data.playStreamList,}, function(){});
},

基于即构SDK,简单4步就能构建小程序直播产品,实现视频直播功能。小程序商家通过增加直播互动功能,可进一步增加用户粘性,促进销售转化。


扫描以下小程序码,进入即构小程序直播体验

实时视频通讯

视频互动

更多小程序直播相关内容,欢迎进入:即构官网 了解更多。

ZEGO教程:如何从零搭建小程序直播平台相关推荐

  1. 在线特长培训机构搭建小程序报名平台教程!

    如何制作一个特长教育机构的在线小程序报名平台?其实很简单,只需选择一个能在线搭建小程序的平台工具,就能借助乔-拓云工具轻松在线搭建一个小程序,只需跟着小编下面的教学步骤操作就能完成特长教育机构的在线报 ...

  2. [微信小程序直播平台开发]___(一)介绍与流程

    1.一个可以忽略的前言 最近在做的一个项目,客户要做一个直播平台,主播发起视频直播,然后其他人进入房间观看这样子,跟其他直播平台不同的是,主播可以打赏观众,噗. 因为客户要做的是一个民宿的微信小程序, ...

  3. obs多推流地址_微信小程序直播电脑端OBS推流直播教程

    微信小程序直播经过一个月的内测邀请,很多商家都已经开通了,之前的直播商家们都是用手机端推流直播的,本周微信官方团队更新了小程序直播插件,1.03版本的都支持电脑端推流了,下面就把具体操作图文教程传授给 ...

  4. 小程序代理平台怎么选?

    如今,越来越多的企业和组织开始使用小程序来实现其业务.小程序代理平台哪家好?怎么选?这是很多人都在纠结的问题.其实,找小程序代理平台并不难,但是找一家合适的小程序代理平台还是有地方需要注意的. 一.小 ...

  5. 微信小程序直播系统有哪些优势?

    去年疫情让直播行业的发展突飞猛进,李佳琪的直播卖货成为一时的焦点,短时间内实现货量的剧增以及销量的暴涨,让资本市场看到了直播行业的潜力,如今微信官方也推出了小程序直播,它的出现带来了更多新的展望,那么 ...

  6. 局部配置和全局配置_06. 教你零基础搭建小程序(解读全局配置文件-tabBar字段)...

    自从开始在知乎上发教程后,发现一个事情啊, 大家对于我写的教程,都在偷偷地收藏~~ 但是, 却没有银点赞~ 知乎这个平台吧,点赞的分量比收藏更大, 这里也不是要赞(我知道自己还能做的更好), 只是希望 ...

  7. 如何从零基础开始学习搭建小程序?

    随着小程序越来越热门,身边很多朋友都想拥有一款自己的小程序,但是又觉得自己什么都不懂,到底能不能做出小程序呢? 在这里,我们给大家解答一下,做一款小程序其实很简单,不需要学习编程技术.当然,如果你懂得 ...

  8. WordPress丸子小程序从零到一搭建小程序[安装配置小程序插件]

    B站视频安装教程: 零基础小程序搭建上https://b23.tv/kWcbq9 零基础小程序搭建下https://b23.tv/ek7RZR 腾讯云视频安装教程 零基础小程序搭建上https://v ...

  9. 点击button后改变文字_27. 教你零基础搭建小程序:小程序的常见组件—button

    筒子们,这一章接着讲Button 标签. 开放能力的属性 button标签的开放能力是指open-type 属性. 其中,这个属性的合法值包括如下: 这一部分呢,需要分为两个方式来演示. 一是可在模拟 ...

最新文章

  1. 影像组学视频学习笔记(15)-ROC曲线及其绘制、Li‘s have a solution and plan.
  2. Effective C++ 之 Item 6 : 若不想使用编译器自动生成的函数,就该明确拒绝
  3. Windows 查看所有进程命令tasklist
  4. python 去掉list元素的双引号_一天快速入门 Python
  5. nodejs轻量服务器后端
  6. Kotlin学习笔记 第二章 类与对象 第十一节 枚举类 第八节密封类
  7. 常用的排序算法总结(一)
  8. ipad safari php readfile mp4,php – 在mac上的safari中没有加载Wav文件
  9. 高级着色语言HLSL入门(2)
  10. PwnLnX:针对Linux系统的渗透测试工具
  11. 数据结构c语言作业答案,数据结构C语言版第2版习题答案解析严蔚敏
  12. android9三星功能,三星开启安卓9.0测试:One UI Beta计划
  13. dell笔记本电脑驱动_2020年最佳笔记本电脑top榜
  14. 出售永磁同步电机(pmsm)模型预测控制(MPC)matlab/simulink仿真模型,转速控制,电流控制,转矩控制,直接预测控制(有限集模型预测控制)(这单矢量和双矢量,三矢量),无差拍,foc矢
  15. Apache 支持ipv6 安装及常见问题
  16. 斩于马下 挑战木马克星:Ewido显神威(转)
  17. 半糖主义的伤感空间日志推荐:心碎后,我们落泪
  18. 关于Vue框架Element UI中分页器,当前页的问题
  19. Android如何在账户设置中添加App的账户
  20. CSS(列表+表格+链接+自定义鼠标光标)样式

热门文章

  1. libcurl库简介
  2. Android开发之APP直播简介
  3. 【GBase 8a MPP数据库集群】函数DECODE
  4. USB3.0移动硬盘启动Win7的方法(AHCI/AMD USB3.0/Win7)
  5. 温暖相伴 | “健康未来”项目携手九三学社走进玉林市乡村小学
  6. 采购SRM系统应该选哪个?
  7. CP2102和CP2104的区别
  8. 全域散列概念理解(try)
  9. mqtt Kafka 服务_MQTT的使用一 - 大耳朵小虎
  10. 【面试招聘】CampusShame:校招污点公司名单