tencent cloud

Cloud Streaming Services

신규 사용자 가이드
제품 소개
제품 개요
하위 제품 소개
기본 개념
제품 기능
응용 시나리오
제품 장점
사용 제한
구매 가이드
가격 리스트
기본 서비스
부가 서비스
선불 패키지
구매 프로세스
과금 변경
환불 정책
청구서 조회
연장 안내
연체시 서비스 중지 설명
과금 FAQ
LVB
개요
응용 시나리오
시작하기
SDK 연결 안내
LEB(초저지연 라이브 방송)
개요
LEB와 LVB의 차이점
응용 시나리오
시작하기
SDK 통합
콘솔 가이드
콘솔 소개
개요
Domain Management
스트리밍
리소스 패키지 관리
기능 설정
릴레이
사용량 과금
CAM 액세스 제어
기능 사례
Push and Playback
기능
Live Streaming Security
해외 라이브 방송
콜백 이벤트 정보 알림
자주 사용하는 3rd party 툴 가이드
SDK 사례
0. SDK 통합 가이드
2. 재생
3. 고급 기능
API문서
History
Introduction
API Category
Making API Requests
Live Pad APIs
Live Stream Mix APIs
Time Shifting APIs
Monitoring Data Query APIs
Billing Data Query APIs
Live Transcoding APIs
Delayed Playback Management APIs
Domain Name Management APIs
Watermark Management APIs
Certificate Management APIs
Stream Pulling APIs
Recording Management APIs
Live Callback APIs
Screencapturing and Porn Detection APIs
Authentication Management APIs
Live Stream Management APIs
Data Types
Error Codes
유지보수 가이드
비디오 랙 최적화(V2)
푸시 스트리밍 실패 문제 해결
재생 실패 문제 해결
라이브 방송 딜레이 문제 해결
풀 스트림 비디오 품질 저하 문제 해결
라이브 방송에 COS bucket 권한을 부여하여 화면 캡처 저장
장애 처리
라이브 방송 혼합 스트림 오류: InvalidParameter.OtherError
FAQs
라이브 방송 기본 관련
푸시 및 재생
라이브 방송 과금
라이브 방송 해외 관련
라이브 레코딩
클라우드 혼합 스트리밍 관련
도메인 설정 관련
Apple ATS 적용 관련
SLA
CSS Service Level Agreement
CSS 정책
개인 정보 보호 정책
데이터 처리 및 보안 계약

푸시 스트림 설정

PDF
포커스 모드
폰트 크기
마지막 업데이트 시간: 2023-02-27 15:47:12
라이브 스트리밍 콘텐츠를 보호하기 위해 기본적으로 푸시 도메인에 대해 푸시 인증이 활성화되어 있습니다. 푸시 도메인의 세부 정보 페이지에서 주소 생성기를 사용하여 CSS 플랫폼에 스트림(라이브 비디오 업로드)을 푸시하는 데 사용할 수 있는 푸시 URL을 생성할 수 있습니다.

주의 사항

CSS는 테스트 도메인 이름 xxxx.tlivepush.com을 제공합니다. 라이브 푸시를 테스트하는 데 사용할 수 있지만, 비즈니스 목적의 푸시 도메인 이름으로 사용하지 않는 것이 좋습니다.
푸시 URL은 지정된 만료 시간까지 유효합니다. 만료되면 새 URL을 생성해야 합니다.

전제 조건

CSS 서비스를 활성화했습니다.

인증 설정

1. 도메인 관리로 이동하여 설정할 푸시 도메인 또는 관리를 클릭해 도메인 상세 페이지로 이동합니다.
2. 푸시 설정을 클릭하고 인증 설정 탭에서 편집을 클릭합니다.

3.

팝업 창에서 푸시 인증을 활성화합니다.
4. 기본 KEY와 백업 KEY를 입력하고 저장을 클릭합니다.

설명:
기본 KEY는 필수이고 백업 KEY는 선택 사항입니다. 둘 다 입력하면 하나의 KEY가 유출되었을 때 다른 KEY로 전환할 수 있습니다.

푸시 주소 생성기

작업 단계

1. 도메인 관리로 이동하여 설정할 푸시 스트림 도메인 또는 관리를 클릭해 도메인 상세 페이지로 이동합니다.
2. 푸시 설정을 선택하고 > 푸시 주소 생성기에서 다음 설정을 완료합니다.
2.1 만료 시간을 선택합니다. (예시: 2022-11-24 16:00:35)
2.2 사용자 정의 스트림 이름 StreamName을 입력합니다. (예: livetest)
2.3 푸시 주소 생성을 클릭하여 StreamName이 포함된 푸시 URL을 생성합니다.

3. 푸시 도메인에 대한 인증을 활성화하지 않은 경우 푸시 구성 > 푸시 URL 섹션에서 RTMP, WebRTC, SRT 및 RTMP over SRT의 4개 URL을 찾을 수 있습니다. StreamName을 귀하의 스트림 이름으로 바꾸면 해당 재생 URL을 사용하여 스트림을 재생할 수 있습니다.


푸시 URL 형식

RTMP 푸시 URL은 다음과 같습니다.
rtmp://domain/AppName/StreamName?txSecret=Md5(key+StreamName+hex(time))&txTime=hex(time)
이 중,
domain: 푸시 도메인 이름.
AppName: 기본적으로 live이며 사용자 정의할 수 있는 라이브 스트리밍 애플리케이션 이름.
StreamName: 라이브 스트림을 식별하는 데 사용되는 사용자 정의 스트림 이름.
txSecret: 푸시 인증이 활성화된 후 생성된 인증 문자열.
txTime: 콘솔에서 푸시 URL에 대해 설정된 만료 타임스탬프.
주의:
인증을 활성화한 경우 txTime이 유효 시간입니다.
편의상 콘솔에서 설정한 시간은 실제 만료 시간입니다. 인증을 활성화하면 시스템이 푸시 URL을 생성할 때 txTime을 계산합니다.
만료 시간 전에 푸시 또는 재생을 시작하고 스트림이 중단되지 않는 한 URL이 만료된 후에도 푸시 또는 재생을 계속할 수 있습니다.

푸시 URL 샘플 코드

푸시 URL을 생성하기 위해 PHP, Java 및 Go 샘플 코드를 제공합니다. 코드를 보려면 다음 단계를 따르세요.
1. 도메인 관리로 이동합니다.
2. 푸시 도메인 이름을 클릭하거나 오른쪽에 있는 관리를 클릭하여 세부 정보 페이지로 이동합니다.
3. 푸시 구성을 선택하고 아래로 스크롤하여 푸시 주소 샘플 코드를 찾습니다.
4. 탭을 클릭하면 PHP, Java 및 Go용 샘플 코드를 볼 수 있습니다.
PHP
Java
GO
/**
* 푸시 스트림 주소 획득
* key와 만료 시간을 전달하지 않는 경우 링크 도용 방지 url 반환
* @param domain 푸시 스트림에 사용하는 도메인
* streamName 각 푸시 스트림 주소를 구분하는 고유한 스트림 이름
* key 보안 키
* time 만료 시간 sample 2016-11-12 12:00:00
* @return String url
*/
function getPushUrl($domain, $streamName, $key = null, $time = null){
if($key && $time){
$txTime = strtoupper(base_convert(strtotime($time),10,16));
//txSecret = MD5( KEY + streamName + txTime )
$txSecret = md5($key.$streamName.$txTime);
$ext_str = "?".http_build_query(array(
"txSecret"=> $txSecret,
"txTime"=> $txTime
));
}
return "rtmp://".$domain."/live/".$streamName . (isset($ext_str) ? $ext_str : "");
}

echo getPushUrl("123.test.com","123456","69e0daf7234b01f257a7adb9f807ae9f","2016-09-11 20:08:07");

package com.test;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Test {

public static void main(String[] args) {
System.out.println(getSafeUrl("txrtmp", "11212122", 1469762325L));
}

private static final char[] DIGITS_LOWER =
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

/*
* KEY+ streamName + txTime
*/
private static String getSafeUrl(String key, String streamName, long txTime) {
String input = new StringBuilder().
append(key).
append(streamName).
append(Long.toHexString(txTime).toUpperCase()).toString();

String txSecret = null;
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
txSecret = byteArrayToHexString(
messageDigest.digest(input.getBytes("UTF-8")));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

return txSecret == null ? "" :
new StringBuilder().
append("txSecret=").
append(txSecret).
append("&").
append("txTime=").
append(Long.toHexString(txTime).toUpperCase()).
toString();
}

private static String byteArrayToHexString(byte[] data) {
char[] out = new char[data.length << 1];

for (int i = 0, j = 0; i < data.length; i++) {
out[j++] = DIGITS_LOWER[(0xF0 & data[i]) >>> 4];
out[j++] = DIGITS_LOWER[0x0F & data[i]];
}
return new String(out);
}
}

package a

import (
"crypto/md5"
"fmt"
"strconv"
"strings"
"time"
)

func GetPushUrl(domain, streamName, key string, time int64)(addrstr string){
var ext_str string
if key != "" && time != 0{
txTime := strings.ToUpper(strconv.FormatInt(time, 16))
txSecret := md5.Sum([]byte(key + streamName + txTime))
txSecretStr := fmt.Sprintf("%x", txSecret)
ext_str = "?txSecret=" + txSecretStr + "&txTime=" + txTime
}
addrstr = "rtmp://" + domain + "/live/" + streamName + ext_str
return
}
/*
*domain: 123.test.com
*streamName: streamname
*key: 69e0daf7234b01f257a7adb9f807ae9f
*time: 2022-04-26 14:57:19 CST
*/
func main(){
domain, streamName, key := "123.test.com", "streamname", "69e0daf7234b01f257a7adb9f807ae9f"
//CST: ChinaStandardTimeUT, "2006-01-02 15:04:05 MST" must be const
t, err := time.Parse("2006-01-02 15:04:05 MST", "2022-04-26 14:57:19 CST")
if err != nil{
fmt.Println("time transfor error!")
return
}
fmt.Println(GetPushUrl(domain, streamName, key, t.Unix()))
return
}


후속 작업

푸시 URL이 생성된 후 스트림 푸시를 시작할 수 있습니다. 자세한 내용은 라이브 방송 푸시 스트림을 참고하십시오.

도움말 및 지원

문제 해결에 도움이 되었나요?

피드백