最近更新时间:2023.09.11 20:11:08
首次发布时间:2022.04.13 14:30:42
直播支持两种生成方式:手动拼接和地址生成器生成。
常见的直播地址中,通常都包含 domain、AppName、StreamName 和鉴权信息。
以 RTMP 类型的推流地址为例,包含鉴权的推流地址如下图所示。
参数说明如下表所示。
参数 | 说明 |
---|---|
domain | 配置的推/拉流域名。如果没有添加域名,您可先登录控制台添加域名 |
AppName | 应用名,自定义的应用名 |
StreamName | 流名称,自定义的流名称 |
鉴权信息 | 根据鉴权信息拼接规则拼接鉴权信息 |
在直播推/拉流地址中,鉴权信息的拼接格式为volcTime={UnixTime}&volcSecret=md5("/{AppName}/{StreamName}{SecretKey}{volcTime}")
鉴权信息参数说明如下表所示。
参数 | 说明 |
---|---|
UnixTime | 过期时间,Unix 时间戳,单位为秒。需大于当前服务器时间,例如 volcTime=1653632422 |
AppName | 应用名称,例如 live |
StreamName | 流名称,例如 livestream |
SecretKey | 鉴权秘钥,在配置 URL 鉴权时获取,可使用主 KEY 或副 KEY,例如 volcSecret=aa8e6921abade5a96a88888888****88 |
地址示例
以 RTMP 类型的推流地址为例,包含鉴权的推流地址如下所示。
rtmp://doc.example.pull.com/live/livestream?volcTime=1653632422&volcSecret=aa8e6921abade5a96a88888888****88
地址类型 | 拼接规则 |
---|---|
推流地址 | rtmp://domain/{AppName}/{StreamName}?{鉴权信息} |
拉流地址 |
|
说明
我们提供了 Go、Python、Java、PHP 语言的鉴权代码示例,方便您生成带鉴权的推/拉流地址。
本节为您提供 Go、Python、Java、PHP 语言的鉴权代码示例。您可以根据业务需要,生成带鉴权的推/拉流地址。
以 RTMP 类型的推流地址为例,各语言的示例代码如下所示。
package main import ( "crypto/md5" "fmt" ) func main() { fmt.Println(GenAuthUrl("testDomain", "testApp", "testStream", "testKey", 1636963457)) } func GenAuthUrl(domain, app, stream, secretKey string, volcTime int64) string { src := fmt.Sprintf("/%s/%s%s%d", app, stream, secretKey, volcTime) sign := fmt.Sprintf("%x", md5.Sum([]byte(src))) return fmt.Sprintf("rtmp://%s/%s/%s?volcTime=%d&volcSecret=%s", domain, app, stream, volcTime, sign) }
import hashlib def GenAuthUrl(domain, app, stream, secretKey, volcTime): src = "/%s/%s%s%d" % (app, stream, secretKey, volcTime) sign = hashlib.md5(src.encode("utf8")).hexdigest() return "rtmp://%s/%s/%s?volcTime=%d&volcSecret=%s" % (domain, app, stream, volcTime, sign) if __name__ == '__main__': print(GenAuthUrl("testDomain", "testApp", "testStream", "testKey", 1636963457))
package demo; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Demo1 { public static void main(String[] args) throws NoSuchAlgorithmException { System.out.println((GenAuthUrl("testDomain", "testApp", "testStream", "testKey", 1636963457))); } public static String GenAuthUrl(String domain, String app, String stream, String secretKey, int volcTime) throws NoSuchAlgorithmException { String src = String.format("/%s/%s%s%d", app, stream, secretKey, volcTime); MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] md5Bytes = md5.digest(src.getBytes(StandardCharsets.UTF_8)); String sign = ""; for (int i = 0; i < md5Bytes.length; i++) { sign += Integer.toHexString(md5Bytes[i] | 0xFFFFFF00).substring(6); } return String.format("rtmp://%s/%s/%s?volcTime=%d&volcSecret=%s", domain, app, stream, volcTime, sign); } }
<?php function GenAuthUrl($domain, $app, $stream, $secretKey, $volcTime){ $src = sprintf("/%s/%s%s%d", $app, $stream, $secretKey, $volcTime); $sign = sprintf("%s",md5($src)); return sprintf("rtmp://%s/%s/%s?volcTime=%d&volcSecret=%s",$domain, $app, $stream, $volcTime, $sign); } echo GenAuthUrl("testDomain", "testApp", "testStream", "testKey", 1636963457);