设计网页—微信小程序视频直播开发实现流程

摘要:弥勒供电系统系统软件系统软件手机软件与手机上入门机手机微信手机上手机微信手机微信微信小程序推动智能化化化缴费协议书书便签定 弥勒供电系统系统软件系统软件手机软件局邀...

手机上手机微信手机微信微信小程序开发设计设计方案务必依据手机上手机微信提供的开发设计设计方案者专用型专用工具与 SDK。倘若开发设计设计方案者对手机微信微信小程序开发设计设计方案流程不太熟,建议先系统软件手机软件学习培训学习培训:手机上手机微信手机微信微信小程序开发设计设计方案官方网网文字文本文档。
[标识:內容1]

由于手机上手机微信官方网网文字文本文档比较详细,原文中对手机微信微信小程序开发设计设计方案流程中的构架说明、API 开启、构件运用等,已但是多诠释,仅仅重要详尽详细介绍如何运用 ZEGO SDK 开发设计设计方案出可用声频视頻直播间间的手机上手机微信手机微信微信小程序。

SDK 集成化化正确引导详尽:手机上手机微信手机微信微信小程序 SDK集成化化正确引导

SDK 提供的 API 说明详尽:手机上手机微信手机微信微信小程序 SDK API 说明

手机微信微信小程序开发设计设计方案重要选用 web 开发设计设计方案技术专业专业知识( js、html、css )。

1、构件说明

手机上手机微信手机微信微信小程序中的推拉门门流功效,务必选用手机上手机微信提供的 live-player live-pusher 标志。其他的基本构件同原生态态 App 开发设计设计方案相仿,这儿不逐一详尽详细介绍。

1.1 live-player

live-player 是手机上手机微信提供的可用及时声频视頻播放的构件,官方网网详尽详细介绍详尽构件详尽详细介绍。

开发设计设计方案者创建构件获得取得成功后,务必在 js 文本文档中,开启 API 具体实际操作相符合的构件来进行规定,手机上手机微信官方网网 API 详尽 API 说明。

即构声频视頻云手机微信微信小程序中,创建 live-player 的演试源码下列:

ZegoLive/pages/liveroom/room/room.wxml live-player    autoplay    wx:if="{{item.playUrl}}"    id="{{item.streamID}}"    mode="RTC"    object-fit="fillCrop"    min-cache="0.1"    max-cache="0.3"    src="{{item.playUrl}}"    debug="{{pushConfig.showLog}}"    bindstatechange="onPlayStateChange"    bindnetstatus="onPlayNetStateChange"    binderror="error"     cover-view {{item.streamID}} /cover-view /live-player 

一定要留意:

live 方法重要用于直播间间类场景,比如赛事直播间间、网上文化艺术文化教育、远程控制操纵学习培训学习培训这种。该方法下,手机微信微信小程序内部的操纵控制模块会优先选择挑选保证收看体会的畅顺,依据调整min-cache 和 max-cache 特点,您可以调节观众们们(播放)端所感受到的时间延迟时间時间的规格,文字文本文档下面会详细详尽详细介绍这两个关键主要参数。

RTC 则重要用于双向视频视频语音语音通话或多的人视频视频语音语音通话场景,比如金融业业报告工作中、网上线上在线客服、轿车商业保险定损、学习培训学习培训交流会 这种。在此方法下,对 min-cache 和 max-cache 的设置不可易起作用,因为手机微信微信小程序内部会自动式将延迟时间時间控制在一个很低的水平(500Ms 左右)。

1.2 live-pusher

live-pusher 是手机上手机微信提供的可用及时声频视頻视頻视频录制的构件,官方网网详尽详细介绍详尽:构件详尽详细介绍

开发设计设计方案者创建构件获得取得成功后,务必在 js 文本文档中,开启 API 具体实际操作相符合的构件来进行规定,官方网网 API 详尽:API 说明

即构声频视頻云手机微信微信小程序中,创建 live-pusher 的演试源码下列:

ZegoLive/pages/liveroom/room/room.wxml live-pusher    wx:if="{{pushUrl}}"    id="video-livePusher"    mode="RTC"    url="{{pushUrl}}"    min-bitrate="{{pushConfig.minBitrate}}"    max-bitrate="{{pushConfig.maxBitrate}}"    aspect="{{pushConfig.aspect}}"    beauty="{{pushConfig.isBeauty}}"    muted="{{pushConfig.isMute}}"    background-mute="true"    debug="{{pushConfig.showLog}}"    bindstatechange="onPushStateChange"    bindnetstatus="onPushNetStateChange"     cover-view {{isPublishing ? "我(" + publishStreamID + ")": ""}} /cover-view /live-pusher 

一定要留意:

SD、HD 和 FHD 重要用于直播间间类场景,比如赛事直播间间、网上文化艺术文化教育、远程控制操纵学习培训学习培训这种。SD、HD 和 FHD
各有相符合三种默认设置设定的清晰度。该方法下,手机微信微信小程序会更加高度重视清晰度和收看的畅顺性,不可易太过重视低延迟时间時间,也不会便于延迟时间時间舍弃界面品质温柔畅性。RTC 则重要用于双向视频视频语音语音通话或多的人视频视频语音语音通话场景,比如金融业业报告工作中、网上线上在线客服、轿车商业保险定损、学习培训学习培训交流会
这种。该方法下,手机微信微信小程序会更加高度重视降低点到点的延迟时间,也会优先选择挑选保证声响的质量,在必不可少的状况下能对页面清晰度和页面的畅顺性进行一定的缩水率率。

2、进行流程

2.1 推流 API 开启流程图

详细讲解请参考 2.6 副标题。

2.2 拉流 API 开启流程图

2.3 初始化 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,由即构分配  idName: idName,       // 必填,顾客自定id,全局性性唯一  nickName:  nickName,  // 必填,顾客自定呢称  remoteLogLevel: 1,     // 递交系统软件系统日志至少级别,建议跟 logLevel 一致  logLevel: 1,          // 系统软件系统日志级别,debug:0,info:1,warn:2,error:3,report:99,disable:100(数据信息越大,系统软件系统日志越低),建议选择 1  server: server        // 必填,联接互联网网络服务器详尽详细地址,由即构分配  logUrl: logUrl        // 必填,logServer 详尽详细地址,由即构分配});

2.4 得到登录 token

登录 token 的得到详尽后文 安全性性方案计划方案 中的 房间登录安全性性 副标题。

即构手机微信微信小程序中演试源码片段下列:

ZegoLive/pages/liveroom/room/room.js// 得到登录 tokengetLoginToken: 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);      }    });},

2.5 登录房间

登录房间获得取得成功是过后所有具体实际操作的前提条件标准。即构声频视頻云手机微信微信小程序中演试源码片段下列,仅作参考:

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);});

登录歪斜确码文件目录下列:

2.6 单互联网网络主播直播间间

单互联网网络主播直播间间时,一个房间内唯逐一个互联网网络主播,互联网网络主播不可易与观众们们进行互动交流沟通交流。

2.6.1 一开始推流

互联网网络主播登录房间获得取得成功后,根据业务流程步骤逻辑性性提早提前准备推流。运用 SDK 推流播放务必遵循下列步骤:

打开推流

开启 SDK 的 startPublishingStream 得到 streamID 相符合的推流详尽详细地址

在 SDK 的回调函数涵数 onStreamUrlUpdate 中获推流详尽详细地址

开启手机上手机微信手机微信微信小程序的 wx.createLivePusherContext 创建 live-pusher ,将步骤 3 中得到的推流详尽详细地址设置为
live-pusher 的 url,接着开启 live-pusher 的 start() 视頻视频录制视频

演试源码片段下列,仅作参考:

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);});// 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.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();    });},

2.6.2 一开始拉流

观众们们登录房间获得取得成功后,根据业务流程步骤逻辑性性提早提前准备拉流。运用 SDK 拉流播放务必遵循下列步骤:

打开拉流

开启 SDK 的 startPlayingStream 得到 streamID 相符合的播放详尽详细地址

在 SDK 的回调函数涵数 onStreamUrlUpdate 中得到拉流详尽详细地址

开启手机上手机微信手机微信微信小程序的 wx.createLivePlayerContext 创建 live-player ,将步骤 3 中得到的推流详尽详细地址设置为
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 相符合的拉流 url    var 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 的源不容易有,创建新 player    if (!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(){});},

2.6.3 拉流、推流恶变恶性事件处理

手机上手机微信手机微信微信小程序会在 live-player 和 live-pusher 的 bindstatechange 关系的方法中通快递快递公司知出推拉门门流状况恶变恶性事件,开发设计设计方案者务必:

在 bindstatechange 关系的回调函数涵数涵数中,开启 SDK 提供的 API updatePlayerState 将推流恶变恶性事件透推送给 SDK

在 SDK 提供的 onPlayStateUpdate onPublishStateUpdate 回调函数涵数中处理播推、拉流的一开始、不了功状况

演试源码片段下列,仅作参考:

ZegoLive/pages/liveroom/room/room.js// live-player 关系的拉流恶变恶性事件onPlayStateChange(e) {    // 透传拉流恶变恶性事件给 SDK,type 0 拉流    zg.updatePlayerState(e.currentTarget.id, e, 0);},// 服务端积极主动推回家的 流的播放状况, 视频播放状况通知;type: { start:0, stop:1};zg.onPlayStateUpdate = function (updatedType, streamID) {    console.log(" [liveroom-room] zg onPlayStateUpdate, " + (updatedType == 0 ? 'start ' : 'stop ') + streamID);};// live-pusher 关系推流恶变恶性事件onPushStateChange(e) {    // 透传推流恶变恶性事件给 SDK,type 1 推流    zg.updatePlayerState(this.data.publishStreamID, e, 1);},// 推流后,互联网网络服务器积极主动推回家的,流状况升級;type: { start: 0, stop: 1 },积极主动停止推流没有回调函数涵数,其他情况均回调函数涵数zg.onPublishStateUpdate = function (type, streamid, error) {    console.log(' [liveroom-room] zg onPublishStateUpdate, streamid: ' + streamid + ', type: ' + (type == 0 ? 'start' : 'stop') + ', error: ' + error);};

另外,手机微信微信小程序会在 live-player 和 live-pusher 的 bindnetstatus 关系的方法中通快递快递公司知出推拉门门流互连网恶变恶性事件,开发设计设计方案者也务必在相符合的手机微信微信小程序回调函数涵数中,开启 updatePlayerNetStatus 将推流恶变恶性事件透推送给 SDK。

演试源码片段下列,仅作参考:

// live-player 关系互连网状况恶变恶性事件onPlayNetStateChange(e) {    // 透传互连网状况恶变恶性事件给 SDK,type 0 拉流    zg.updatePlayerNetStatus(e.currentTarget.id, e, 0);},// SDK 拉流互连网质量回调函数涵数zg.onPlayQualityUpdate = function (streamId, streamQuality) {    ...},// live-pusher 关系互连网状况恶变恶性事件onPushNetStateChange(e) {    //透传互连网状况恶变恶性事件给 SDK,type 1 推流    zg.updatePlayerNetStatus(this.data.publishStreamID, e, 1);},// SDK 推流互连网质量回调函数涵数zg.onPublishQualityUpdate = function (streamId, streamQuality) {    ...},

2.6.4 停止推、拉流

停止推拉门门流,开发设计设计方案者务必:

开启 SDK 提供的 stopPublishingStream(streamid) stopPlayingStream(streamid) 消除推、拉流状况

开启 live-pusher 和 live-player 提供的 stop() 停止推、拉流

一定要留意,上述第 1 点一定要处理,要不然可能导致 SDK 状况出現出现异常!

演试源码片段下列,仅作参考:

// 停止拉流zg.stopPlayingStream(this.data.playStreamList[i]['streamID']);this.data.playStreamList[i]['playContext'] this.data.playStreamList[i]['playContext'].stop();// 停止推流zg.stopPublishingStream(this.data.publishStreamID);this.data.pusherVideoContext.stop();

2.7 多互联网网络主播直播间间

多互联网网络主播直播间间是互联网网络主播与观众们们连麦,使观众们们一样成核心播的互动交流沟通交流功效。视频交流会也可依据该方法进行。多互联网网络主播直播间间较单互联网网络主播直播间间空出了连麦信令互动交流整个过程。推流、拉流流程同单互联网网络主播基本一致,这节已但是多诠释。

2.7.1 连麦互动交流

观众们们申请办理申请办理连麦互动交流的重要步骤是:

观众们们申请办理申请办理连麦,SDK 插孔: requestJoinLive

互联网网络主播收到观众们们的申请办理申请办理连麦,SDK 插孔: onRecvJoinLiveRequest

互联网网络主播想要/拒绝连麦,SDK 插孔: respondJoinLive

观众们们或互联网网络主播结束连麦,SDK 插孔: endJoinLive

互联网网络主播邀请连麦互动交流的重要步骤是:

互联网网络主播邀请观众们们连麦,SDK 插孔: inviteJoinLive

观众们们收到互联网网络主播的邀请连麦,SDK 插孔: onRecvJoinLiveRequest

观众们们想要/拒绝连麦,SDK 插孔: respondJoinLive

互联网网络主播或观众们们结束连麦,SDK 插孔: endJoinLive

开发设计设计方案者可按需开启 SDK 连麦相关 API。即构声频视頻云手机微信微信小程序中演试源码片段下列,仅作参考:

ZegoLive/pages/liveroom/room/room.js// 观众们们乞求连麦requestJoinLive: function () {    var self = this;    // 观众们们早已连麦时间段击,则结束连麦    if (self.data.isPublishing) {        zg.endJoinLive(self.data.anchorID, function(result, userID, userName) {            console.log(' [liveroom-room] endJoinLive, result: ' + result);        }, null);        // 停止推流        zg.stopPublishingStream(this.data.publishStreamID);        this.setData({            isPublishing: false,            publishTitle : "未推流",        });        this.data.pusherVideoContext.stop();        return;    }    // 观众们们未连麦,点一下一开始推流    console.log(' [liveroom-room] audience requestJoinLive');    zg.requestJoinLive(this.data.anchorID, null, null, function(result, userID, userName) {    console.log(' [liveroom-room] requestJoinLive, result: ' + result);    if (result == false) {        wx.showToast({         title: '互联网网络主播拒绝连麦',         icon: 'none',         duration: 2000        })    } else {        wx.showToast({          title: '互联网网络主播想要连麦,提早提前准备推流',          icon: 'none',          duration: 2000        });        // 互联网网络主播想要连麦后,观众们们一开始推流        console.log(' [liveroom-room] startPublishingStream, userID: ' + userID + ', publishStreamID: ' + self.data.publishStreamID);        zg.setPreferPublishSourceType(1); // 0:推流到 CDN,观众们们拉流延迟时间時间在 2 秒左右;1:推流到 ZEGO 互联网网络服务器,延迟时间時间在 400Ms 左右        zg.startPublishingStream(self.data.publishStreamID, '');    }},// 收到连麦乞求zg.onRecvJoinLiveRequest = function(requestId, fromUserId, fromUsername, roomId) {    console.log(' [liveroom-room] onRecvJoinLiveRequest, roomId: ' + roomId + 'requestUserId: ' + fromUserId + ', requestUsername: ' + fromUsername);    var content = '观众们们 ' + fromUsername + ' 乞求连麦,不是是允许?';    wx.showModal({        title: '提示',        content: content,        success: function(res) {            if (res.confirm) {                console.log(' [liveroom-room] onRecvJoinLiveRequest accept join live');                zg.respondJoinLive(requestId, true); // true:想要;false:拒绝             } else if (res.cancel) {                console.log(' [liveroom-room] onRecvJoinLiveRequest refuse join live');                zg.respondJoinLive(requestId, false); // true:想要;false:拒绝             }        }    });};

2.8 混流

混流可以把多安全通道直播间间的流根据配置信息内容內容,输出成一路流。开发设计设计方案者可按需开启 SDK 混流相关 API。演试源码片段下列,仅作参考:

//升級混流配置updateMixStream: function () {  console.log(' [liveroom-room] updateMixStream');  var self = this;  if (self.data.loginType !== 'anchor') {    return;  }  var width = 360;  var height = 640;  var mixConfig = {};  //混流输出流ID  mixConfig.outputStreamId = "mix-" + self.data.publishStreamID;  //混流输出帧率  mixConfig.outputFps = 15;  //混流输出视頻视频码率  mixConfig.outputBitrate = 800 * 1000;  //混流输出鉴别率  mixConfig.outputWidth = width;  mixConfig.outputHeight = height;  //混流状况色  mixConfig.outputBgColor = 0xc8c8c800;  //混流输入流信息内容內容  mixConfig.streamList = [];  var margin = 0;  if (self.data.isPublishing) {    var streamInfo = {      streamId: self.data.publishStreamID,      top: margin,      left: margin,      bottom: height - margin,      right: width - margin    };    mixConfig.streamList.push(streamInfo);  }  for (var i = 0; i self.data.playStreamList.length; i++) {    var streamId = self.data.playStreamList[i].streamID;    var streamInfo = {      streamId: streamId,      top: 0,      left: 0,      bottom: 0,      right: 0    };    if (mixConfig.streamList.length == 0) {        streamInfo.bottom = height;        streamInfo.right = width;    }    else if (mixConfig.streamList.length == 1) {      streamInfo.top = parseInt(height * 2 / 3);      streamInfo.left = parseInt(width * 2 / 3);      streamInfo.bottom = height;      streamInfo.right = width;    }    else if (mixConfig.streamList.length == 2) {      streamInfo.top = parseInt(height * 2 / 3);      streamInfo.left = 0;      streamInfo.bottom = height;      streamInfo.right = parseInt(width / 3);    }    mixConfig.streamList.push(streamInfo);  }  zg.updateMixStream(mixConfig, function(mixStreamId, mixStreamInfo) {    console.log(" [liveroom-room] updateMixStream success");    var rtmpUrls = mixStreamInfo["rtmpUrls"];    for (var i = 0; i rtmpUrls.length; i++) {      console.log(" [liveroom-room] updateMixStream mix Rtmp: " + rtmpUrls[i]);    }    wx.showModal({      title: '提示',      content: '混流获得取得成功',      showCancel: false    });  }, function(error, info) {    console.error(" [liveroom-room] updateMixStream error " + error.code);    if (info) {      for (var i = 0; i info.length; i++) {        console.error(" [liveroom-room] input stream not exist " + info[i]);      }    }    wx.showModal({      title: '提示',      content: '混流失败',      showCancel: false    });  });},//停止混流stopMixStream: function () {  console.log(" [liveroom-room] stopMixStream");  var self = this;  var mixConfig = {};  mixConfig.outputStreamId = "mix-" + self.data.publishStreamID;  zg.stopMixStream(mixConfig, undefined, undefined);},

3、倒退台处理

切后台管理管理方法,会停止视频搜集,但不可易严禁应用音响搜集。开发设计设计方案者可以依据 background-mute 特点来设置不是是严禁应用音响搜集。

切后台管理管理方法,会停止视频播放,默认设置设定倒退台减噪。

4、安全性性方案计划方案

4.1 房间登录安全性性

4.1.1 基本流程

手机微信微信小程序与业务流程步骤后台管理管理方法建立通信,得到 Token 信息内容內容。

手机微信微信小程序开启 ZegoClient.login 登录 Zego 互联网网络服务器,传入 Token 信息内容內容,验证依据后,开展登录。

ZegoClient 会保持与 Zego 互联网网络服务器的长连接,处理消息推送或接纳的信息内容。

手机微信微信小程序开启 ZegoClient.logout 登出 Zego 互联网网络服务器。

一定要留意:

转换成 Token 信息内容內容务必业务流程步骤后台管理管理方法独立开发设计设计方案。

4.1.2 login_token 信息内容內容

login_token 信息内容內容为标准 json 文档文件格式,具体为:

{    "ver": 1,    "hash": xxxxx,    "nonce": xxxxx,    "expired": xxxxx,}

字段名名说明下列:

对于 hash 计算中运用字段名名的更详细说明:

一定要留意:

login_token 传输整个过程中,会经历 base64 数据信息数据加密。每一次登录务必再度得到 login_token。

业务流程步骤方开发设计设计方案的手机微信微信小程序务必和业务流程步骤后台管理管理方法建立一种安全性性通讯和鉴权体系,业务流程步骤方运用现有的账号管理方法管理体系或第三方认证管理方法管理体系的登录开展后,业务流程步骤方手机微信微信小程序和业务流程步骤后台管理管理方法互动交流得到该

login_token, AppSecret 是存储在业务流程步骤后台管理管理方法的。

4.2 login_token 转换成案例编号

go 语言 login_token 转换成案例编号下列:

func makeTokenSample(appid uint32, app_key string, idname string, expired_add int64) (ret string, err error){    nonce := UniqueId()    expired := time.Now().Unix() + expired_add      //公司:秒    app_key = strings.Replace(app_key, "0x","",-1)    app_key = strings.Replace(app_key, ",", "", -1)    if len(app_key) 32 {      return "", fmt.Errorf("app_key wrong")    }    app_key_32 := app_key[0:32]    source := fmt.Sprintf("%d%s%s%s%d",appid,app_key_32,idname,nonce,expired)    sum := GetMd5String(source)    token := tokenInfo{}    token.Ver = 1    token.Hash = sum    token.Nonce = nonce    token.Expired = expired    buf, err := json.Marshal(token)    if err != nil {    return "", err    }    encodeString := base64.StdEncoding.EncodeToString(buf)    return encodeString, nil}

php 语言 login_token 转换成案例编号下列:

public function getToken(int $app_id, string $app_key, string $idname, int $expired_add){    $nonce = uniqid();    $expired = time() + $expired_add; //公司:秒    $app_key = str_replace("0x", "", $app_key);    $app_key = str_replace(",", "", $app_key);    if(strlen($app_key) 32) {        return false;    }    $app_key_32 = substr($app_key, 0, 32);    $source = $app_id.$app_key_32.$idname.$nonce.$expired;    $sum = md5($source);    $tokenInfo = [        'ver' = 1,        'hash'  = $sum,        'nonce' = $nonce,        'expired' = $expired,    ];    $token = base64_encode(json_encode($tokenInfo));    return $token;}

java 语言 login_token 转换成案例编号下列:

package demo;import org.json.JSONObject;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Date;import java.util.UUID;import org.apachemons.codec.binary.Base64;public class ZegouUtils {    public static void main(String[] args) {        String appid = "0000000000";  //即构分配的appId        String appKey = "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00";  //即构分配的appKey        String idName = "xxxxxxx"; //业务流程步骤系统软件手机软件顾客唯一标示      String Token = getZeGouToken(appid,appKey,idName);      System.out.println("--Token--:"+Token);  }    /**     * 拉流端得到登录token     * @param appId  即构分配的appId     * @param appKey 即构分配的appKey     * @param idName 业务流程步骤系统软件手机软件顾客唯一标示     * @return     */    public static String getZeGouToken(String appId,String appKey,String idName){        String nonce= UUID.randomUUID().toString().replaceAll("-", "");        long time=new Date().getTime()/1000+30*60;        String appKey32=new String(appKey.replace("0x", "").replace(",", "").substring(0, 32));        System.out.println("appKey:"+time+"    "+appKey32+"    "+nonce);        if(appKey32.length() 32){            System.out.println("private key erro!!!!");            return null;        }        String sourece= getPwd(appId+appKey32+idName+nonce+time);        System.out.println("hash:"+sourece);        JSONObject json=new JSONObject();        json.put("ver", 1);        json.put("hash", sourece);        json.put("nonce", nonce);        json.put("expired",time); //unix时间戳,公司为秒        org.apachemons.codec.binary.Base64 base64 = new org.apachemons.codec.binary.Base64();        System.out.println("json"+json.toString());        return base64.encodeAsString(json.toString().getBytes());    }    /**     * 得到MD5数据信息数据加密     * @param pwd 务必数据信息数据加密的标志符串     * @return String标志符串 数据信息数据加密后的标志符串     */    public static String getPwd(String pwd) {        try {            // 创建数据信息数据加密总体目标            MessageDigest digest = MessageDigest.getInstance("md5");            // 开启数据信息数据加密总体目标的方法,数据信息数据加密的姿态早就开展            byte[] bs = digest.digest(pwd.getBytes());            // 接下来,大伙儿要多数据数据加密后的结果,进行提高,按照mysql的提高设计构思走            // mysql的提高设计构思:            // 第一步,将数据信息信息内容全部转换成正数:            String hexString = "";            for (byte b : bs) {                // 第一步,将数据信息信息内容全部转换成正数:                int temp = b 255;                // 第二步,将所有的数据信息信息内容转换成16进制的方法                // 注意:转换的状况下注意if正数 =0 16,那么倘若运用Integer.toHexString(),可能会造成欠缺十十位数                // 因此,务必对temp进行辨别                if (temp 16 temp = 0) {                    // 手动式式补好一个“0”                    hexString = hexString + "0" + Integer.toHexString(temp);                } else {                    hexString = hexString + Integer.toHexString(temp);                }            }            return hexString;        } catch (NoSuchAlgorithmException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return "";    }}

5、状况码

5.1 推流状况码

onPublishStateUpdate stateCode 含义下列:

其他 4 位歪斜确码均为手机微信微信小程序构架的错误,请参考:手机微信微信小程序官方网网文字文本文档

5.2 拉流状况码

onPlayStateUpdate stateCode 含义下列:

其他 4 位歪斜确码均为手机微信微信小程序构架的错误,请参考:手机微信微信小程序官方网网文字文本文档

6、广泛歪斜确

6.1 登录房间时,控制台输出返回 ZegoClient.Error.Timeout

解决方案计划方案: 请检查 初始化配置 ZegoClient.config 里面每个关键主要参数的类型不是是适当,一般情况下都是类型倾斜确导致的难点。

6.2 登录房间时,控制台输出返回 result=1000001002

原因: 观众们们角色人物角色不可许创建房间,也就是这一房间不容易有。

解决方案计划方案:

1)在 ZegoClient.config 里面的 option.audienceCreateRoom 设置为 TRUE

2)在 ZegoClient.login 里面将 role 设置为 1,互联网网络主播角色人物角色。

6.3 登录房间时,控制台输出返回 token Error 的错误

原因:计算 token 的状况下,提升优化算法不正确导致,可依据这一联接:sig-wstoken.zego.im:8181/tokenindex 来验证不是是适当:

最开始验证 hash 字段名名不是是有错,这儿要注意 id_name 是 string 类型,其实不是数值类型; expired 是 uninx 的时间戳,其实不是北京市市时间。

login_token 由业务流程步骤侧后台管理管理方法转换成后,将 json 里面的字段名名经历 base64 数据信息数据加密后再下达给手机微信微信小程序端。

详尽信息内容请参考: 4.1 房间登录安全性性

6.4 手机微信微信小程序如何设置鉴别率?

手机上手机微信手机微信微信小程序提供设置清晰度的 mode,无法特殊具体的鉴别率,视頻视频码率和帧率,具体可参考:

手机上手机微信手机微信微信小程序构件 live-pusher

6.5 手机微信微信小程序如何变换拍攝头、手机截图?

手机上手机微信手机微信微信小程序的 LivePusherContext 里面有提供相关的插孔,大家可参考:手机上手机微信手机微信微信小程序 API LivePusherContext

变换拍攝头的案例编号可参考:

7、手机上手机微信手机微信微信公众号域名配置

ZEGO 分配给开发设计设计方案者的 URL(包含 HTTPS、WSS 协议书书),务必手中机手机微信手机微信微信公众号进行“有效合理合法域名”配置后,手机微信微信小程序才能够一切一切正常访问。

手机上手机微信后台管理管理方法配置详尽详细地址:手机上手机微信手机微信微信公众号 - 设置 - 开发设计设计方案设置 - 互联网网络服务器域名。

请开发设计设计方案者将 ZEGO 分配的乞求域名,按照协议书书分类,填到特殊的 request有效合理合法域名 或者 socket有效合理合法域名 中。例如:


经典著作权声明

即速应用倡导高度重视与维护保养技术专业专业知识产权年限期限。如发现本站文章内容內容存在经典著作权难点,烦请提供经典著作权疑虑、真正真实身份确认、经典著作所有权证实、 ,大伙儿将马上处理。本站文章内容內容仅作共享资源沟通交流沟通交流关键主要用途,写作者看法不一同于即速应用看法。顾客与写作者的一切交易与本站无关紧要,请悉知。


弥勒供电系统系统软件与手机上手机微信手机微信微信小程序促进智能化化交费协议书便签署 弥勒供电系统系统软件局邀请手机上手机微信手机微信微信小程序“融e电”开发设计设计方案商在我国工商局局金融业组织相关工作中中工作中工作人员学员学生就业实干际实际操作流程进行学习培训学习培训 1605581535 2020双十一,手机上手机微信手机微信微信小程序如何杀出重围占据生产制造制造行业盈利? 双十一即将到来,各种各样商家早已在十月中就早就摩拳擦掌了,相对性性能比过去双十一的盛况,今年手机微信微信小程序才华横溢变为电子器件商务接待生产制造制造行业重要的比赛场。根据阿拉丁指数值值报告预测分析剖析大伙儿能够看到,今年双十一手机微信微信小程序的广告宣传宣传策划运营经营规模将呈现爆发式提升,有去年18亿到今年的4六亿,提升做到250%。手机微信微信小程序电子器件商务接待将变为流量争夺的重要方法。 1605581327 在我国邮政于百度搜索检索App公布集寄件、查询非常于一身的著名知名品牌卡功效 一年一度的双11购物快乐按期而至,大伙儿在“抢货”的同时,无可避免导致由于退货货要想寄快递公司企业的规定。便于考虑到顾客在双十一前后左右上下猛增的快递公司企业规定,在我国邮政于百度搜索检索App公布集寄件、查询非常于一身的著名知名品牌卡功效,该功效由百度搜索检索智能化化手机微信微信小程序载重。 1604628430



联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:修图软件