すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo Live:アップストリーミング URL とストリーミング URL の生成

最終更新日:Mar 01, 2026

ライブストリームを開始するには、ホストにはストリームをプッシュするためのアップストリーミング URL が、視聴者には再生用のストリーミング URL がそれぞれ必要です。このトピックでは、ApsaraVideo Live の署名付きアップストリーミング URL とストリーミング URL を生成する方法について説明します。コンソールを使用した簡単なテスト方法と、本番環境向けのコードベースのアプローチの両方について説明します。

事前準備

URL を生成する前に、以下が完了していることを確認してください:

  • アップストリーミングドメインとストリーミングドメインがコンソールで追加および関連付けられています。詳細については、「ドメインを追加する」をご参照ください。

  • ドメインで URL 署名が有効になっていること。

同時ストリーム数の制限

各アップストリーミングドメインには、サポートできる同時ストリーム数にデフォルトの制限があり、これはライブセンターのリージョンによって異なります:

  • 中国 (北京)、中国 (上海)、中国 (深セン):最大 300 ストリーム

  • その他のリージョン:最大 50 ストリーム

詳細については、「制限事項」をご参照ください。

URL の構造

標準的なライブストリーム URL は、プロトコルドメイン名AppNameStreamNameアクセストークンの 5 つのコンポーネントで構成されます。

フォーマット:{プロトコル}://{ドメイン名}/{AppName}/{StreamName}?auth_key={アクセストークン}

image

コンポーネント

説明

プロトコル

ストリーミングプロトコル。

rtmp

ドメイン名

ストリームをプッシュするためのアップストリーミングドメイン、または再生用のストリーミングドメイン。

example.aliyundoc.com

AppName

異なるアプリケーションやビジネスシナリオを区別するためのカスタムアプリケーション名。

liveApp

StreamName

ライブストリームの一意のカスタム名。

liveStream

アクセストークン

ドメインに設定された認証キーに基づいて MD5 アルゴリズムを使用して生成された暗号化文字列。詳細については、「URL 署名」をご参照ください。

1763451219-0-0-c9139**********08dcaf1dad8381

URL の生成

次のいずれかの方法を選択してください:

  • コンソールでの生成:トライアルやテストに適しています。暗号化されたアクセストークンを自動的に含む URL をワンクリックで生成します。

  • コードによる生成:本番環境に適しています。サーバーサイドで URL 生成を自動化し、柔軟な管理と配信を実現します。

コンソールでの生成

  1. URL ジェネレーターページに移動します。

  2. 次のパラメーターを設定し、URL の生成 をクリックします。

    image

    説明

    URL ジェネレーターは、ライブ字幕ストリーム URL の生成をサポートしていません。

コードによる生成

ステップ 1:URI の構築

ベース URI のフォーマットは {プロトコル}://{ドメイン名}/{AppName}/{StreamName} です。異なるプロトコルの URL の例については、「アップストリーミング URL の例」および「ストリーミング URL の例」をご参照ください。

// 疑似コード
protocol = "rtmp"
domain = "example.aliyundoc.com"
appName = "liveApp"
streamName = "liveStream"
uri = protocol + "://" + domain + "/" + appName + "/" + streamName
// 結果: rtmp://example.aliyundoc.com/liveApp/liveStream

ステップ 2:認証キーの取得

次のいずれかのソースから認証キーを取得します:

説明

アップストリーミング URL にはアップストリーミングドメインのキーを、ストリーミング URL にはストリーミングドメインのキーを使用してください。

ステップ 3:署名付き URL の連結

以下の例では、RTMP プロトコルを使用してアクセストークンを生成し、完全な URL を組み立てる方法を示します。

Java

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class AuthDemo {
    private static String md5Sum(String src) {
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        md5.update(StandardCharsets.UTF_8.encode(src));
        return String.format("%032x", new BigInteger(1, md5.digest()));
    }

private static String aAuth(String uri, String key, long exp) {
    String pattern = "^(rtmp://)?([^/?]+)(/[^?]*)?(\\\\?.*)?$";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(uri);
    String scheme = "", host = "", path = "", args = "";
    if (m.find()) {
        scheme = m.group(1) == null ? "rtmp://" : m.group(1);
        host = m.group(2) == null ? "" : m.group(2);
        path = m.group(3) == null ? "/" : m.group(3);
        args = m.group(4) == null ? "" : m.group(4);
    } else {
        System.out.println("NO MATCH");
    }

    String rand = "0";  // デフォルトは "0" ですが、他の値でも問題ありません
    String uid = "0";   // デフォルトは "0" ですが、他の値でも問題ありません
    String sString = String.format("%s-%s-%s-%s-%s", path, exp, rand, uid, key);
    String hashValue = md5Sum(sString);
    String authKey = String.format("%s-%s-%s-%s", exp, rand, uid, hashValue);
    if (args.isEmpty()) {
        return String.format("%s%s%s%s?auth_key=%s", scheme, host, path, args, authKey);
    } else {
        return String.format("%s%s%s%s&auth_key=%s", scheme, host, path, args, authKey);
    }
}

public static void main(String[] args) {
    // 署名対象のアップストリーミング URL またはストリーミング URL。example.aliyundoc.com はアップストリーミングドメインまたはストリーミングドメイン、liveApp は AppName、liveStream は StreamName です。
    // アップストリーミング URL とストリーミング URL は同じ署名方法を使用します。
    // AppName または StreamName は最大 256 文字で、数字、文字、ハイフン (-)、アンダースコア (_)、等号 (=) を含めることができます。
    String uri = "rtmp://example.aliyundoc.com/liveApp/liveStream";  
    // 認証キー。アップストリーミング URL を生成するには、アップストリーミングドメインのキーを使用します。ストリーミング URL を生成するには、ストリーミングドメインのキーを使用します。
    String key = "<input private key>";                       
    // exp は秒単位の UNIX タイムスタンプです。URL の最終的な有効期限は、このタイムスタンプにドメインの URL 署名で設定された有効期間を加えたものになります。
    // たとえば、exp を現在時刻 + 3600 秒に設定した場合、最終的な有効期限は現在時刻 + 3600 秒 + 有効期間となります。exp を現在時刻に設定した場合、最終的な有効期限は現在時刻 + 有効期間となります。
    long exp = System.currentTimeMillis() / 1000 + 1 * 3600;  
    String authUri = aAuth(uri, key, exp);                    
    System.out.printf("URL : %s\nAuth: %s", uri, authUri);
}
}

Python

import re
import time
import hashlib
import datetime
def md5sum(src):
    m = hashlib.md5()
    if isinstance(src, str):
        src = src.encode('utf-8')
    m.update(src)
    return m.hexdigest()
    
def a_auth(uri, key, exp):
    p = re.compile("^(rtmp://)?([^/?]+)(/[^?]*)?(\\?.*)?$")
    if not p:
        return None
    m = p.match(uri)
    scheme, host, path, args = m.groups()
    if not scheme: scheme = "rtmp://"
    if not path: path = "/"
    if not args: args = ""
    rand = "0"      # デフォルトは "0" ですが、他の値でも問題ありません
    uid = "0"       # デフォルトは "0" ですが、他の値でも問題ありません
    sstring = "%s-%s-%s-%s-%s" %(path, exp, rand, uid, key)
    hashvalue = md5sum(sstring.encode('utf-8'))
    auth_key = "%s-%s-%s-%s" %(exp, rand, uid, hashvalue)
    if args:
        return "%s%s%s%s&auth_key=%s" %(scheme, host, path, args, auth_key)
    else:
        return "%s%s%s%s?auth_key=%s" %(scheme, host, path, args, auth_key)
def main():
    # 署名対象のアップストリーミング URL またはストリーミング URL。example.aliyundoc.com はアップストリーミングドメインまたはストリーミングドメイン、liveApp は AppName、liveStream は StreamName です。
    # アップストリーミング URL とストリーミング URL は同じ署名方法を使用します。
    # AppName または StreamName は最大 256 文字で、数字、文字、ハイフン (-)、アンダースコア (_)、等号 (=) を含めることができます。
    uri = "rtmp://example.aliyundoc.com/liveApp/liveStream"  
    # 認証キー。アップストリーミング URL を生成するには、アップストリーミングドメインのキーを使用します。ストリーミング URL を生成するには、ストリーミングドメインのキーを使用します。
    key = "<input private key>"                         
    # exp は秒単位の UNIX タイムスタンプです。URL の最終的な有効期限は、このタイムスタンプにドメインの URL 署名で設定された有効期間を加えたものになります。
    # たとえば、exp を現在時刻 + 3600 秒に設定した場合、最終的な有効期限は現在時刻 + 3600 秒 + 有効期間となります。exp を現在時刻に設定した場合、最終的な有効期限は現在時刻 + 有効期間となります。
    exp = int(time.time()) + 1 * 3600                   
    authuri = a_auth(uri, key, exp)                     
    print("URL : %s\nAUTH: %s" %(uri, authuri))
if __name__ == "__main__":
    main()

Go

package main
import (
    "crypto/md5"
    "encoding/hex"
    "fmt"
    "regexp"
    "time"
)

func md5sum(src string) string {
    h := md5.New()
    h.Write([]byte(src))
    return hex.EncodeToString(h.Sum(nil))
}

func a_auth(uri, key string, exp int64) string {
    p, err := regexp.Compile("^(rtmp://)?([^/?]+)(/[^?]*)?(\\?.*)?$")
    if err != nil {
        fmt.Println(err)
        return ""
    }
    m := p.FindStringSubmatch(uri)
    var scheme, host, path, args string
    if len(m) == 5 {
        scheme, host, path, args = m[1], m[2], m[3], m[4]
    } else {
        scheme, host, path, args = "rtmp://", "", "/", ""
    }
    rand := "0" // デフォルトは "0" ですが、他の値でも問題ありません
    uid := "0"  // デフォルトは "0" ですが、他の値でも問題ありません
    sstring := fmt.Sprintf("%s-%d-%s-%s-%s", path, exp, rand, uid, key)
    hashvalue := md5sum(sstring)
    auth_key := fmt.Sprintf("%d-%s-%s-%s", exp, rand, uid, hashvalue)
    if len(args) != 0 {
        return fmt.Sprintf("%s%s%s%s&auth_key=%s", scheme, host, path, args, auth_key)
    } else {
        return fmt.Sprintf("%s%s%s%s?auth_key=%s", scheme, host, path, args, auth_key)
    }
}

func main() {
    // 署名対象のアップストリーミング URL またはストリーミング URL。example.aliyundoc.com はアップストリーミングドメインまたはストリーミングドメイン、liveApp は AppName、liveStream は StreamName です。
    // アップストリーミング URL とストリーミング URL は同じ署名方法を使用します。
    // AppName または StreamName は最大 256 文字で、数字、文字、ハイフン (-)、アンダースコア (_)、等号 (=) を含めることができます。
    uri := "rtmp://example.aliyundoc.com/liveApp/liveStream" 
    // 認証キー。アップストリーミング URL を生成するには、アップストリーミングドメインのキーを使用します。ストリーミング URL を生成するには、ストリーミングドメインのキーを使用します。
    key := "<input private key>"     
    // exp は秒単位の UNIX タイムスタンプです。URL の最終的な有効期限は、このタイムスタンプにドメインの URL 署名で設定された有効期間を加えたものになります。
    // たとえば、exp を現在時刻 + 3600 秒に設定した場合、最終的な有効期限は現在時刻 + 3600 秒 + 有効期間となります。exp を現在時刻に設定した場合、最終的な有効期限は現在時刻 + 有効期間となります。
    exp := time.Now().Unix() + 3600                                    
    authuri := a_auth(uri, key, exp)                                       
    fmt.Printf("URL : %s\nAUTH: %s", uri, authuri)
}

PHP

<?php
function a_auth($uri, $key, $exp) {
    preg_match("/^(rtmp:\/\/)?([^\/?]+)?(\/[^?]*)?(\?.*)?$/", $uri, $matches);
    $scheme = $matches[1];
    $host = $matches[2];
    $path = $matches[3];
    $args = $matches[4];
    if  (empty($args)) {
        $args ="";
    }
    if  (empty($scheme)) {
        $scheme ="rtmp://";
    }
    if  (empty($path)) {
        $path ="/";
    }
    $rand = "0";
    // デフォルトは "0" ですが、他の値でも問題ありません
    $uid = "0";
    // デフォルトは "0" ですが、他の値でも問題ありません
    $sstring = sprintf("%s-%u-%s-%s-%s", $path, $exp, $rand, $uid, $key);
    $hashvalue = md5($sstring);
    $auth_key = sprintf("%u-%s-%s-%s", $exp, $rand, $uid, $hashvalue);
    if ($args) {
        return sprintf("%s%s%s%s&auth_key=%s", $scheme, $host, $path, $args, $auth_key);
    } else {
        return sprintf("%s%s%s%s?auth_key=%s", $scheme, $host, $path, $args, $auth_key);
    }
}
// 署名対象のアップストリーミング URL またはストリーミング URL。example.aliyundoc.com はアップストリーミングドメインまたはストリーミングドメイン、liveApp は AppName、liveStream は StreamName です。
// アップストリーミング URL とストリーミング URL は同じ署名方法を使用します。
// AppName または StreamName は最大 256 文字で、数字、文字、ハイフン (-)、アンダースコア (_)、等号 (=) を含めることができます。
$uri = "rtmp://example.aliyundoc.com/liveApp/liveStream";
// 認証キー。アップストリーミング URL を生成するには、アップストリーミングドメインのキーを使用します。ストリーミング URL を生成するには、ストリーミングドメインのキーを使用します。
$key = "<input private key>";
// exp は秒単位の UNIX タイムスタンプです。URL の最終的な有効期限は、このタイムスタンプにドメインの URL 署名で設定された有効期間を加えたものになります。
// たとえば、exp を現在時刻 + 3600 秒に設定した場合、最終的な有効期限は現在時刻 + 3600 秒 + 有効期間となります。exp を現在時刻に設定した場合、最終的な有効期限は現在時刻 + 有効期間となります。
$exp = time() + 3600;
$authuri = a_auth($uri, $key, $exp);
echo "URL :" . $uri;
echo PHP_EOL;
echo "AUTH:" . $authuri;
?>

C#

using System;
using System.Text.RegularExpressions;
using System.Security.Cryptography;
using System.Text;
public class Test
{
    public static void Main()
    {
        // 署名対象のアップストリーミング URL またはストリーミング URL。example.aliyundoc.com はアップストリーミングドメインまたはストリーミングドメイン、liveApp は AppName、liveStream は StreamName です。
        // アップストリーミング URL とストリーミング URL は同じ署名方法を使用します。
        // AppName または StreamName は最大 256 文字で、数字、文字、ハイフン (-)、アンダースコア (_)、等号 (=) を含めることができます。
        string uri= "rtmp://example.aliyundoc.com/liveApp/liveStream";  
        // 認証キー。アップストリーミング URL を生成するには、アップストリーミングドメインのキーを使用します。ストリーミング URL を生成するには、ストリーミングドメインのキーを使用します。
        string key= "<input private key>";                           
        DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
        // exp は秒単位の UNIX タイムスタンプです。URL の最終的な有効期限は、このタイムスタンプにドメインの URL 署名で設定された有効期間を加えたものになります。
        // たとえば、exp を現在時刻 + 3600 秒に設定した場合、最終的な有効期限は現在時刻 + 3600 秒 + 有効期間となります。exp を現在時刻に設定した場合、最終的な有効期限は現在時刻 + 有効期間となります。
        string exp  = Convert.ToInt64((DateTime.Now - dateStart).TotalSeconds+3600).ToString(); 
        string authUri = aAuth(uri, key, exp);
        Console.WriteLine (String.Format("URL :{0}",uri));
        Console.WriteLine (String.Format("AUTH :{0}",authUri));
    }
    public static string aAuth(string uri, string key, string exp)
    {
        Regex regex = new Regex("^(rtmp://)?([^/?]+)(/[^?]*)?(\\\\?.*)?$");
        Match m = regex.Match(uri);
        string scheme = "rtmp://", host = "", path = "/", args = "";
        if (m.Success)
        {
            scheme=m.Groups[1].Value;
            host=m.Groups[2].Value;
            path=m.Groups[3].Value;
            args=m.Groups[4].Value;
        }else{
            Console.WriteLine ("NO MATCH");
        }
        string rand = "0";  // デフォルトは "0" ですが、他の値でも問題ありません
        string uid = "0";   // デフォルトは "0" ですが、他の値でも問題ありません
        string u = String.Format("{0}-{1}-{2}-{3}-{4}",  path, exp, rand, uid, key);
        string hashValue  = Md5(u);
        string authKey = String.Format("{0}-{1}-{2}-{3}", exp, rand, uid, hashValue);
        if (args=="")
        {
            return String.Format("{0}{1}{2}{3}?auth_key={4}", scheme, host, path, args, authKey);
        } else
        {
            return String.Format("{0}{1}{2}{3}&auth_key={4}", scheme, host, path, args, authKey);
        }
    }
    public static string Md5(string value)
    {
        MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
        byte[] bytes = Encoding.ASCII.GetBytes(value);
        byte[] encoded = md5.ComputeHash(bytes);
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<encoded.Length; ++i)
        {
            sb.Append(encoded[i].ToString("x2"));
        }
        return sb.ToString();
   }
}

インジェスト URL の例

プロトコル

説明

RTMP

rtmp://{ドメイン名}/{AppName}/{StreamName}?auth_key={アクセストークン}

ライブストリームのアップストリーミング用の標準プロトコル。

ARTC

artc://{ドメイン名}/{AppName}/{StreamName}?auth_key={アクセストークン}

リアルタイムストリーミング (RTS) のアップストリーミング URL。

SRT

srt://{ドメイン名}:1105?streamid=#!::h={ドメイン名},r=/{AppName}/{StreamName}?auth_key={アクセストークン},m=publish

SRT プロトコルはデフォルトで無効になっています。有効にするには、「SRT アップストリーミング」をご参照ください。

ストリーミング URL の例

URL タイプ

説明

プロトコル

アドレス例

標準ストリーミング URL

SRT を使用してアップストリーミングする場合、再生は RTMP、FLV、HLS、ARTC でサポートされます。

RTMP

rtmp://{ドメイン名}/{AppName}/{StreamName}?auth_key={アクセストークン}

FLV

http://{ドメイン名}/{AppName}/{StreamName}.flv?auth_key={アクセストークン}

HLS

http://{ドメイン名}/{AppName}/{StreamName}.m3u8?auth_key={アクセストークン}

ARTC

artc://{ドメイン名}/{AppName}/{StreamName}?auth_key={アクセストークン}

トランスコードストリーム URL (デフォルトトランスコーディングまたはカスタムトランスコーディング)

StreamName に _{トランスコーディングテンプレートID} を追加します。

トランスコーディングテンプレート ID を取得するには、「ライブストリームトランスコーディング」を設定します。

RTMP

rtmp://{ドメイン名}/{AppName}/{StreamName}_{トランスコーディングテンプレートID}?auth_key={アクセストークン}

FLV

http://{ドメイン名}/{AppName}/{StreamName}_{トランスコーディングテンプレートID}.flv?auth_key={アクセストークン}

HLS

http://{ドメイン名}/{AppName}/{StreamName}_{トランスコーディングテンプレートID}.m3u8?auth_key={アクセストークン}

ARTC

artc://{ドメイン名}/{AppName}/{StreamName}_{トランスコーディングテンプレートID}?auth_key={アクセストークン}

トランスコードストリーム URL (マルチビットレートトランスコーディング)

アダプティブビットレートストリームの場合、StreamName に _{トランスコーディングテンプレートグループID} を追加し、URL に aliyunols=on パラメーターを追加します。

トランスコーディングテンプレートグループ ID を取得するには、「ライブストリームトランスコーディング」を設定します。

HLS

http://{ドメイン名}/{AppName}/{StreamName}_{トランスコーディングテンプレートグループID}.m3u8?aliyunols=on&auth_key={アクセストークン}

遅延ストリーム URL

遅延ストリームの場合、StreamName に -alidelay を追加します。

遅延ストリームを再生に使用する前に、「ストリーム遅延の設定」を行います。

RTMP

rtmp://{ドメイン名}/{AppName}/{StreamName}-alidelay?auth_key={アクセストークン}

FLV

http://{ドメイン名}/{AppName}/{StreamName}-alidelay.flv?auth_key={アクセストークン}

HLS

http://{ドメイン名}/{AppName}/{StreamName}-alidelay.m3u8?auth_key={アクセストークン}

ARTC

artc://{ドメイン名}/{AppName}/{StreamName}-alidelay?auth_key={アクセストークン}

ライブ字幕ストリーム URL

StreamName に _{字幕テンプレート名} を追加します。

字幕テンプレートを作成するには、「ライブ字幕」を設定します。

RTMP

rtmp://{ドメイン名}/{AppName}/{StreamName}_{字幕テンプレート名}?auth_key={アクセストークン}

FLV

http://{ドメイン名}/{AppName}/{StreamName}_{字幕テンプレート名}.flv?auth_key={アクセストークン}

HLS

http://{ドメイン名}/{AppName}/{StreamName}_{字幕テンプレート名}.m3u8?auth_key={アクセストークン}

生成された URL の検証

生成された URL を検証するには、モバイルデバイスのデモアプリを使用してアップストリーミングを行い、PC の VLC メディアプレーヤーで再生することを推奨します。その他のアップストリーミングおよびストリーミング方法については、「ライブストリームのアップストリーミング」および「ライブストリームの再生」をご参照ください。

アップストリーミング URL の検証:

  1. モバイルデバイス (Android または iOS) で QR コードをスキャンして、ApsaraVideo Live デモアプリをダウンロードします。

    image

    説明

    iOS デバイスでは、デモが信頼されていないエンタープライズ開発者からのものであることを示すメッセージが表示される場合があります。[設定] > [一般] > [VPN とデバイス管理] に移動し、Taobao に必要な権限を見つけて、[信頼] をタップしてください。

  2. デモアプリケーションを開きます。[カメラプッシュ] または [画面共有] を選択します。アップストリーミング URL を入力します。コンソールで URL を生成した場合は、QR コードをスキャンして URL を自動入力します。

    imageimage

  3. [開始] をクリックします。

    [ストリーム管理] ページにストリームが表示されることを確認します。表示されない場合は、前の手順が正しく実行されているか確認してください。

    image

ストリーミング URL の検証:

説明

アップストリーミングクライアントを実行し続けてください。そうしないと、再生に失敗します。

  1. VLC メディアプレーヤーをダウンロードしてインストールします。

  2. VLC メディアプレーヤーを実行します。

  3. メニューバーで、[メディア] > [ネットワークストリームを開く] を選択します。

  4. [ネットワーク] タブで、生成されたストリーミング URL を入力します。例:rtmp://pull-singapore.cloud-example.net/ziji/test?auth_key=1750150177-0-0-9b7d7e8b3431acc543a99c69********

    p888206

トラブルシューティング

アップストリーミングまたは再生中に問題が発生した場合は、「トラブルシューティングツール」を使用して URL と認証情報を検証してください。