# webrtc-rts-demo-js **Repository Path**: zegodev_admin/webrtc-rts-demo-js ## Basic Information - **Project Name**: webrtc-rts-demo-js - **Description**: 即构RTS(web)demo - **Primary Language**: HTML - **License**: Not specified - **Default Branch**: master - **Homepage**: https://zegodev_admin.gitee.io/webrtc-rts-demo-js - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-07 - **Last Updated**: 2022-06-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WebRTC-CDN方案 **背景** 客户想要直接使用我们的服务端能力,但是不想接入sdk; 自己灵活控制推拉流; **Demo仓库** [https://gitee.com/zegodev_admin/webrtc-rts-demo-js](https://gitee.com/zegodev_admin/webrtc-rts-demo-js) ## 实现流程 在线 demo 地址:[https://zegodev_admin.gitee.io/webrtc-rts-demo-js/](https://zegodev_admin.gitee.io/webrtc-rts-demo-js/) 基于 https 协议实现了推拉流功能,实现流程如下: ![img](./rtc-cdn.png) ## 签名的生成 ```ts /** * 签名生成 * @param {string} offer 包含 sdp 的 offer * @param {string} type 生成签名的类型,'publish' || 'play' * @param {string} app 应用的 app * @param {string} stream 推拉流的名称 */ function getSign(offer, type, app, stream) { const time = Date.now(); const nonce = (Date.now() + Math.random()).toString(32); const paramData = { offer: offer ? offer.sdp : '', time, nonce, app, stream, type, }; const signStr = normalizeParams(paramData) + `&key=${key}`; log('get sign string', signStr); const sign = md5(signStr); log('sign', sign); return { time, nonce, sign, }; } /** * 将参数按照 ASCII 码从小到大排序,并生成 (key=value&key1=value1) 格式的字符串 * @param {object} data 对象 * @return {string} 生成 (key=value&key1=value1) 格式的字符串 */ function normalizeParams(data) { return Object.keys(data).sort().map(key => `${key}=${data[key]}`).join('&') } function log(name, msg) { console.warn(`${name} =>`); console.log(msg); } ```