You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们
导航

生成直播地址

最近更新时间2023.09.11 20:11:08

首次发布时间2022.04.13 14:30:42

直播支持两种生成方式:手动拼接地址生成器生成

  • 手动拼接:适合业务批量生成推拉流地址,使用视频直播提供的规则,无需调用接口,即可使用直播服务;
  • 地址生成器生成:适合生成单个直播流,无需代码基础,直接页面操作即可。

前提条件

  • 已参考快速入门,完成推流域名和拉流域名;
  • 已经配置 URL 鉴权的域名,生成直播地址时需要在地址上增加鉴权信息,如果没有配置则不需要。URL 鉴权配置方式请参见域名配置

背景信息

直播地址示例

常见的直播地址中,通常都包含 domain、AppName、StreamName 和鉴权信息。
以 RTMP 类型的推流地址为例,包含鉴权的推流地址如下图所示。

alt

参数说明如下表所示。

参数说明
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

方法一:手动拼接

  1. 获取拼接地址类型协议类型,参考下表,获取拼接规则。
地址类型拼接规则
推流地址rtmp://domain/{AppName}/{StreamName}?{鉴权信息}

拉流地址

  • RTMP:rtmp://{Domain}/{AppName}/{StreamName}?{鉴权信息}
  • FLV:https://{Domain}/{AppName}/{StreamName}.flv?{鉴权信息}
  • HLS:https://{Domain}/{AppName}/{StreamName}.m3u8?{鉴权信息}
  • RTM:https://{Domain}/{AppName}/{StreamName}.sdp?{鉴权信息}
  1. 根据拼接规则填写推/拉流 domain、自定义的 AppName 和自定义的 StreamName。
  2. 根据鉴权信息拼接规则填写鉴权信息参数。

说明

我们提供了 Go、Python、Java、PHP 语言的鉴权代码示例,方便您生成带鉴权的推/拉流地址。

  1. 拼接后,获得完整的直播地址,可以进行直播推/拉流。

方法二:地址生成器

  1. 在视频直播控制台中,选择导航栏的地址生成器
  2. 根据页面提示选择地址类型和域名,并填写自定义的 AppName、自定义的 StreamName 和过期时间。

  1. 单击生成地址按钮。可在生成结果下获取新生成的推/拉流地址。

鉴权代码示例

本节为您提供 Go、Python、Java、PHP 语言的鉴权代码示例。您可以根据业务需要,生成带鉴权的推/拉流地址。

以 RTMP 类型的推流地址为例,各语言的示例代码如下所示。

Go 代码示例

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

Python 代码示例

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

Java 代码示例

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 代码示例

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