스트림 요청은 라이브 스트림 이벤트의 세션을 등록합니다. 자세한 내용은 스트림 요청하기를 참고하세요.
이 페이지에서는 HMAC 토큰을 사용하여 스트림 요청을 인증하는 방법을 설명합니다.
시작하기 전에
계속하기 전에 다음을 수행하세요.
- 기본 요건을 완료합니다.
- Google Ad Manager 계정에서 라이브 스트림 이벤트에 대해 스트림 생성 인증 키를 사용 설정합니다. 토큰 인증을 사용하는 경우 키가 필요합니다.
HMAC 토큰 생성
토큰을 생성하려면 다음을 실행하세요.
- 라이브 스트림의 애셋 키와 만료 시간을 수집합니다. 자세한 내용은 DAI 스트림 세션 생성 요청에 대한 인증 사용 설정을 참고하세요.
다음 매개변수를 알파벳순으로 정렬하고 틸드
~문자로 매개변수를 구분합니다.event=ASSET_KEY~exp=EXPIRATION다음을 바꿉니다.
ASSET_KEY: 필수. 라이브 스트림 이벤트의 애셋 키입니다.EXPIRATION: 필수. 토큰의 만료 타임스탬프입니다(유닉스 시간).
DAI 인증 키를 사용하여 토큰 문자열의 SHA-256 해시를 계산합니다.
해시 출력을 16진수로 형식 지정합니다.
토큰 문자열에 서명하려면 이전에 수집한 매개변수 끝에 서명을 추가합니다.
event=...~hmac=HMAC_SIGNATUREHMAC_SIGNATURE을 DAI 인증 키를 사용하여 토큰 문자열을 해싱하여 생성한 서명으로 바꿉니다.서명된 토큰 문자열을 안전하게 전달하려면 서명된 토큰 문자열에 URL 인코딩을 적용하세요.
다음 예에서는 60초 이내에 만료되는 토큰 문자열을 서명하고 인코딩합니다.
# Add 60 seconds to the current time
future_epoch=$((EPOCHSECONDS + 60))
echo "Current: $EPOCHSECONDS"
echo "Future: $future_epoch"
# Current: 1767389133
# Future: 1767389193
# Sample DAI stream authentication key
key="DE0E9..."
# Sort parameters in the token string
token="event=YRB0Bl0oQRCb5J-maPpJUQ~exp=1767389193"
# Generate the token's signature.
echo -n $token | openssl dgst -sha256 -mac HMAC -macopt key:$key
# SHA2-256(stdin)= 9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248
# Sign the token: event=YRB0Bl0oQRCb5J-maPpJUQ~exp=1767389193~hmac=9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248
# Encode the token: event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248
HMAC 토큰을 사용하여 라이브 스트림 세션 요청
HMAC 토큰으로 스트림 생성 요청을 인증하려면 다음 중 하나를 실행하세요.
Authorization 요청 헤더
curl "https://dai.google.com/linear/v1/hls/event/YRB0Bl0oQRCb5J-maPpJUQ/stream" \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: DCLKDAI token=event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248"
쿼리 문자열 매개변수
curl "https://dai.google.com/linear/v1/hls/event/YRB0Bl0oQRCb5J-maPpJUQ/stream?auth-token=event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248" \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded"
양식 데이터 필드
curl "https://dai.google.com/linear/v1/hls/event/YRB0Bl0oQRCb5J-maPpJUQ/stream" \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "auth-token=event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248"
성공하면 다음과 같은 JSON 응답이 표시됩니다.
{
"hls_master_playlist": "https://dai.google.com/linear/hls/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/master.m3u8",
"media_verification_url": "https://dai.google.com/view/p/service/linear/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/loc/DLS/network/21775744923/event/YRB0Bl0oQRCb5J-maPpJUQ/media/",
"metadata_url": "https://dai.google.com/linear/v1/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/metadata",
"polling_frequency": 10,
"session_update_url": "https://dai.google.com/linear/v1/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/session",
"stream_id": "e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS",
"stream_manifest": "https://dai.google.com/linear/hls/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/master.m3u8"
}
응답 구조와 상태 코드를 이해하려면 메서드: 스트림을 참고하세요. 인증이 실패하면 다음과 같은 오류가 표시됩니다.
<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 401 (Unauthorized)!!1</title>
...
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>401.</b> <ins>That’s an error.</ins>
<p><ins>That’s all we know.</ins>