1. Giới thiệu
Mạng phân phối nội dung (CDN) cải thiện hiệu suất của người dùng bằng cách lưu vào bộ nhớ đệm nội dung thường xuyên được truy cập gần với người dùng cuối, chấm dứt các kết nối gần với máy khách, sử dụng lại các kết nối với nguồn và thông qua việc áp dụng các giao thức mạng hiện đại cũng như các chế độ tuỳ chỉnh. Đối với người dùng (và khách hàng của chúng tôi), điều này có nghĩa là độ trễ thấp hơn, độ tin cậy cao hơn và chi phí thấp hơn – dẫn đến doanh số bán hàng, trải nghiệm trên web được cải thiện và trải nghiệm người dùng tăng lên. Ngày nay, rất ít trang web hiện đại và nền tảng phát trực tuyến video hoạt động mà không có CDN.
Kiến thức bạn sẽ học được
Phòng thí nghiệm này sẽ hướng dẫn chúng ta thực hiện các bước triển khai môi trường quy trình phát trực tiếp bằng Media CDN (CDN) + Cloud Media Live Streaming API (chuyển mã video trực tiếp) + Cloud Storage (bộ nhớ cho video) + Trình phát video (VLC, Google Shaka Player, v.v. – trình phát sẵn sàng cho HLS + MPEG-DASH).
Chúng ta sẽ thiết lập các thành phần Live Streaming API (Đầu vào, Kênh) và bắt đầu một nguồn cấp dữ liệu trực tiếp cho Đầu vào/Kênh bằng FFmpeg (FFmpeg có thể tạo tín hiệu kiểm thử trực tiếp). API Phát trực tiếp sẽ chuyển mã nguồn cấp dữ liệu trực tiếp. Tệp kê khai và phân đoạn video được chuyển mã sẽ được lưu trữ trong một bộ chứa Cloud Storage. Sau đó, chúng ta sẽ thiết lập Media CDN với vùng Cloud Storage chứa video trực tiếp làm nguồn. Cuối cùng, VLC Player sẽ được dùng để phát nội dung trực tiếp được lưu vào bộ nhớ đệm thông qua Media CDN. Chúng ta cũng sẽ thiết lập một trang tổng quan Giám sát trên đám mây để hình dung hoạt động của Media CDN.
Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, chúng ta sẽ thiết lập môi trường dựa trên cấu trúc sau:

Chúng ta sẽ thiết lập các thành phần sau và thực hiện các việc sau trong phòng thí nghiệm:
- Tạo một bộ chứa Google Cloud Storage (GCS) để lưu trữ các video được chuyển mã trực tiếp
- Định cấu hình Live Streaming API để chuyển mã video sang nhiều định dạng: HLS + MPEG DASH, SD và HD
- Thiết lập các thành phần Phát trực tiếp: Đầu vào/Kênh
- Bắt đầu kênh phát trực tiếp
- Thiết lập Media CDN bằng vùng chứa GCS làm nguồn
- Thiết lập FFmpeg để cung cấp dữ liệu cho kênh phát trực tiếp
- Phát trực tiếp nguồn cấp dữ liệu trực tiếp đã chuyển mã bằng trình phát video
- Thiết lập trang tổng quan Giám sát trên đám mây để theo dõi hoạt động của CDN nội dung nghe nhìn (độ trễ, kết quả tìm kiếm trong bộ nhớ cache, thiếu bộ nhớ đệm, v.v.)
Lưu ý: Trong bài thực hành này, chúng tôi giả định rằng người dùng có quyền truy cập vào Google Cloud Console và đã thiết lập một dự án. Chúng tôi cũng giả định rằng người dùng bắt đầu với một môi trường mới và chưa thiết lập gì cho bản minh hoạ này.
Tất cả các thao tác định cấu hình sẽ được thực hiện thông qua dòng lệnh trong Cloud Shell. Chúng ta luôn có thể kiểm tra các thành phần được định cấu hình thông qua dòng lệnh trong bảng điều khiển. Chúng ta sẽ thấy các con trỏ trong suốt phòng thí nghiệm, trỏ đến Google Cloud Console.
2. Trước khi bắt đầu
Quyền truy cập vào CDN nội dung nghe nhìn bị hạn chế. Để có quyền truy cập vào Media CDN, hãy liên hệ với nhóm quản lý tài khoản của bạn. Họ có thể thay mặt bạn tạo yêu cầu cấp quyền truy cập. Nếu bạn là nhân viên của Google và muốn kiểm thử tính năng Phát trực tiếp bằng Media CDN, hãy liên hệ với người quản lý sản phẩm của Media CDN để yêu cầu quyền truy cập vào Media CDN.
3. Thiết lập và yêu cầu
Khởi động Cloud Shell
Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.
Trên Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.
4. Phiên bản Google Cloud SDK
Tại thời điểm viết bài này, 408.0.0 là phiên bản Google Cloud SDK mới nhất. Tất cả các lệnh trong lớp học này đều được kiểm thử bằng phiên bản mới nhất của Google Cloud SDK. Trước khi tiếp tục, vui lòng đảm bảo rằng Cloud Shell đang sử dụng phiên bản SDK mới nhất.
Kiểm tra phiên bản SDK
Chúng ta sẽ dùng lệnh gcloud version để kiểm tra phiên bản SDK.
Lệnh
gcloud version | grep "Google Cloud SDK"
Ví dụ về kết quả đầu ra
Google Cloud SDK 408.0.0
Các bước tiếp theo
- Nếu phiên bản SDK là
408.0.0trở lên, hãy chuyển sang phần tiếp theo. - Nếu phiên bản SDK thấp hơn
408.0.0, hãy chạy lệnh được liệt kê bên dưới để cập nhật SDK.
sudo apt-get update && sudo apt-get install google-cloud-sdk
5. Điều kiện tiên quyết
Trước khi bắt đầu định cấu hình các tài nguyên GCP, chúng ta cần làm những việc sau:
- Thiết lập các biến môi trường
- Bật các API dịch vụ bắt buộc
1. Thiết lập các biến môi trường
Trong suốt lớp học lập trình này, chúng ta sẽ chạy các lệnh gcloud và curl với một số biến. Chúng ta cần định cấu hình các biến môi trường sau.
- Mã dự án
- Mã số dự án
- Tên Người Dùng
- Khu vực
- Mã nhận dạng đầu vào
- ID kênh
Mã dự án và tên người dùng
Các biến môi trường này thường được định cấu hình sẵn trong Cloud Shell. Chúng ta sẽ dùng lệnh env để xác minh.
Lệnh
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'
Ví dụ về kết quả đầu ra
DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID> LOGNAME=<YOUR_USERNAME>
Tạo tệp env_variables
Dùng lệnh cat để tạo tệp env_variables.txt. Lệnh bên dưới sẽ tạo tệp env_variables.txt trong thư mục gốc của người dùng.
Lệnh
cat > ~/env_variables.txt << EOF export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)") export LOCATION=us-west2 export INPUT_ID=lab-live-input export CHANNEL_ID=lab-live-channel EOF
Thiết lập các biến môi trường
Chúng ta sẽ dùng lệnh source để thiết lập các biến môi trường
Lệnh
source ~/env_variables.txt
Xác minh rằng các biến đã được đặt
Hãy xác minh rằng bạn đã đặt tất cả các biến môi trường bắt buộc. Chúng ta sẽ thấy tổng cộng 6 biến môi trường trong đầu ra.
Lệnh
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
Ví dụ về kết quả đầu ra
LOCATION=us-west2 DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID> LOGNAME=<YOUR_USERNAME> PROJECT_NUMBER=<YOUR_PROJECT_NUMBER> INPUT_ID=lab-live-input CHANNEL_ID=lab-live-channel
2. Bật các API dịch vụ bắt buộc
Chúng ta cần đảm bảo rằng các API sau được bật trong dự án của mình.
- API Dịch vụ mạng
- Certificate Manager API
- Livestream API
- Media CDN Edge Cache API
Bật Network Services API
Để bật Network Services API, hãy chạy lệnh sau:
Lệnh
gcloud services enable networkservices.googleapis.com
Bật Certificate Manager API
Để bật Certificate Manager API, hãy chạy lệnh sau:
Lệnh
gcloud services enable certificatemanager.googleapis.com
Bật Live Stream API
Để bật Live Stream API, hãy chạy lệnh sau:
Lệnh
gcloud services enable livestream.googleapis.com
Bật Media CDN Edge Cache API
Để bật Media CDN Edge Cache API, hãy chạy lệnh sau:
Lệnh
gcloud services enable edgecache.googleapis.com
Xác minh rằng bạn đã bật các API
Chạy lệnh gcloud services list để liệt kê tất cả các API đã bật. Chúng ta sẽ thấy 4 API trong đầu ra.
Lệnh
gcloud services list | grep -E 'networkservices|certificatemanager|livestream|edgecache'
Ví dụ về kết quả đầu ra
NAME: certificatemanager.googleapis.com NAME: livestream.googleapis.com NAME: networkservices.googleapis.com NAME: edgecache.googleapis.com
6. Tạo bộ chứa Cloud Storage
Trong phần này, chúng ta sẽ làm những việc sau:
- Tạo bộ chứa Cloud Storage
- Cho phép truy cập công khai vào nhóm
Sau này trong phòng thí nghiệm, chúng ta sẽ dùng vùng lưu trữ này để lưu trữ các tệp video được chuyển mã. Nhóm này cũng sẽ đóng vai trò là bộ nhớ nguồn cho dịch vụ Media CDN.
1. Tạo vùng chứa
Chúng ta sẽ dùng lệnh gsutil mb để tạo nhóm:
Lệnh
gsutil mb gs://live-streaming-storage-$LOGNAME
2. Đặt thùng thành có thể truy cập công khai
Chúng ta sẽ dùng lệnh gsutil iam để cung cấp công khai các tệp:
Lệnh
gsutil iam ch allUsers:objectViewer gs://live-streaming-storage-$LOGNAME
7. Thiết lập môi trường Live Streaming API
Các thành phần của chuỗi Live Streaming API được thiết kế như sau:

Chúng ta đã tạo bộ chứa Cloud Storage live-streaming-storage-$LOGNAME ở phần trước. Trong hai phần tiếp theo, chúng ta sẽ tạo các tài nguyên sau:
- Đầu vào phát trực tiếp: Điểm cuối đầu vào là điểm cuối mà bộ mã hoá gửi luồng đầu vào đến. Bạn có thể sử dụng điểm cuối đầu vào để chỉ định cấu hình cho luồng phát, chẳng hạn như độ phân giải đầu vào, loại đầu vào và việc cắt video.
- Kênh phát trực tiếp: Kênh là một tài nguyên truyền dẫn luồng đầu vào thông qua một điểm cuối đầu vào, chuyển mã luồng đầu vào thành nhiều phiên bản và xuất bản luồng phát trực tiếp đầu ra ở một số định dạng tại vị trí được chỉ định. Bạn có thể thêm một luồng đầu vào chính và một luồng đầu vào dự phòng vào cùng một kênh.
Chúng ta sẽ tạo các tài nguyên sau ở phần sau của phòng thí nghiệm:
- Bộ mã hoá: Bộ mã hoá là một chương trình dùng để gửi luồng đầu vào. Trong phòng thí nghiệm này, chúng ta sẽ sử dụng FFmpeg.
8. Tạo và định cấu hình điểm cuối đầu vào
Tạo tệp input.json
Chúng tôi sẽ tạo một tệp input.json để chỉ định loại tín hiệu phát trực tiếp. Trong phòng thí nghiệm này, chúng ta sẽ sử dụng tín hiệu phát trực tiếp RTMP.
Lệnh
cat > input.json << EOF
{
"type": "RTMP_PUSH"
}
EOF
Tạo Điểm cuối đầu vào
Tại thời điểm viết hướng dẫn này, chưa có dịch vụ gcloud hỗ trợ Live Stream API. Chúng ta sẽ sử dụng lệnh curl để thực hiện các lệnh gọi API.
Lệnh
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ -d @input.json \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs?inputId=$INPUT_ID"
Ví dụ về kết quả đầu ra
{
"name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661405972853-5e70a38d6f27f-79100d00-310671b4",
"metadata": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
"createTime": "2022-08-25T05:39:32.884030164Z",
"target": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input",
"verb": "create",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": false
}
Đầu ra có nhiều thông tin hữu ích, nhưng tại thời điểm này, chúng ta cần tập trung vào 2 trường:
- Mã thao tác: Sao chép và ghi lại mã thao tác từ đầu ra. Dưới đây là mã thao tác trong ví dụ về đầu ra. Bạn có thể thấy thông tin này trên dòng đầu ra bắt đầu bằng
"name"."operation-1661405972853-5e70a38d6f27f-79100d00-310671b4" - Trạng thái: Chúng ta cần đợi trạng thái thay đổi từ
"done": falsethành"done": true
Kiểm tra trạng thái
Trước khi tiếp tục, chúng ta cần kiểm tra để đảm bảo rằng điểm cuối đầu vào đã được tạo thành công và sẵn sàng.
Trong lệnh bên dưới, hãy thay thế <OPERATION> bằng mã nhận dạng của Thao tác mà chúng ta vừa nhận được ở trên. Trong ví dụ này, đó là "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4".
Lệnh
export OPERATION_ID_1=<OPERATION>
Lệnh
curl -X GET \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/operations/$OPERATION_ID_1"
Ví dụ về kết quả đầu ra
{
"name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661408816982-5e70ae25cea49-617844f0-8fdcb4a1",
"metadata": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
"createTime": "2022-08-25T06:26:57.001530499Z",
"endTime": "2022-08-25T06:26:57.043623522Z",
"target": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input",
"verb": "create",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": true,
"response": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.Input",
"name": "projects/PROJECT_ID/locations/us-west2/inputs/lab-live-input",
"createTime": "2022-08-25T06:26:56.997623672Z",
"updateTime": "2022-08-25T06:26:56.997623672Z",
"type": "RTMP_PUSH",
"uri": "rtmp://34.94.97.220/live/4b7846a1-4a67-44ed-bfd0-d98281b6464a",
"tier": "HD"
}
}
Chạy lại lệnh cho đến khi bạn thấy "done:true" cho biết Điểm cuối đầu vào đã được tạo và sẵn sàng.
Lưu URI
Chúng ta sẽ sử dụng URI từ đầu ra trước đó ở phần sau của lớp học. Lúc này, hãy đặt một biến môi trường cho URI.
Lệnh
export URI=<uri>
Thay thế <uri> bằng URI mà bạn vừa ghi lại ở trên. Nếu muốn, bạn cũng có thể sử dụng phương thức GET để truy xuất URI
Lệnh
curl -s -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs/$INPUT_ID" | jq .uri
9. Tạo và định cấu hình kênh phát trực tiếp
Hãy tạo Kênh phát trực tiếp, được liên kết với điểm cuối đầu vào mà chúng ta vừa tạo ở phần trước. Ví dụ sau đây tạo một kênh tạo luồng phát trực tiếp HLS bao gồm một bản kết xuất duy nhất có độ phân giải cao (1280x720). Kênh này sẽ được liên kết với điểm cuối đầu vào và vùng lưu trữ mà chúng ta đã tạo trước đó.
Tạo tệp channel.json
Trong cửa sổ dòng lệnh Cloud Shell, hãy nhập lệnh sau để tạo tệp "channel.json":
Lệnh
cat > channel.json << EOF
{
"inputAttachments": [
{
"key": "my-input",
"input": "projects/$PROJECT_NUMBER/locations/$LOCATION/inputs/$INPUT_ID"
}
],
"output": {
"uri": "gs://live-streaming-storage-$LOGNAME"
},
"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": [
{
"fileName": "main.m3u8",
"type": "HLS",
"muxStreams": [
"mux_video_ts"
],
"maxSegmentCount": 5
}
]
}
EOF
Tạo kênh
Chạy lệnh curl sau đây để tạo Kênh:
Lệnh
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ -d @channel.json \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels?channelId=$CHANNEL_ID"
Ví dụ về kết quả đầu ra
{
"name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661405972853-5e70a38d6f27f-79100d00-310671b4",
"metadata": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
"createTime": "2022-08-25T05:39:32.884030164Z",
"target": "projects/PROJECT_NUMBER/locations/us-west2/channels/lab-live-channel",
"verb": "create",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": false
}
Ghi lại và sao chép mã thao tác. Chúng ta sẽ cần đến khoá này ở một trong các bước tiếp theo. Bạn có thể thấy thông tin này trên dòng đầu ra bắt đầu bằng "name".
Kiểm tra trạng thái
Trước khi tiếp tục, chúng tôi cần kiểm tra để đảm bảo kênh đã được tạo thành công và sẵn sàng hoạt động.
Trong lệnh bên dưới, hãy thay thế <OPERATION> bằng mã nhận dạng của Thao tác mà chúng ta vừa nhận được ở trên. Trong ví dụ này, đó là operation-1661405972853-5e70a38d6f27f-79100d00-310671b4
Lệnh
export OPERATION_ID_2=<OPERATION>
Lệnh
curl -s -X GET \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/operations/$OPERATION_ID_2"
Ví dụ về kết quả đầu ra
"name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1668666801461-5eda4c3f31852-a4d2229f-0efeef9e",
"metadata": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
"createTime": "2022-11-17T06:33:21.500841488Z",
"endTime": "2022-11-17T06:33:21.529311112Z",
"target": "projects/PROJECT_NUMBER/locations/us-west2/channels/lab-live-channel",
"verb": "create",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": true,
"response": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.Channel",
"name": "projects/PROJECT_NAME/locations/us-west2/channels/lab-live-channel",
"createTime": "2022-11-17T06:33:21.497818033Z",
"updateTime": "2022-11-17T06:33:21.497818033Z",
"activeInput": "my-input",
"output": {
"uri": "gs://live-streaming-storage-LOGNAME"
},
"elementaryStreams": [
{
"videoStream": {
"h264": {
"widthPixels": 1280,
"heightPixels": 720,
"frameRate": 30,
"bitrateBps": 3000000,
"gopDuration": "2s",
"vbvSizeBits": 3000000,
"vbvFullnessBits": 2700000,
"entropyCoder": "cabac",
"profile": "high"
}
},
"key": "es_video"
},
{
"audioStream": {
"codec": "aac",
"bitrateBps": 160000,
"channelCount": 2,
"sampleRateHertz": 48000
},
"key": "es_audio"
}
],
"muxStreams": [
{
"key": "mux_video_ts",
"container": "ts",
"elementaryStreams": [
"es_video",
"es_audio"
],
"segmentSettings": {
"segmentDuration": "2s"
}
}
],
"manifests": [
{
"fileName": "main.m3u8",
"type": "HLS",
"muxStreams": [
"mux_video_ts"
],
"maxSegmentCount": 5,
"segmentKeepDuration": "60s"
}
],
"streamingState": "STOPPED",
"inputAttachments": [
{
"key": "my-input",
"input": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input"
}
],
"logConfig": {
"logSeverity": "OFF"
}
}
}
Chạy lại lệnh cho đến khi bạn thấy "done:true" cho biết Điểm cuối đầu vào đã được tạo và sẵn sàng.
Xin lưu ý rằng "streamingState" hiện là "STOPPED" ; chúng ta sẽ bắt đầu kênh trong phần tiếp theo.
10. Bắt đầu kênh phát trực tiếp
Giờ đây, sau khi tạo kênh phát trực tiếp, hãy bắt đầu kênh đó. Trong phần này, chúng ta sẽ làm những việc sau:
- Bắt đầu kênh Phát trực tiếp
- Kiểm tra trạng thái của kênh, chúng ta cần đảm bảo rằng
streamingStatelà"AWAITING INPUT"
1. Bắt đầu kênh
Trong Cloud Shell, hãy chạy lệnh curl sau đây để bắt đầu kênh:
Lệnh
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ -d "" \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID:start"
Ví dụ về kết quả đầu ra
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/operation-1661405972853-5e70a38d6f27f-79100d00-310671b4",
"metadata": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
"createTime": "2022-08-25T05:39:32.884030164Z",
"target": "projects/PROJECT_NUMBER/locations/us-west2/channels/lab-live-channel",
"verb": "start",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": false
}
2. Kiểm tra trạng thái của kênh
Chạy lệnh curl sau đây để xem trạng thái của Kênh:
Lệnh
curl -s -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID" | grep "streamingState"
Ví dụ về kết quả đầu ra
"streamingState": "AWAITING_INPUT",
Chạy lại lệnh cho đến khi bạn thấy "AWAITING_INPUT" cho biết Kênh đang chạy và sẵn sàng nhận tín hiệu.
11. Định cấu hình Media CDN
Trong phần này, chúng ta sẽ triển khai Media CDN – cơ sở hạ tầng CDN. Chúng ta sẽ tạo các tài nguyên sau:
- Nguồn gốc của bộ nhớ đệm biên
- Dịch vụ bộ nhớ đệm biên
1. Tạo Edge Cache Origin
Nguồn gốc của bộ nhớ đệm biên đại diện cho một vị trí nội dung, chẳng hạn như bộ chứa Cloud Storage, vị trí lưu trữ của bên thứ ba hoặc bộ cân bằng tải. Theo thuật ngữ CDN, nguồn (hoặc máy chủ gốc) là vị trí chứa nguồn nội dung mà chúng ta muốn phân phối – ví dụ: tất cả CSS, Javascript, HTML, hình ảnh, v.v. Trong phòng thí nghiệm này, chúng ta sẽ tạo một nguồn ánh xạ đến vùng chứa Cloud Storage mà chúng ta đã tạo ở phần đầu của phòng thí nghiệm. Chúng ta sẽ gọi đó là Nguồn bộ nhớ đệm biên cme-origin. Nguồn gốc của CDN là nơi lưu trữ tất cả nội dung nguồn trước khi được phân phối đến các máy chủ bộ nhớ đệm biên.
Chúng ta sẽ dùng lệnh gcloud edge-cache origins create để tạo nguồn gốc. Lệnh này sẽ mất vài phút để hoàn tất.
Lệnh
gcloud edge-cache origins create cme-origin \ --origin-address="gs://live-streaming-storage-$LOGNAME"
Ví dụ về kết quả
Create request issued for: cme-origin Waiting for operation [projects/my-project/locations/global/operations/operation-1612121774168-5ba3759af1919- 3fdcd7b1-99f59223] to complete...done Created origin cme-origin
2. Tạo một Dịch vụ lưu vào bộ nhớ đệm biên
Giờ đây, khi đã thiết lập Nguồn bộ nhớ đệm biên, chúng ta có thể tạo chính Dịch vụ bộ nhớ đệm biên.
Tạo tệp cme-demo.yaml
Bạn có thể định cấu hình Dịch vụ lưu vào bộ nhớ đệm biên thông qua tệp YAML. Trong Cloud Shell, hãy tạo một tệp cục bộ có tên là cme-demo.yaml. Sử dụng vi, nano hoặc bất kỳ trình chỉnh sửa nào khác và dán các dòng sau vào tệp YAML:
name: cme-demo
routing:
hostRules:
- hosts:
- demo.cme.com
pathMatcher: routes
pathMatchers:
- name: routes
routeRules:
- headerAction:
responseHeadersToAdd:
- headerName: x-cache-status
headerValue: "{cdn_cache_status}"
matchRules:
- prefixMatch: /
origin: cme-origin
priority: 100
routeAction:
cdnPolicy:
cacheKeyPolicy: {}
cacheMode: FORCE_CACHE_ALL
defaultTtl: 3600s
signedRequestMode: DISABLED
- headerAction:
responseHeadersToAdd:
- headerName: x-cache-status
headerValue: "{cdn_cache_status}"
matchRules:
- pathTemplateMatch: /**.m3u8
origin: cme-origin
priority: 25
routeAction:
cdnPolicy:
cacheKeyPolicy: {}
cacheMode: FORCE_CACHE_ALL
defaultTtl: 1s
signedRequestMode: DISABLED
- headerAction: {}
matchRules:
- pathTemplateMatch: /**.ts
origin: cme-origin
priority: 50
routeAction:
cdnPolicy:
cacheKeyPolicy: {}
cacheMode: FORCE_CACHE_ALL
defaultTtl: 2s
signedRequestMode: DISABLED
Chúng ta sẽ giữ nguyên tất cả các chế độ cài đặt mặc định cho cấu hình Edge Cache Service. Trong tệp ở trên, có 3 giá trị trường mà người dùng có thể muốn cập nhật:
name: tên của phiên bản Media CDN – ở đây là:cme-demohosts:danh sách tên miền sẽ được Dịch vụ CDN Media này phân giải – tại đây:demo.cme.com. Chúng ta sẽ sử dụng tính năng này trong bản minh hoạ này. Chúng tôi sẽ sử dụng địa chỉ IP của phiên bản Media CDN.Origin:đây là Edge Cache Origin mà chúng ta vừa tạo ở bước trước. Đặt giá trị này thànhcme-origin– tên của Nguồn CDN cho nội dung nghe nhìn.
Để biết thêm thông tin về các biến số mà bạn có thể sử dụng trong tệp YAML, hãy xem hướng dẫn định cấu hình Dịch vụ bộ nhớ đệm biên.
Tạo Dịch vụ bộ nhớ đệm biên
Chúng ta sẽ tạo một Edge Cache Service có tên là cme-demo, trên Edge Cache Origin cme-origin, với máy chủ lưu trữ demo.cme.com. Để tạo dịch vụ, hãy chạy lệnh sau trong Cloud Shell:
Lệnh
gcloud edge-cache services import cme-demo \
--source=cme-demo.yaml
Có thể mất vài phút để tạo Edge Cache Service.
Ví dụ về kết quả đầu ra
Request issued for: [cme-demo]
Waiting for operation [projects/PROJECT_ID/locations/global/operations/operation-1670476252264-5ef4a0f9f36ce-dd380af5-321be9a0] to complete...done.
createTime: '2022-12-07T18:08:54.403446942Z'
ipv4Addresses:
- 34.104.35.152
ipv6Addresses:
- '2600:1900:4110:d18::'
name: projects/PROJECT_ID/locations/global/edgeCacheServices/cme-demo
routing:
hostRules:
- hosts:
- demo.cme.com
- 34.104.35.152
pathMatcher: routes
pathMatchers:
- name: routes
routeRules:
- headerAction:
responseHeadersToAdd:
- headerName: x-cache-status
headerValue: '{cdn_cache_status}'
matchRules:
- prefixMatch: /
origin: projects/123456789/locations/global/edgeCacheOrigins/cme-origin
priority: '100'
routeAction:
cdnPolicy:
cacheKeyPolicy: {}
cacheMode: FORCE_CACHE_ALL
defaultTtl: 3600s
signedRequestMode: DISABLED
- headerAction:
responseHeadersToAdd:
- headerName: x-cache-status
headerValue: '{cdn_cache_status}'
matchRules:
- pathTemplateMatch: /**.m3u8
origin: projects/123456789/locations/global/edgeCacheOrigins/cme-origin
priority: '25'
routeAction:
cdnPolicy:
cacheKeyPolicy: {}
cacheMode: FORCE_CACHE_ALL
defaultTtl: 1s
signedRequestMode: DISABLED
- headerAction: {}
matchRules:
- pathTemplateMatch: /**.ts
origin: projects/123456789/locations/global/edgeCacheOrigins/cme-origin
priority: '50'
routeAction:
cdnPolicy:
cacheKeyPolicy: {}
cacheMode: FORCE_CACHE_ALL
defaultTtl: 2s
signedRequestMode: DISABLED
updateTime: '2022-12-08T05:11:31.598744308Z'
Ghi lại và sao chép ipv4Addresses của phiên bản Edge Cache Service – ở đây là 34.104.36.157. Chúng ta sẽ dùng tệp này để cập nhật tệp cme-demo.yaml và sau đó để phát trực tuyến video đã chuyển mã.
Cập nhật Dịch vụ bộ nhớ đệm biên
Tại thời điểm này, bạn nên cập nhật cấu hình Edge Cache Service để có thể sử dụng IP của dịch vụ này để phát trực tuyến video sau này. Tệp YAML của Dịch vụ lưu vào bộ nhớ đệm biên cho phép chúng tôi liệt kê tất cả tên/địa chỉ IP của máy chủ lưu trữ mà Dịch vụ lưu vào bộ nhớ đệm biên sẽ chấp nhận yêu cầu. Tại thời điểm này, chúng ta chỉ định demo.cme.com làm máy chủ lưu trữ. Để cung cấp tính năng phân giải tên cho miền này, bạn có thể định cấu hình một vùng DNS. Tuy nhiên, giải pháp dễ dàng hơn là thêm địa chỉ IP vào danh sách máy chủ lưu trữ trong tệp yaml. Chỉnh sửa lại tệp YAML sao cho giống như tệp bên dưới:
name: cme-demo
routing:
hostRules:
- hosts:
- demo.cme.com
- IPADDRESS
pathMatcher: routes
pathMatchers:
- name: routes
routeRules:
- headerAction:
responseHeadersToAdd:
- headerName: x-cache-status
headerValue: "{cdn_cache_status}"
matchRules:
- prefixMatch: /
origin: cme-origin
priority: 100
routeAction:
cdnPolicy:
cacheKeyPolicy: {}
cacheMode: FORCE_CACHE_ALL
defaultTtl: 3600s
signedRequestMode: DISABLED
- headerAction:
responseHeadersToAdd:
- headerName: x-cache-status
headerValue: "{cdn_cache_status}"
matchRules:
- pathTemplateMatch: /**.m3u8
origin: cme-origin
priority: 25
routeAction:
cdnPolicy:
cacheKeyPolicy: {}
cacheMode: FORCE_CACHE_ALL
defaultTtl: 1s
signedRequestMode: DISABLED
- headerAction: {}
matchRules:
- pathTemplateMatch: /**.ts
origin: cme-origin
priority: 50
routeAction:
cdnPolicy:
cacheKeyPolicy: {}
cacheMode: FORCE_CACHE_ALL
defaultTtl: 2s
signedRequestMode: DISABLED
Để các thay đổi có hiệu lực, chúng ta chỉ cần nhập lại tệp YAML. Trong thiết bị đầu cuối Cloud Shell, hãy chạy lệnh sau:
Lệnh
gcloud edge-cache services import cme-demo \
--source=cme-demo.yaml
Kiểm tra đầu ra của lệnh và xác minh rằng IP xuất hiện trong danh sách máy chủ lưu trữ.
Tại thời điểm này, phiên bản Edge Cache Service sẽ chấp nhận các yêu cầu có "demo.cme.com" hoặc địa chỉ IP làm máy chủ lưu trữ.
12. Tạo tín hiệu đầu vào
Giờ đây, chúng ta đã định cấu hình tất cả các dịch vụ cần thiết, hãy tạo tín hiệu đầu vào của sự kiện phát trực tiếp. Trong phần này, chúng ta sẽ làm những việc sau:
- Cài đặt FFmpeg, một phần mềm mã nguồn mở miễn phí
- Gửi tín hiệu kiểm thử trực tiếp đến Đầu vào/Kênh
1. Cài đặt FFmpeg
FFmpeg là một dự án phần mềm mã nguồn mở và miễn phí, bao gồm một bộ thư viện và chương trình để xử lý video, âm thanh và các tệp cũng như luồng đa phương tiện khác. Trong cửa sổ dòng lệnh Cloud Shell, hãy dùng lệnh sau để cài đặt FFmpeg:
Lệnh
sudo apt install ffmpeg -y
Khi quá trình cài đặt hoàn tất, hãy xác minh xem FFmpeg đã được cài đặt đúng cách hay chưa bằng cách kiểm tra phiên bản của FFmpeg:
Lệnh
ffmpeg -version
Ví dụ về kết quả đầu ra
ffmpeg version 4.3.4-0+deb11u1 Copyright (c) 2000-2021 the FFmpeg developers built with gcc 10 (Debian 10.2.1-6) ...
FFmpeg đã được cài đặt đúng cách.
2. Bắt đầu Tín hiệu phát trực tiếp đến đầu vào/kênh
Sau khi cài đặt FFmpeg, chúng ta sẽ gửi một luồng đầu vào thử nghiệm đến điểm cuối đầu vào để tạo sự kiện phát trực tiếp.
Trong thiết bị đầu cuối Cloud Shell, hãy chạy lệnh sau bằng cách sử dụng biến môi trường URI mà chúng ta đã tạo trong phần "Tạo và định cấu hình điểm cuối đầu vào".
Lệnh
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \ -acodec aac -vcodec h264 -f flv $URI
Bạn sẽ thấy FFmpeg gửi tín hiệu kiểm thử trực tiếp. Lệnh này sẽ không trả về lời nhắc. Tín hiệu sẽ được tạo cho đến khi bạn dừng. Bạn sẽ cần mở một cửa sổ Cloud Shell mới cho phần còn lại của bài thực hành.
13. Mở Cloud Shell mới
Tại thời điểm này, bạn sẽ cần mở một cửa sổ Cloud Shell mới để tiếp tục thực hành vì FFmpeg sẽ chạy vĩnh viễn cho đến khi bạn nhấn tổ hợp phím <CTRL+C> để dừng lệnh này và do đó dừng quá trình tạo tín hiệu trực tiếp.
Nhấp vào dấu "+" bên cạnh tên của thiết bị đầu cuối Cloud Shell hiện tại. Thao tác này sẽ mở một cửa sổ Cloud Shell khác.

Chạy phần còn lại của bài thực hành trong cửa sổ Cloud Shell vừa mở.
Thiết lập các biến môi trường
Vì đây là một Cloud Shell mới, nên chúng ta cần thiết lập lại các biến môi trường. Chúng ta sẽ dùng lệnh source để thiết lập các biến môi trường.
Lệnh
source ~/env_variables.txt
Xác minh rằng các biến đã được đặt
Hãy xác minh rằng bạn đã đặt tất cả các biến môi trường bắt buộc. Chúng ta sẽ thấy tổng cộng 6 biến môi trường trong đầu ra.
Lệnh
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
Ví dụ về kết quả đầu ra
LOCATION=us-west2 DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID> LOGNAME=<YOUR_USERNAME> PROJECT_NUMBER=<YOUR_PROJECT_NUMBER> INPUT_ID=lab-live-input CHANNEL_ID=lab-live-channel
14. Xác minh rằng tín hiệu phát trực tiếp đang được chuyển mã
Chúng tôi sẽ chạy curl để mô tả kênh. Trong đầu ra, chúng ta sẽ thấy streamingState thay đổi từ "AWAITING_INPUT" thành "STREAMING"
Lệnh
curl -s -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID" | grep "streamingState"
Trong phản hồi của tệp JSON đầu ra, bạn sẽ thấy "streamingState": "STREAMING" – cho biết Kênh đang phát trực tiếp và tín hiệu trực tiếp đang được chuyển mã.
Hãy xác minh nội dung của nhóm mà chúng ta sẽ thấy một tệp kê khai và một số phân đoạn video TS. Chạy lệnh sau trong Cloud Shell để liệt kê nội dung của vùng chứa mà chúng ta đã tạo ở đầu phòng thí nghiệm và được Live Streaming API dùng để xuất tệp kê khai tín hiệu trực tiếp được chuyển mã và các phân đoạn video TS:
Lệnh
gcloud storage ls --recursive gs://live-streaming-storage-$LOGNAME/**
Ví dụ về kết quả đầu ra
gs://live-streaming-storage-$LOGNAME/ gs://live-streaming-storage-$LOGNAME/main.m3u8 gs://live-streaming-storage-$LOGNAME/mux_video_ts/index-1.m3u8 gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000016.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000017.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000018.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000019.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000020.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000021.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000022.ts ...
Bạn sẽ thấy:
- tệp kê khai HLS:
main.m3u8 - Các đoạn video TS tương ứng: một loạt tệp được đánh số
segment-000000000X.ts
Đến đây, chúng ta đã hoàn thành những việc sau:
- API Phát trực tiếp: tín hiệu trực tiếp được tạo và chuyển mã thành một nhóm thông qua API Phát trực tiếp
- Media CDN: Media CDN được định cấu hình với vùng lưu trữ Phát trực tiếp làm nguồn của Media CDN.
Trong các phần tiếp theo, chúng ta sẽ xác thực Dịch vụ lưu vào bộ nhớ đệm biên, sau đó phát trực tuyến video được chuyển mã bằng địa chỉ IP truyền tin đơn đến nhiều của Media CDN.
15. Xác minh rằng phiên bản Edge Cache Service hoạt động
Trong phần này, chúng ta sẽ xác minh rằng phiên bản Dịch vụ lưu vào bộ nhớ đệm biên hoạt động như mong đợi. Để làm việc này, chúng ta sẽ cố gắng truy cập vào một tệp từ thực thể Edge Cache Service bằng địa chỉ IP của Edge Cache Service. Lần đầu tiên một đối tượng được truy cập, đối tượng đó chưa được lưu vào bộ nhớ đệm. Chúng ta nên quan sát một bộ nhớ đệm MISS. Đối với yêu cầu đầu tiên, đối tượng sẽ được đọc từ nguồn và lưu vào bộ nhớ đệm ở rìa. Tất cả các lần truy cập vào cùng một tệp sau đây sẽ trả về một HIT trong bộ nhớ đệm vì đối tượng hiện được lưu vào bộ nhớ đệm ở rìa. Hãy xác minh hành vi này:
Chạy lệnh curl sau đây trong Cloud Shell để truy cập vào tệp kê khai video được chuyển mã và lưu trữ trong Nguồn bộ nhớ đệm biên:
Lệnh
curl -svo /dev/null --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> \ "http://demo.cme.com/main.m3u8"
Lưu ý đến quá trình phân giải nơi chúng ta sử dụng địa chỉ IP của phiên bản Dịch vụ lưu vào bộ nhớ đệm biên để phân giải tên của phiên bản đó. Hãy nhớ sử dụng demo.cme.com:<IP>, trong đó IP là IP của phiên bản Dịch vụ bộ nhớ đệm biên mà chúng ta vừa tạo.
Tìm tiêu đề x-cache-status trong đầu ra.
Ví dụ về kết quả đầu ra
Added demo.cme.com:80:34.104.35.152 to DNS cache
* Hostname demo.cme.com was found in DNS cache
* Trying 34.104.35.152:80...
* Connected to demo.cme.com (34.104.35.152) port 80 (#0)
> GET /main.m3u8 HTTP/1.1
> Host: demo.cme.com
> User-Agent: curl/7.74.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< x-guploader-uploadid: ADPycdtKtflWt4Kha5YxXNNRwO-Eu6fGSPs-T-XY4HJmNMo46VJyWlD4EAk-8a6SegxjWq3o1gTPqZbpkU_sjW__HPAdDw
< date: Wed, 07 Dec 2022 18:23:46 GMT
< last-modified: Wed, 07 Dec 2022 18:23:45 GMT
< etag: "6bff620ccca4a9849ba4e17fa7c521fb"
< x-goog-generation: 1670437425805400
< x-goog-metageneration: 1
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 193
< content-type: application/x-mpegURL
< x-goog-hash: crc32c=sPO3zw==
< x-goog-hash: md5=a/9iDMykqYSbpOF/p8Uh+w==
< x-goog-storage-class: STANDARD
< accept-ranges: bytes
< content-length: 193
< server: Google-Edge-Cache
< x-request-id: fd25285b-fc1a-4fd4-981a-c50ead2c85ed
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-cache-status: den;miss
< cache-control: public,max-age=3600
<
{ [193 bytes data]
* Connection #0 to host demo.cme.com left intact
Lưu ý rằng không tìm thấy trong bộ nhớ đệm vì đối tượng chưa được lưu vào bộ nhớ đệm và được đọc từ nguồn.
Giờ đây, chúng ta sẽ thực hiện nhiều yêu cầu cho tệp m3u8 và nếu mọi thứ được định cấu hình chính xác, thì CDN đa phương tiện sẽ bắt đầu phân phát nội dung từ bộ nhớ đệm của CDN. Lệnh dưới đây sẽ tạo 10 yêu cầu curl và chỉ in tiêu đề x-cache-status.
Lệnh
for i in {1..10};do curl -Is --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> "http://demo.cme.com/main.m3u8" | grep x-cache-status;done
Kết quả đầu ra phải là sự kết hợp giữa bộ nhớ đệm hit và miss. Nếu bạn thấy lượt truy cập vào bộ nhớ đệm trong kết quả đầu ra, thì tức là Media CDN đang hoạt động như dự kiến.
Ví dụ về kết quả đầu ra
x-cache-status: den;miss x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit
Lưu ý lượt truy cập vào bộ nhớ đệm vì đối tượng hiện được lưu vào bộ nhớ đệm ở rìa. Cloud Media Edge Service đang hoạt động như dự kiến.
16. Phát trực tuyến video tín hiệu trực tiếp được chuyển mã bằng VLC
Đây là phần mà chúng ta sẽ kết nối các điểm và liên kết tất cả các bước mà chúng ta đã thực hiện cho đến nay:
- Chúng tôi đã tạo một vùng lưu trữ có tên là
live-streaming-storage-$LOGNAME. Vùng lưu trữ này nhận kết quả của tín hiệu trực tiếp được chuyển mã thành nội dung HLS bằng Live Streaming API. - Chúng tôi thiết lập Live Streaming API.
- Chúng tôi đã bắt đầu một tín hiệu phát trực tiếp RTMP bằng FFmpeg để cung cấp dữ liệu đầu vào cho API Phát trực tiếp/Kênh.
- Chúng tôi đã xác minh rằng tín hiệu phát trực tiếp được truyền đến Kênh và xác minh rằng Kênh đang ở chế độ
streaming. - Chúng tôi đã xác minh rằng các tệp được chuyển mã (tệp kê khai + phân đoạn TS) đã được tạo và lưu trữ trong nhóm
live-streaming-storage-$LOGNAME. - Một Nguồn bộ nhớ đệm biên có tên là
cme-originđược thiết lập với bộ chứa GCSlive-streaming-storage-$LOGNAMElàm nguồn. - Một phiên bản Bộ nhớ đệm biên có tên là
cme-demođược thiết lập vớicme-originlàm nguồn gốc. - Chúng tôi đã xác minh hành vi (thiếu bộ nhớ đệm, kết quả tìm kiếm trong bộ nhớ cache) của phiên bản Edge Cache Service.
Giờ đây, chúng ta có thể sử dụng trình phát video để phát trực tuyến tín hiệu trực tiếp đã chuyển mã thông qua bộ nhớ đệm Media CDN. Để làm việc này, chúng ta sẽ dùng Trình phát VLC. VLC Player là một trình phát và khung đa phương tiện nguồn mở và miễn phí, có thể phát hầu hết các tệp đa phương tiện. Trình phát này phát các định dạng nội dung đa phương tiện thích ứng (chẳng hạn như DASH và HLS). Trình phát này sử dụng nguyên tắc Phát trực tuyến thích ứng – tuỳ theo chất lượng kết nối mạng và băng thông có sẵn, trình phát sẽ điều chỉnh chất lượng của video được phát. Với công việc chuyển mã mà chúng ta vừa thực hiện, chúng ta đã sử dụng các chế độ đặt sẵn mặc định và "chỉ" tạo ra 2 chất lượng: SD và HD. Khi chúng ta bắt đầu phát video trong trình phát, bạn sẽ thấy video bắt đầu phát ở định dạng SD và nhanh chóng chuyển sang định dạng HD nếu kết nối mạng của bạn đủ tốt.
Chúng tôi sẽ phát trực tuyến tín hiệu trực tiếp đã chuyển mã HLS (định dạng video của Apple được hỗ trợ rộng rãi). Tệp tương ứng có tên là main.m3u8 – đây là tệp kê khai HLS. Tệp kê khai trỏ đến các phân đoạn video TS.
Để sử dụng VLC Player, hãy truy cập vào https://www.videolan.org/vlc/ rồi tải một phiên bản của trình phát này xuống cho hệ điều hành của máy tính xách tay. VLC có sẵn cho Windows, MacOSX, Linux, Android và iOS.

Cài đặt Trình phát trên máy tính xách tay rồi khởi chạy. Chúng ta sẽ sử dụng phiên bản MacOSX của trình phát cho một vài bước tiếp theo.
Để phát video, hãy chuyển đến "File" (Tệp) / "Open Network" (Mở mạng):

Thiết lập bằng:
- URL: http://<Replace_With_Edge_Cache_IP>/main.m3u8. Đây là URL của video mà chúng ta muốn phát trực tuyến. Lưu ý:
- IP của phiên bản Media CDN:
34.105.35.246. Thay thế bằng IP của Dịch vụ nội dung nghe nhìn trên đám mây mà bạn đã triển khai. - Đường dẫn đến tệp video kê khai: "
/". Đây là đường dẫn mà chúng tôi đã dùng trong nhómlive-streaming-storage-$LOGNAMEđể lưu trữ các tệp tín hiệu trực tiếp đã chuyển mã. Đường dẫn là đường dẫn gốc ở đây: "/". - Tên của tệp video kê khai: tệp kê khai HLS,
main.m3u8.
Sau đó, nhấp vào "Mở". Bạn sẽ thấy video trực tiếp đã chuyển mã bắt đầu phát. Video sẽ có dạng như ảnh chụp màn hình dưới đây. Bộ đếm trên màn hình sẽ tăng lên 1 đơn vị mỗi lần và bạn sẽ nghe thấy tiếng bíp liên tục.
Đây là tín hiệu phát trực tiếp cơ bản theo giao thức RTMP do FFmpeg tạo, được API Phát trực tiếp chuyển mã sang HLS và phân phát thông qua bộ nhớ đệm CDN nội dung nghe nhìn:

Bạn có thể sử dụng bất kỳ trình phát HLS và MPEG DASH nào khác nếu muốn. Dưới đây là một số trình phát mà bạn có thể cân nhắc:
- Trình phát Quicktime – được cài đặt theo mặc định trên máy Mac. Tương tự: mở một kết nối mạng đến http://34.104.36.157/main.m3u8 – thay thế địa chỉ IP bằng địa chỉ IP của phiên bản Edge Cache Service.
17. Giám sát Media CDN
Nhóm SME đã tạo một mẫu trang tổng quan về Media CDN – https://gist.github.com/elithrar/1c511d00f5cd3736fb2a3897867209c1.
Để cài đặt, hãy chạy các lệnh sau trong cửa sổ Cloud Shell:
Tải tệp YAML xuống:
curl https://gist.githubusercontent.com/elithrar/1c511d00f5cd3736fb2a3897867209c1/raw/3cb70855304f29e5c06b8d63063196354db0dec3/media-edge-20210208-dashboard --output media-edge-20210208-dashboard.yaml
Tạo trang tổng quan cho Cloud Monitoring:
gcloud monitoring dashboards create --config-from-file media-edge-20210208-dashboard.yaml
Quá trình thiết lập có thể mất vài phút. Chuyển đến Bảng điều khiển Google Cloud rồi nhấp vào biểu tượng 3 thanh > Operations (Hoạt động) > Monitoring (Giám sát) > Dashboards (Trang tổng quan). Bạn sẽ thấy một trang tổng quan có tên là "Media Edge Metrics" (Các chỉ số về Edge của nội dung nghe nhìn). Nhấp vào đó để xem các chỉ số:

18. Dọn dẹp môi trường phòng thí nghiệm
Chúc mừng bạn đã hoàn thành bài thực hành. Trong phần này, chúng ta sẽ xoá tất cả các tài nguyên mà chúng ta đã tạo trong suốt lớp học.
Dừng tín hiệu FFmpeg:
Nhấn <CTRL+C> trên dòng lệnh Cloud Shell mà FFmpeg đang chạy.
Ngừng phát trực tiếp trên kênh:
Lệnh
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ -d "" \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID:stop"
Xoá kênh phát trực tiếp:
Lệnh
curl -X DELETE -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID"
Xoá điểm cuối đầu vào của sự kiện phát trực tiếp:
Lệnh
curl -X DELETE \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs/$INPUT_ID"
Xoá bộ chứa GCS:
Lệnh
gsutil rm -r gs://live-streaming-storage-$LOGNAME
Xoá phiên bản dịch vụ bộ nhớ đệm biên:
Lệnh
gcloud edge-cache services delete cme-demo
Xác nhận xoá bằng cách nhập "Y" khi được nhắc
Xoá Nguồn bộ nhớ đệm Edge:
Lệnh
gcloud edge-cache origins delete cme-origin
Xác nhận xoá bằng cách nhập "Y" khi được nhắc
Xoá Trang tổng quan tuỳ chỉnh
Lệnh
gcloud monitoring dashboards delete $(gcloud monitoring dashboards list --filter="displayName:Media Edge Metrics" --format="value(name)")