このページは機械翻訳によるものです。内容の正確さは保証しておりません。 人力翻訳を依頼する

アップストリーミング URL とストリーミング URL を生成する

更新日時2025-03-25 17:53

ApsaraVideo Live は、オンデマンドのストリームのアップストリーミングと再生をサポートしており、事前にリソースを作成する必要はありません。アップストリーミング ドメインとストリーミング ドメインを追加した後、URL を生成できます。このトピックでは、アップストリーミング URL とストリーミング URL を構築する方法について説明します。

使用上の注意

  • 複数のアップストリーミング URL とストリーミング URL を生成して、複数のライブ ストリームを同時に実行できます。ただし、各アップストリーミング ドメインでは、同時ストリーム数が制限されています。ライブストリーミングを行う前に、制限を確認して、ビジネス ニーズに合致していることを確認してください。そうでない場合は、クォータセンター でクォータを増やすか、お問い合わせください

  • デフォルトでは、アップストリーミング ドメインとストリーミング ドメインに対して URL 署名 が有効になっています。生成された URL には、アクセストークンを含める必要があります。そうでない場合、アップストリーミングと再生は失敗します。

URL 形式

アップストリーミング URL

連結ルール: アップストリーミング ドメイン + AppName + StreamName + {アクセストークン}

  • AppNameStreamName はカスタマイズできます。

    ApsaraVideo Live は、AppName ではなく StreamName に基づいてストリームが一意かどうかを判断します。2 つのストリームを区別するには、ストリーム名が異なっている必要があります。

    同じドメインで異なる AppName を使用して同一のストリーム (StreamName) をアップストリーミングする場合は、お問い合わせ いただき、アプリの隔離を有効にしてください。

  • {アクセストークン} は、MD5 アルゴリズムによって計算された暗号化文字列です。詳細については、「アクセストークンの構造」をご参照ください。

例:

  • RTMP: rtmp://demo.aliyundoc.com/app/stream?auth_key={アクセストークン}

  • ARTC: artc://demo.aliyundoc.com/app/stream?auth_key= {アクセストークン}

  • SRT: srt://demo.aliyundoc.com:1105?streamid=#!::h=demo.aliyundoc.com,r=/app/stream?auth_key= {アクセストークン} ,m=publish

ストリーミング URL

ApsaraVideo Live は、標準ストリームに加えて、トランスコード、遅延、文字起こしされたストリームなど、処理されたストリームの再生をサポートしています。連結ルールとサポートされているプロトコルは、ストリームの種類によって異なります。

連結ルール

  • 標準ストリーム

    形式: ストリーミング ドメイン + AppName + StreamName + {アクセストークン}

    例: rtmp://example.aliyundoc.com/app/stream?auth_key={アクセストークン}

  • デフォルトまたはカスタム トランスコーディングを使用したトランスコード ストリーム

    形式: ストリーミング ドメイン + AppName + StreamName_テンプレート ID + {アクセストークン}

    例: rtmp://example.aliyundoc.com/app/stream_{テンプレート ID}?auth_key={アクセストークン}

    要件: デフォルトまたはカスタム トランスコーディング テンプレート を作成する必要があります。

  • マルチビットレート トランスコーディングを使用したトランスコード ストリーム

    形式: ストリーミング ドメイン + AppName + StreamName_テンプレート グループ ID + aliyunols=on + {アクセストークン}

    例: http://example.aliyundoc.com/app/stream_{テンプレート グループ ID}.m3u8?aliyunols=on&auth_key={アクセストークン}

    要件: マルチビットレート トランスコーディング テンプレート グループ を作成する必要があります。

  • 遅延ストリーム

    形式: ストリーミング ドメイン + AppName + StreamName-alidelay + {アクセストークン}

    例: rtmp://example.aliyundoc.com/app/stream-alidelay?auth_key={アクセストークン}

    要件: ストリームに対して ストリーム遅延を構成 する必要があります。そうでない場合、生成された URL を介して再生することはできません。

  • ライブ字幕付きストリーム

    形式: ストリーミング ドメイン + AppName + StreamName_字幕テンプレート名 + {アクセストークン}

    例: rtmp://example.aliyundoc.com/app/stream_{字幕テンプレート名}?auth_key={アクセストークン}

    要件: ライブ字幕テンプレートとルールを作成 する必要があります。

サポートされているプロトコル

ストリームの種類

RTMP

FLV

HLS

ARTC

(RTS 用)

ストリームの種類

RTMP

FLV

HLS

ARTC

(RTS 用)

標準ストリーム

✔️

✔️

✔️

✔️

トランスコード ストリーム

(デフォルト/カスタム)

✔️

✔️

✔️

✔️

トランスコード ストリーム

(マルチビットレート)

✔️

遅延ストリーム

✔️

✔️

✔️

✔️

ライブ字幕付きストリーム

✔️

✔️

✔️

  • RTMP: rtmp://example.aliyundoc.com/app/stream?auth_key={アクセストークン}

  • FLV: http://example.aliyundoc.com/app/stream.flv?auth_key={アクセストークン}

  • HLS: http://example.aliyundoc.com/app/stream.m3u8?auth_key={アクセストークン}

  • ARTC: artc://example.aliyundoc.com/app/stream?auth_key={アクセストークン}

説明

SRT 経由でアップストリーミングされたストリームの場合、次の再生プロトコルがサポートされています: RTMP、FLV、HLS、ARTC。SRT 経由でストリームを再生する場合は、アカウント マネージャーに相談するか、お問い合わせください

URL を生成する

ApsaraVideo Live は、コンソールまたはプログラムでアップストリーミング URL とストリーミング URL を生成することをサポートしています。

コンソールで URL を生成する

ライブ URL ジェネレーター を使用してこれを行うことができます。

最初に アップストリーミング ドメインをストリーミング ドメインに関連付ける 必要があります。

生成された URL には、アクセストークンが含まれています。

説明

このメソッドは、ライブ字幕付きストリームの URL 生成をサポートしていません。

コードを使用して URL を生成する

ステップ 1: 暗号鍵を取得する

署名付き URL を生成する前に、暗号化用のキーを取得する必要があります。

  • アップストリーミング URL を生成するには、アップストリーミング ドメインのキーを取得します。

  • ストリーミング URL を生成するには、ストリーミング ドメインのキーを取得します。

コンソール で、または DescribeLiveDomainConfigs を呼び出すことによって、両方取得できます。

Java SDK サンプルコード

// 角かっこ内のプレースホルダー値を実際の値に置き換えます。
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
DescribeLiveDomainConfigsRequest describeLiveDomainConfigsRequest=new DescribeLiveDomainConfigsRequest();
describeLiveDomainConfigsRequest.setDomainName("<DomainName>"); // ドメイン名
describeLiveDomainConfigsRequest.setFunctionNames("aliauth");

DescribeLiveDomainConfigsResponse describeLiveStreamSnapshotInfoResponse = null;
try {
     describeLiveStreamSnapshotInfoResponse = client.getAcsResponse(describeLiveDomainConfigsRequest);
 } catch (ClientException e) {
     e.printStackTrace();
}
// キー
String key="";


for(DescribeLiveDomainConfigsResponse.DomainConfig.FunctionArg f:describeLiveStreamSnapshotInfoResponse.getDomainConfigs().get(0).getFunctionArgs()){
     if("auth_key1".equals(f.getArgName())){
            key=f.getArgValue();
      }
}

System.out.println(key);

 

ステップ 2: 署名付き URL を生成する

次のサンプルコードは、RTMP プロトコルを使用して署名付き URL を生成する方法を示しています。

生成する前に、「署名付き URL の構成」をご参照ください。

Java
Python
Go
PHP
C#
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。次の例では、ドメイン名は example.aliyundoc.com、AppName は liveApp、StreamName は liveStream です。
    // アップストリーミング URL とストリーミング URL は同じメソッドを使用して暗号化されます。
    // AppName と StreamName は、文字、数字、ハイフン (-)、アンダースコア (_)、等号 (=) をサポートしています。最大長は 256 文字です。
    String uri = "rtmp://example.aliyundoc.com/liveApp/liveStream";  
    // キー。アップストリーミング URL を生成するには、アップストリーミング ドメインのキーを使用します。ストリーミング URL を生成するには、ストリーミング ドメインのキーを使用します。
    String key = "<input private key>";                       
    // exp 値は、秒単位で測定される UNIX タイムスタンプです。実際の有効期限は、exp 値 + ドメイン名に設定された有効期間です。
    // たとえば、exp を現在の時刻 + 3600 秒に設定した場合、実際の有効期限は現在の時刻 + 3600 秒 + 有効期間になります。現在の時刻に設定した場合、有効期限は現在の時刻 + 有効期間になります。
    long exp = System.currentTimeMillis() / 1000 + 1 * 3600;  
    String authUri = aAuth(uri, key, exp);                    
    System.out.printf("URL : %s\nAuth: %s", uri, authUri); // URL、認証済み
}
}
import re
import time
import hashlib
import datetime
def md5sum(src):
    m = hashlib.md5()
    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。次の例では、ドメイン名は example.aliyundoc.com、AppName は liveApp、StreamName は liveStream です。
    # アップストリーミング URL とストリーミング URL は同じメソッドを使用して暗号化されます。
    # AppName と StreamName は、文字、数字、ハイフン (-)、アンダースコア (_)、等号 (=) をサポートしています。最大長は 256 文字です。
    uri = "rtmp://example.aliyundoc.com/liveApp/liveStream"  
    # キー。アップストリーミング URL を生成するには、アップストリーミング ドメインのキーを使用します。ストリーミング URL を生成するには、ストリーミング ドメインのキーを使用します。
    key = "<input private key>"                         
    # exp 値は、秒単位で測定される UNIX タイムスタンプです。実際の有効期限は、exp 値 + ドメイン名に設定された有効期間です。
    # たとえば、exp を現在の時刻 + 3600 秒に設定した場合、実際の有効期限は現在の時刻 + 3600 秒 + 有効期間になります。現在の時刻に設定した場合、有効期限は現在の時刻 + 有効期間になります。
    exp = int(time.time()) + 1 * 3600                   
    authuri = a_auth(uri, key, exp)                     
    print("URL : %s\nAUTH: %s" %(uri, authuri)) # URL、認証済み
if__name__ == "__main__":
    main()
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。次の例では、ドメイン名は example.aliyundoc.com、AppName は liveApp、StreamName は liveStream です。
    // アップストリーミング URL とストリーミング URL は同じメソッドを使用して暗号化されます。
    // AppName と StreamName は、文字、数字、ハイフン (-)、アンダースコア (_)、等号 (=) をサポートしています。最大長は 256 文字です。
    uri := "rtmp://example.aliyundoc.com/liveApp/liveStream" 
    // キー。アップストリーミング URL を生成するには、アップストリーミング ドメインのキーを使用します。ストリーミング URL を生成するには、ストリーミング ドメインのキーを使用します。
    key := "<input private key>"     
    // exp 値は、秒単位で測定される UNIX タイムスタンプです。実際の有効期限は、exp 値 + ドメイン名に設定された有効期間です。
    // たとえば、exp を現在の時刻 + 3600 秒に設定した場合、実際の有効期限は現在の時刻 + 3600 秒 + 有効期間になります。現在の時刻に設定した場合、有効期限は現在の時刻 + 有効期間になります。
    exp := time.Now().Unix() + 3600                                    
    authuri := a_auth(uri, key, exp)                                       
    fmt.Printf("URL : %s\nAUTH: %s", uri, authuri) // URL、認証済み
}
<?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。次の例では、ドメイン名は example.aliyundoc.com、AppName は liveApp、StreamName は liveStream です。
// アップストリーミング URL とストリーミング URL は同じメソッドを使用して暗号化されます。
// AppName と StreamName は、文字、数字、ハイフン (-)、アンダースコア (_)、等号 (=) をサポートしています。最大長は 256 文字です。
$uri = "rtmp://example.aliyundoc.com/liveApp/liveStream";
// キー。アップストリーミング URL を生成するには、アップストリーミング ドメインのキーを使用します。ストリーミング URL を生成するには、ストリーミング ドメインのキーを使用します。
$key = "<input private key>";
// exp 値は、秒単位で測定される UNIX タイムスタンプです。実際の有効期限は、exp 値 + ドメイン名に設定された有効期間です。
// たとえば、exp を現在の時刻 + 3600 秒に設定した場合、実際の有効期限は現在の時刻 + 3600 秒 + 有効期間になります。現在の時刻に設定した場合、有効期限は現在の時刻 + 有効期間になります。
$exp = time() + 3600;
$authuri = a_auth($uri, $key, $exp);
echo "URL :" . $uri; // URL
echo PHP_EOL;
echo "AUTH:" . $authuri; // 認証済み
?>
using System;
using System.Text.RegularExpressions;
using System.Security.Cryptography;
using System.Text;
public class Test
{
    public static void Main()
    {
        // 暗号化する URL。次の例では、ドメイン名は example.aliyundoc.com、AppName は liveApp、StreamName は liveStream です。
        // アップストリーミング 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 タイムスタンプです。実際の有効期限は、exp 値 + ドメイン名に設定された有効期間です。
        // たとえば、exp を現在の時刻 + 3600 秒に設定した場合、実際の有効期限は現在の時刻 + 3600 秒 + 有効期間になります。現在の時刻に設定した場合、有効期限は現在の時刻 + 有効期間になります。
        string exp  = Convert.ToInt64((DateTime.Now - dateStart).TotalSeconds+3600).ToString(); 
        string authUri = aAuth(uri, key, exp);
        Console.WriteLine (String.Format("URL :{0}",uri)); // URL
        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();
   }
}

関連情報

  • 目次 (1, M)
  • 使用上の注意
  • URL 形式
  • アップストリーミング URL
  • ストリーミング URL
  • URL を生成する
  • コンソールで URL を生成する
  • コードを使用して URL を生成する
  • 関連情報
フィードバック