本页介绍了如何在直播上方生成静态叠加层图片。 静态叠加层图片会在整个直播过程中持续显示。您可以配置 静态叠加层图像的分辨率和位置。
设置您的 Google Cloud 项目和身份验证
如果您尚未创建 Google Cloud 项目和凭据,请参阅开始前须知。将图片上传到 Cloud Storage 存储桶
- 在 Google Cloud 控制台中,前往“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 项目 编号;此编号位于 API 单元上的项目编号字段中 IAM 设置页面LOCATION
:您的素材资源所在的位置 located;请使用某个受支持的区域显示营业地点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 项目 编号;此编号位于 API 单元上的项目编号字段中 IAM 设置页面LOCATION
:创建输入的位置 endpoint;请使用某个受支持的区域显示营业地点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 }
您可以检查输入创建的结果 操作。
获取输入端点详情
如需获取输入端点的详细信息,请使用 projects.locations.inputs.get
方法。
在使用任何请求数据之前,请先进行以下替换:
PROJECT_NUMBER
:您的 Google Cloud 项目编号;此值位于 IAM 设置页面上的项目编号字段中LOCATION
:输入端点所在的位置 located;请使用某个受支持的区域显示位置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
:用户定义的 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
:用户定义的 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 }
您可以查看频道创建的结果 操作。
启动频道
如需创建频道,请使用
projects.locations.channels.start
方法。
在使用任何请求数据之前,请先进行以下替换:
PROJECT_NUMBER
:您的 Google Cloud 项目 编号;此编号位于 API 单元上的项目编号字段中 IAM 设置页面LOCATION
:您的频道所在的位置 located;请使用某个受支持的区域显示位置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
文件。在该文件的公开访问权限列中,点击复制网址。 - 导航到在线直播播放器 Shaka Player。
- 点击顶部导航栏中的自定义内容。
- 点击 + 按钮。
将文件的公开网址粘贴到清单网址框中。
在名称框中输入一个名称。
点击保存。
点击播放。
您应该会看到该叠加层显示在直播画面上。