You need to enable JavaScript to run this app.
导航

生成直播地址

最近更新时间2024.02.28 11:36:32

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

本文为您介绍直播推/拉流地址的生成方式及适用场景。

使用场景

  • 手动拼接:适合业务批量生成推/拉流地址,使用视频直播提供的规则,无需调用接口,即可使用直播服务;
  • 地址生成器生成:适合生成单个直播流,无需代码基础,直接页面操作即可;
  • 使用 API 生成:适合于在应用程序中集成直播功能实现自动生成直播地址的场景。

前提条件

  • 已参考快速入门,完成推流域名和拉流域名的添加及配置;
  • 如需对直播地址进行鉴权,需为域名开启 URL 鉴权并配置 SecretKey。使用视频直播控制台为域名开启 URL 鉴权配置请参见URL 鉴权;使用 API 接口为域名开启 URL 鉴权配置请参见添加或更新推拉流鉴权

背景信息

直播地址示例

常见的直播地址中,通常都包含 Domain、AppName、StreamName 和鉴权信息。

以 RTMP 协议类型的推流地址为例,包含鉴权的推流地址如下图所示。

直播地址参数说明如下表所示。

参数说明
Domain已添加的域名,生成推流地址时使用推流域名,生成拉流地址时使用拉流域名。
AppName应用名称,自定义的直播流的应用名称标识。拉取指定推流时,推拉流地址的 AppName 需一致。
StreamName流名称,自定义的直播流的流名称标识。 拉取制定推流时,推拉流地址的 StreamName 需一致。
鉴权信息根据鉴权信息拼接规则拼接鉴权信息。

鉴权信息拼接规则

在直播推/拉流地址中,鉴权信息的拼接格式为 volcTime={UnixTime}&volcSecret=md5("/{AppName}/{StreamName}{SecretKey}{volcTime}")

鉴权信息参数说明如下表所示。

参数说明
UnixTime推拉流地址过期时间的 Unix 时间戳,单位为秒,过期后地址不可用。例如 2022-05-27 14:20:22 的Unix 时间为 1653632422
AppName应用名称,使用直播地址中的 AppName 字段值,例如 live
StreamName流名称,使用直播地址中的 StreamName 字段值,例如 livestream
SecretKey鉴权密钥,您可以使用视频直播控制台在为域名开启 URL 鉴权时自定义或由系统自动生成鉴权密钥,如 A1B2C3d4e5f6

地址示例

以 RTMP 类型的推流地址为例,使用如上鉴权参数示例值拼接后,volcSecret 值为 md5("/live/livestreamA1B2C3d4e5f61653632422")volcSecret=e5bb77201cbaa2f9ccdd316fcda4c212

则当前推流域名为 push.example.com 时,包含鉴权的推流地址如下所示。

rtmp://push.example.com/live/livestream?volcTime=1653632422&volcSecret=e5bb77201cbaa2f9ccdd316fcda4c212

方法一:手动拼接

  1. 获取拼接地址类型协议类型,参考下表,获取拼接规则。

    地址类型拼接规则
    推流地址rtmp://{Domain}/{AppName}/{StreamName}?{鉴权信息}

    拉流地址

    • RTMP:rtmp://{Domain}/{AppName}/{StreamName}?{鉴权信息}
    • FLV:https://{Domain}/{AppName}/{StreamName}.flv?{鉴权信息}
    • HLS:https://{Domain}/{AppName}/{StreamName}.m3u8?{鉴权信息}https://{Domain}/{AppName}/{StreamName}/index.m3u8?{鉴权信息}
    • RTM:https://{Domain}/{AppName}/{StreamName}.sdp?{鉴权信息}
  2. 根据拼接规则填 Domain、AppName 和 StreamName。

  3. 根据鉴权信息拼接规则填写鉴权信息参数。

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

方法二:地址生成器生成

  1. 登录视频直播控制台,左侧导航栏选择直播工具 > 地址生成器

  2. 根据页面提示选择地址类型和域名,并填写自定义的 AppName、自定义的 StreamName 和过期时间。

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

方法三:调用 API 生成

  1. (可选)调用添加或更新推拉流鉴权接口,为域名开启并配置鉴权密钥。
  2. 调用生成推流地址接口生成推流地址。
  3. 调用生成拉流地址接口生成拉流地址。

说明

推荐您使用服务端 SDK 来调用 API。

原生代码示例

本节为您提供 Go、Python、Java、PHP 语言生成带鉴权直播地址的原生代码示例。

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

Go

package main

import (
   "crypto/md5"
   "fmt"
)

func main() {
   fmt.Println(GenAuthUrl("testDomain", "testApp", "testStream", "testsecretKey", 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", "testsecretKey", 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", "testsecretKey", 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, secretsecretKey, 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", "testsecretKey", 1636963457);