이 페이지에서는 라이브 스트림 위에 정적 오버레이 이미지를 생성하는 방법을 보여줍니다. 정적 오버레이 이미지는 전체 라이브 스트림 중에 유지됩니다. 정적 오버레이 이미지의 해상도와 위치를 구성할 수 있습니다.
Google Cloud 프로젝트 및 인증 설정
Google Cloud 프로젝트와 사용자 인증 정보를 만들지 않은 경우 시작하기 전에를 참조하세요.Cloud Storage 버킷에 이미지 업로드
- Google Cloud Console에서 Cloud Storage 브라우저 페이지로 이동합니다.
Cloud Storage 브라우저 페이지로 이동 - 버킷 이름을 클릭하여 엽니다.
- 파일 업로드를 클릭합니다.
- 로컬 머신에서 업로드할 이미지 파일(JPEG 또는 PNG)을 선택합니다. 이 샘플 오버레이 이미지를 사용할 수 있습니다.
이미지가 Cloud Storage 버킷에 저장됩니다.
애셋 만들기
애셋은 Live Stream API와 함께 사용할 수 있는 동영상 또는 이미지입니다. 정적 오버레이로 사용할 이미지 애셋을 만듭니다.
애셋을 만들려면 projects.locations.assets.create
메서드를 사용합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_NUMBER
: Google Cloud 프로젝트 번호. IAM 설정 페이지의 프로젝트 번호 필드에 있습니다.LOCATION
: 애셋을 만들 위치. 지원되는 리전 중 하나를 사용합니다.위치 표시us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-west4
ASSET_ID
: 만들려는 새 애셋의 사용자 정의 식별자입니다. 이 값은 1~63자(영문 기준)여야 하고[a-z0-9]
로 시작하고 끝나야 하며 문자 사이에 대시(-)를 포함할 수 있습니다. 예를 들면my-asset
입니다.ASSET_URI
: 사용할 Cloud Storage 버킷의 이미지 URI(예:gs://my-bucket/my-image.png
)
JSON 요청 본문:
{ "image": { "uri": "ASSET_URI" } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
반환된 OPERATION_ID
를 복사하여 다음 섹션에 사용합니다.
결과 확인
애셋이 생성되었는지 확인하려면 projects.locations.operations.get
메서드를 사용합니다. 응답에 "done: false"
가 포함되어 있으면 응답에 "done: true"
가 포함될 때까지 명령어를 반복합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_NUMBER
: Google Cloud 프로젝트 번호입니다. IAM 설정 페이지의 프로젝트 번호 필드에 있습니다.LOCATION
: 애셋이 있는 위치입니다. 지원되는 리전 중 하나를 사용합니다.위치 표시us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-west4
OPERATION_ID
: 작업의 식별자
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "endTime": END_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Asset", "name": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID", "createTime": CREATE_TIME, "updateTime": UPDATE_TIME, "image": { "uri": "ASSET_URI" }, "crc32c": "ae1EJg==", "state": "ACTIVE" } }
입력 엔드포인트 만들기
기본 입력 엔드포인트를 만들려면 projects.locations.inputs.create
메서드를 사용합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_NUMBER
: Google Cloud 프로젝트 번호. IAM 설정 페이지의 프로젝트 번호 필드에 있습니다.LOCATION
: 입력 엔드포인트를 만들 위치. 지원되는 리전 중 하나를 사용합니다.위치 표시us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-west4
INPUT_ID
: 입력 스트림을 전송할 새 입력 엔드포인트에 대한 사용자 정의 식별자입니다. 이 값은 1~63자(영문 기준)여야 하고[a-z0-9]
로 시작하고 끝나야 하며 문자 사이에 대시(-)를 포함할 수 있습니다. 예를 들면my-input
입니다.
JSON 요청 본문:
{ "type": "RTMP_PUSH" }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
새 작업 ID를 사용하여 입력 생성 작업의 결과를 확인할 수 있습니다.
입력 엔드포인트 세부정보 가져오기
입력 엔드포인트의 세부정보를 가져오려면 projects.locations.inputs.get
메서드를 사용합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_NUMBER
: Google Cloud 프로젝트 번호. IAM 설정 페이지의 프로젝트 번호 필드에 있습니다.LOCATION
: 입력 엔드포인트가 있는 위치. 지원되는 리전 중 하나를 사용합니다.위치 표시us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-west4
INPUT_ID
: 입력 엔드포인트의 사용자 정의 식별자입니다.
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID", "createTime": CREATE_TIME, "updateTime": UPDATE_TIME, "type": "RTMP_PUSH", "uri": "INPUT_STREAM_URI", # For example, "rtmp://1.2.3.4/live/b8ebdd94-c8d9-4d88-a16e-b963c43a953b", "tier": "HD" }
uri
필드를 찾고 나중에 입력 스트림 보내기 섹션에서 사용할 반환된 INPUT_STREAM_URI
를 복사합니다.
채널 만들기
채널을 만들려면 projects.locations.channels.create
메서드를 사용합니다.
채널 구성의 staticOverlays
배열을 확인합니다.
"staticOverlays": [
{
"asset": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
"position": {
"x": 0.5,
"y": 0.5
},
"resolution": {
"w": 0.1
},
"opacity": 0.8
}
],
요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_NUMBER
: Google Cloud 프로젝트 번호. IAM 설정 페이지의 프로젝트 번호 필드에 있습니다.LOCATION
: 채널을 만들 위치. 지원되는 리전 중 하나를 사용합니다.위치 표시us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: 만들려는 채널의 사용자 정의 식별자입니다. 이 값은 1~63자(영문 기준)여야 하고[a-z0-9]
로 시작하고 끝나야 하며 문자 사이에 대시(-)를 포함할 수 있습니다.INPUT_ID
: 입력 엔드포인트의 사용자 정의 식별자입니다.BUCKET_NAME
: 실시간 스트림 매니페스트 및 세그먼트 파일을 보관하기 위해 만든 Cloud Storage 버킷의 이름입니다.ASSET_ID
: 애셋의 사용자 정의 식별자입니다.
JSON 요청 본문:
{ "inputAttachments": [ { "key": "my-input", "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID" } ], "output": { "uri": "gs://BUCKET_NAME" }, "staticOverlays": [ { "asset": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID", "position": { "x": 0.5, "y": 0.5 }, "resolution": { "w": 0.1 }, "opacity": 0.8 }, ], "elementaryStreams": [ { "key": "es_video", "videoStream": { "h264": { "profile": "high", "widthPixels": 1280, "heightPixels": 720, "bitrateBps": 3000000, "frameRate": 30 } } }, { "key": "es_audio", "audioStream": { "codec": "aac", "channelCount": 2, "bitrateBps": 160000 } } ], "muxStreams": [ { "key": "mux_video_ts", "container": "ts", "elementaryStreams": ["es_video", "es_audio"], "segmentSettings": { "segmentDuration": "2s" } } ], "manifests": [ { "key": "manifest_hls", "fileName": "main.m3u8", "type": "HLS", "muxStreams": [ "mux_video_ts" ], "maxSegmentCount": 5 } ] }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
새 작업 ID를 사용하여 채널 만들기 작업의 결과를 확인할 수 있습니다.
채널 시작
채널을 시작하려면 projects.locations.channels.start
메서드를 사용합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_NUMBER
: Google Cloud 프로젝트 번호. IAM 설정 페이지의 프로젝트 번호 필드에 있습니다.LOCATION
: 채널이 있는 위치. 지원되는 리전 중 하나를 사용합니다.위치 표시us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: 채널의 사용자 정의 식별자
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "verb": "start", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
새 작업 ID를 사용하여 채널 시작 작업의 결과를 확인할 수 있습니다.
입력 스트림 보내기
새 터미널 창을 엽니다. 입력 엔드포인트 세부정보 가져오기 섹션에서 INPUT_STREAM_URI
를 사용하여 다음 명령어를 실행합니다.
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
-acodec aac -vcodec h264 -f flv INPUT_STREAM_URI
생성된 라이브 스트림 재생
생성된 미디어 파일을 Shaka Player에서 재생하려면 다음 단계를 완료합니다.
- 만든 Cloud Storage 버킷을 공개적으로 읽을 수 있도록 합니다.
- Cloud Storage 버킷에서 교차 출처 리소스 공유(CORS)를 사용 설정하려면 다음을 수행합니다.
- 다음을 포함하는 JSON 파일을 만듭니다.
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
-
JSON_FILE_NAME
을 이전 단계에서 만든 JSON 파일 이름으로 바꾼 후 다음 명령어를 실행합니다.gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- 다음을 포함하는 JSON 파일을 만듭니다.
- Cloud Storage 버킷에서 생성된
main.m3u8
파일을 찾습니다. 파일의 공개 액세스 열에서 URL 복사를 클릭합니다. - 온라인 실시간 스트림 플레이어인 Shaka Player로 이동합니다.
- 상단 탐색 메뉴에서 커스텀 콘텐츠를 클릭합니다.
- + 버튼을 클릭합니다.
파일의 공개 URL을 매니페스트 URL 상자에 붙여넣습니다.
이름 상자에 이름을 입력합니다.
저장을 클릭합니다.
재생을 클릭합니다.
라이브 스트림 위에 오버레이가 표시됩니다.