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 nội dung thường được truy cập vào bộ nhớ đệm cho gần người dùng cuối hơn, chấm dứt các kết nối gần máy khách hơn, sử dụng lại kết nối tới nguồn gốc và thông qua việc áp dụng các giao thức mạng và tuỳ chỉnh hiện đại. Đố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í giảm. Điều này giúp cải thiện doanh số, trải nghiệm web và tăng thuần cho trải nghiệm người dùng. Hiện nay, rất ít trang web và nền tảng phát video trực tuyến hiện đại 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 tôi 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) + Video Player (VLC, Google Shaka Player, v.v. – trình phát hỗ trợ HLS + MPEG-DASH).
Chúng ta sẽ thiết lập các thành phần của API Phát trực tiếp – Đầ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 tra trực tiếp). Live Streaming API sẽ chuyển mã nguồn cấp dữ liệu trực tiếp. Tệp kê khai video đã chuyển mã và các phân đoạn sẽ được lưu trữ trong bộ chứa Cloud Storage. Sau đó, chúng ta sẽ thiết lập Media CDN với bộ chứa Cloud Storage cho video trực tiếp làm nguồn gốc. 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 qua Media CDN. Chúng tôi cũng sẽ thiết lập một trang tổng quan Giám sát trên đám mây để trực quan hoá hoạt động của CDN của nội dung nghe nhìn.
Sản phẩm bạn sẽ tạo ra
Trong phòng thí nghiệm 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 đây và thực hiện các tác vụ sau trong phòng thí nghiệm này:
- Tạo bộ chứa Google Cloud Storage (GCS) để lưu trữ 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 CDN của nội dung nghe nhìn bằng bộ chứa GCS làm nguồn gốc
- Thiết lập FFmpeg để cấp dữ liệu cho kênh trực tiếp
- Phát trực tuyến nguồn cấp dữ liệu trực tiếp đã được 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 mạng phân phối nội dung đa phương tiện (CDN) (độ trễ, lượt truy cập vào bộ nhớ đệm, thiếu bộ nhớ đệm, v.v.)
Lưu ý: Đối với phòng thí nghiệm 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 dự án. Chúng tôi cũng giả định rằng người dùng bắt đầu từ 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. Trong phòng thí nghiệm này, chúng ta sẽ thấy các con trỏ trỏ đến Google Cloud Console.
2. Trước khi bắt đầu
Quyền truy cập CDN của nội dung nghe nhìn bị hạn chế. Để sử dụng CDN của nội dung đa phương tiện, 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à thành viên của Google và muốn thử nghiệm tính năng Phát trực tiếp bằng CDN của nội dung nghe nhìn, hãy liên hệ với PM về CDN của nội dung nghe nhìn để yêu cầu quyền truy cập vào CDN của nội dung nghe nhìn.
3. Thiết lập và yêu cầu
Khởi động Cloud Shell
Mặc dù bạn 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 trong Đám mây.
Trong Google Cloud Console, hãy nhấp vào biểu tượng Cloud Shell ở thanh công cụ trên cùng bên phải:
Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:
Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện mọi công việ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 gì cả.
4. Phiên bản SDK Google Cloud
Tại thời điểm chúng tôi viết bài này, 408.0.0
là phiên bản SDK Google Cloud mới nhất. Tất cả các lệnh trong phòng thí nghiệm 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, hãy đả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ề trang kết quả
Google Cloud SDK 408.0.0
Bước tiếp theo
- Nếu phiên bản SDK là
408.0.0
trở 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ê dưới đây để 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 tài nguyên GCP, chúng ta cần làm như sau:
- Thiết lập biến môi trường
- Bật các API dịch vụ bắt buộc
1. Thiết lập biến môi trường
Trong suốt phòng thí nghiệm 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
- Số hiệu dự án
- Tên Người Dùng
- Khu vực
- Mã mục nhập
- 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 Cloudshell. Chúng ta sẽ dùng lệnh env
để xác minh.
Lệnh
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'
Ví dụ về trang kết quả
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
để đặt các biến môi trường
Lệnh
source ~/env_variables.txt
Xác minh các biến đã được đặt
Hãy xác minh rằng tất cả các biến môi trường bắt buộc đều đã được thiết lập. Chúng ta sẽ thấy tổng cộng 6 biến môi trường trong kết quả.
Lệnh
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
Ví dụ về trang kết quả
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 đây đã được bật trong dự án.
- API Dịch vụ mạng
- API Trình quản lý chứng chỉ
- API phát trực tiếp
- API bộ nhớ đệm cạnh mạng phân phối nội dung đa phương tiện
Bật Network Services API (API Dịch vụ mạng)
Để bật Network Services API, hãy chạy lệnh sau:
Lệnh
gcloud services enable networkservices.googleapis.com
Bật API Trình quản lý chứng chỉ
Để bật API Trình quản lý chứng chỉ, hãy chạy lệnh sau:
Lệnh
gcloud services enable certificatemanager.googleapis.com
Bật API sự kiện phát trực tiếp
Để bật API Phát trực tiếp, 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 các API đó đã được Bật
Chạy lệnh gcloud services list
để liệt kê tất cả API đã bật. Chúng ta sẽ thấy 4 API trong kết quả.
Lệnh
gcloud services list | grep -E 'networkservices|certificatemanager|livestream|edgecache'
Ví dụ về trang kết quả
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
- Đặt bộ chứa ở chế độ có thể truy cập công khai
Sau này trong phòng thí nghiệm, chúng tôi sẽ sử dụng bộ chứa này để lưu trữ các tệp video đã được chuyển mã. Bộ chứa này cũng sẽ đóng vai trò là bộ nhớ gốc cho dịch vụ CDN của nội dung nghe nhìn.
1. Tạo bộ chứa
Chúng ta sẽ dùng lệnh gsutil mb
để tạo bộ chứa:
Lệnh
gsutil mb gs://live-streaming-storage-$LOGNAME
2. Đặt bộ chứa có thể truy cập công khai
Chúng ta sẽ dùng lệnh gsutil
iam
để đặt tệp ở chế độ công khai:
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 API Phát trực tiếp có cấu trúc như sau:
Chúng ta đã tạo bộ chứa live-streaming-storage-$LOGNAME
trong Cloud Storage ở 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 của bạn. Bạn có thể sử dụng điểm cuối đầu vào để chỉ định cấu hình cho luồng của mình, chẳng hạn như độ phân giải đầu vào, loại đầu vào và cắt video.
- Kênh phát trực tiếp: Kênh là một tài nguyên nhập 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 lần hiển thị và xuất bản sự kiện phát trực tiếp đầu ra ở một số định dạng nhất định ở vị trí được chỉ định. Bạn có thể thêm luồng đầu vào chính và 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 trong phòng thí nghiệm này:
- 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 ta 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 tôi đang sử dụng tín hiệu 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 phòng thí nghiệm này, gcloud không hỗ trợ API phát trực tiếp. Chúng ta sẽ dùng lệnh curl
để thực hiện 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ề trang kết quả
{ "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 }
Kết quả 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: Trong dữ liệu đầu ra, hãy sao chép và ghi lại mã thao tác. Dưới đây là mã thao tác trong ví dụ đầu ra. Bạn có thể tìm thấy giá trị 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 phải đợi trạng thái thay đổi từ
"done": false
thà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ã 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ề trang kết quả
{ "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 này 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ừ kết quả trước đó trong phòng thí nghiệm. Tại thời điểm 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 lưu ý ở 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, 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 sẽ tạo một kênh tạo sự kiện phát trực tiếp HLS bằng một lần hiển thị độ phân giải cao (1280x720). Kênh sẽ được liên kết với điểm cuối đầu vào và bộ chứa 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ề trang kết quả
{ "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 chú và sao chép mã thao tác. Chúng tôi sẽ cần mã này ở một trong các bước tiếp theo. Bạn có thể tìm thấy giá trị 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 ta cần kiểm tra xem kênh đã được tạo thành công và sẵn sàng chưa.
Trong lệnh bên dưới, hãy thay thế <OPERATION>
bằng mã 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ề trang kết quả
"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 này 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 ý "streamingState"
hiện tại là "STOPPED"
; chúng ta sẽ bắt đầu tạo kênh trong phần tiếp theo.
10. Bắt đầu kênh phát trực tiếp
Sau khi tạo kênh Phát trực tiếp, hãy bắt đầu tạo 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
streamingState
đang"AWAITING INPUT"
1. Bắt đầu tạo 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ề trang kết quả
{ "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 để biết 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ề trang kết quả
"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 CDN của nội dung nghe nhìn
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 ở cạnh
- Dịch vụ bộ nhớ đệm cạnh
1. Tạo một nguồn gốc cho bộ nhớ đệm của Edge
Nguồn gốc của bộ nhớ đệm cạnh biểu thị 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 trình cân bằng tải. Theo thuật ngữ CDN, máy chủ gốc (hay máy chủ gốc) là nơi đặt nguồn của 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. Đối với phòng thí nghiệm này, chúng tôi sẽ tạo một nguồn gốc ánh xạ đến bộ chứa Cloud Storage mà chúng tôi đã tạo khi bắt đầu phòng thí nghiệm này. Chúng ta sẽ gọi Nguồn gốc của bộ nhớ đệm Edge là cme-origin
. Nguồn gốc của CDN là nơi tất cả nội dung nguồn được lưu trữ trước khi phân phối đến các máy chủ bộ nhớ đệm cạnh.
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"
Kết quả mẫu
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 Dịch vụ bộ nhớ đệm của Edge
Giờ đây, sau khi thiết lập Edge Cache Origin, chúng ta có thể tự tạo Dịch vụ bộ nhớ đệm của Edge.
Tạo tệp cme-demo.yaml
Việc định cấu hình Dịch vụ bộ nhớ đệm của Edge được thực hiện thông qua tệp YAML
. Trong Cloud Shell, hãy tạo một tệp cục bộ có tên cme-demo.yaml
. Sử dụng vi
, nano
hoặc trình chỉnh sửa bất kỳ khác rồi 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 tôi sẽ để nguyên mọi cấu hình của Dịch vụ bộ nhớ đệm của Edge. Trong tệp trên, có 3 giá trị của 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 – tại đây:cme-demo
hosts:
danh sách các tên miền sẽ được giải quyết bằng Dịch vụ CDN đa phương tiện này – tại đây:demo.cme.com
. Chúng ta sẽ dùng thông tin này trong phần minh hoạ này. Chúng ta sẽ sử dụng địa chỉ IP của phiên bản CDN của nội dung đa phương tiện.Origin:
đây là Nguồn gốc bộ nhớ đệm của Edge mà chúng ta vừa tạo ở bước trước. Đặt thànhcme-origin
– tên của Nguồn gốc CDN của nội dung nghe nhìn.
Để biết thêm thông tin về các biến 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 của Edge.
Tạo Dịch vụ bộ nhớ đệm Edge
Chúng ta sẽ tạo một Dịch vụ bộ nhớ đệm của Edge 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 Dịch vụ bộ nhớ đệm của Edge.
Ví dụ về trang kết quả
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'
Lưu ý và sao chép ipv4Addresses
của phiên bản Dịch vụ bộ nhớ đệm của Edge – tại đây 34.104.36.157
. Chúng tôi sẽ dùng tệp này để cập nhật tệp cme-demo.yaml
, sau đó phát trực tuyến video đã chuyển mã.
Cập nhật Dịch vụ bộ nhớ đệm của Edge
Tại thời điểm này, bạn nên cập nhật cấu hình Dịch vụ bộ nhớ đệm của cạnh để có thể sử dụng IP của dịch vụ phát trực tuyến video sau này. Tệp YAML của Dịch vụ bộ nhớ đệm của Edge cho phép chúng tôi liệt kê tất cả tên/IP của máy chủ lưu trữ mà Dịch vụ bộ nhớ đệm của Edge sẽ chấp nhận yêu cầu. Hiện tại, chúng tôi chỉ chỉ định demo.cme.com
làm máy chủ lưu trữ. Để cung cấp hoạt động phân giải tên cho miền này, bạn hãy định cấu hình một vùng DNS trên đám mây. Tuy nhiên, một giải pháp đơn giản 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 tệp YAML một lần nữa rồi chỉnh sửa tệp đó thành giao diện như dưới đây:
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
Để phản ánh các thay đổi, chúng ta chỉ cần nhập lại tệp YAML. Trong cửa sổ dòng lệnh 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 kết quả 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 Dịch vụ bộ nhớ đệm của Edge sẽ chấp nhận các yêu cầu có "demo.cme.com"
hoặc địa chỉ IP là máy chủ lưu trữ.
12. Tạo tín hiệu đầu vào
Bây giờ, chúng ta đã định cấu hình tất cả các dịch vụ cần thiết, bây giờ, 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 nguồn mở miễn phí
- Gửi tín hiệu trực tiếp thử nghiệm đến Đầu vào/Kênh
1. Cài đặt FFmpeg
FFmpeg là một dự án phần 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 cũng như các tệp và luồng đa phương tiện khác. Trong thiết bị đầu cuối Cloud Shell, hãy sử 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 kiểm tra phiên bản của FFmpeg để xác minh rằng FFmpeg đã được cài đặt đúng cách:
Lệnh
ffmpeg -version
Ví dụ về trang kết quả
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
Bây giờ, FFmpeg đã được cài đặt, chúng ta sẽ gửi một luồng đầu vào kiểm thử đế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 trực tiếp kiểm tra. Lệnh này sẽ không trả về lời nhắc. Tín hiệu này 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 phòng thí nghiệm.
13. Mở Cloud Shell mới
Tại thời điểm này, bạn cần mở một cửa sổ Cloud Shell mới để tiếp tục phòng thí nghiệm 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 tín hiệu và do đó dừng quá trình tạo tín hiệu trực tiếp.
Nhấp vào biểu tượng "+" 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ở thêm một cửa sổ Cloud Shell.
Chạy phần còn lại của phòng thí nghiệm trong cửa sổ Cloud Shell mới mở.
Thiết lập các biến môi trường
Vì đây là CloudShell 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 các biến đã được đặt
Hãy xác minh rằng tất cả các biến môi trường bắt buộc đều đã được thiết lập. Chúng ta sẽ thấy tổng cộng 6 biến môi trường trong kết quả.
Lệnh
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
Ví dụ về trang kết quả
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. Kiểm tra để đảm bảo tín hiệu trực tiếp đang được chuyển mã
Chúng tôi sẽ chạy một curl
để mô tả kênh. Chúng ta sẽ thấy trong kết quả đầu ra là 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 tuyến và tín hiệu trực tiếp đang được chuyển mã.
Hãy xác minh nội dung của bộ chứa nơi chúng ta sẽ thấy 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 bộ chứa mà chúng ta đã tạo ở đầu phòng thí nghiệm và được Live Streaming API sử dụng để xuất tệp kê khai tín hiệu trực tiếp đã 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ề trang kết quả
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 phân đoạn video TS tương ứng: một loạt các tệp được đánh số
segment-000000000X.ts
Đến đây, chúng ta đã làm xong những việc sau:
- Live Streaming API: tín hiệu trực tiếp được tạo và chuyển mã thành một bộ chứa thông qua Live Streaming API
- CDN nội dung đa phương tiện: Đã định cấu hình CDN nội dung nghe nhìn với bộ chứa lưu trữ Phát trực tiếp làm nguồn gốc của CDN nội dung nghe nhìn.
Trong các phần tiếp theo, chúng ta sẽ xác thực Dịch vụ bộ nhớ đệm của Edge, sau đó phát trực tuyến video đã chuyển mã bằng địa chỉ IP bất kỳ của CDN của nội dung đa phương tiện.
15. Xác minh rằng phiên bản Edge Cache Service (Dịch vụ bộ nhớ đệm của Edge) có hoạt động
Trong phần này, chúng ta sẽ xác minh rằng phiên bản Dịch vụ bộ nhớ đệm của Edge hoạt động như mong đợi. Để thực hiện việc này, chúng ta sẽ cố gắng truy cập vào một tệp trong phiên bản Dịch vụ bộ nhớ đệm của Edge bằng địa chỉ IP của Dịch vụ bộ nhớ đệm của Edge. Đối tượng chưa được lưu vào bộ nhớ đệm vào lần đầu tiên được truy cập. Chúng ta cầ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ừ gốc và được lưu vào bộ nhớ đệm ở biên. Tất cả các nỗ lực truy cập vào cùng một tệp sau đây sẽ trả về một bộ nhớ đệm HIT
vì đối tượng hiện được lưu vào bộ nhớ đệm ở cạnh. Hãy xác minh hành vi này:
Chạy lệnh curl
sau đây trong Cloud Shell để truy cập tệp kê khai video đã chuyển mã được lưu trữ trong Nguồn gốc bộ nhớ đệm của Edge:
Lệnh
curl -svo /dev/null --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> \ "http://demo.cme.com/main.m3u8"
Hãy lưu ý phần phân giải trong đó chúng tôi sử dụng địa chỉ IP của phiên bản Edge Cache Service để phân giải tên của phiên bản đó. Hãy sử dụng demo.cme.com:<IP>
, trong đó IP là IP của phiên bản Dịch vụ bộ nhớ đệm của Edge mà chúng ta vừa tạo.
Hãy tìm tiêu đề x-cache-status
trong dữ liệu đầu ra.
Ví dụ về trang kết quả
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
Hãy lưu ý rằng bộ nhớ đệm bị thiếu vì đối tượng chưa được lưu vào bộ nhớ đệm và được đọc từ nguồn gốc.
Bây giờ, chúng ta sẽ thực hiện nhiều yêu cầu đối với tệp m3u8
và nếu mọi thứ được định cấu hình chính xác, Media CDN sẽ bắt đầu phân phát nội dung từ bộ nhớ đệm. Lệnh bên dưới sẽ thực hiện 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
Dữ liệu đầu ra phải là sự kết hợp giữa bộ nhớ đệm hit
và miss
. Nếu bạn thấy số lượt truy cập bộ nhớ đệm trong dữ liệu đầu ra, thì CDN của nội dung đa phương tiện đang hoạt động như dự kiến.
Ví dụ về trang kết quả
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
Hãy lưu ý đến lượt truy cập vào bộ nhớ đệm vì đối tượng hiện được lưu vào bộ nhớ đệm ở cạnh. Dịch vụ Cloud Medie Edge vẫn hoạt động bình thường.
16. Phát trực tuyến video tín hiệu trực tiếp đã chuyển mã bằng VLC
Đây là phần chúng ta kết nối mọi thứ và liên kết tất cả các bước mà chúng ta đã thực hiện cho đến thời điểm này:
- Chúng tôi đã tạo một bộ chứa có tên
live-streaming-storage-$LOGNAME
. Bộ chứa 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 ta đã thiết lập Live Streaming API.
- Chúng tôi đã bắt đầu truyền tín hiệu trực tiếp bằng RTMP với FFmpeg để cấp dữ liệu cho kênh/đầu vào của API phát trực tiếp.
- Chúng tôi đã xác minh rằng tín hiệu trực tiếp được cấp đến Kênh và xác minh rằng Kênh đó đang ở chế độ
streaming
. - Chúng tôi xác minh rằng kết quả các tệp chuyển mã (tệp kê khai + phân đoạn TS) đã được tạo và lưu trữ trong bộ chứa
live-streaming-storage-$LOGNAME
. - Một Nguồn gốc của bộ nhớ đệm cạnh có tên là
cme-origin
đã được thiết lập với bộ chứa GCSlive-streaming-storage-$LOGNAME
làm nguồn gốc. - Một thực thể Edge Cache có tên là
cme-demo
đã được thiết lập vớicme-origin
là 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ớ đệm) của phiên bản Dịch vụ bộ nhớ đệm của Edge.
Giờ đây, chúng ta có thể sử dụng trình phát video để truyền tín hiệu trực tiếp đã được chuyển mã qua bộ nhớ đệm Media CDN. Để làm như vậy, chúng ta sẽ sử dụng Trình phát VLC. VLC Player là một khung và trình phát đa phương tiện đa nền tảng nguồn mở miễn phí và có thể phát hầu hết các tệp đa phương tiện. Chế độ này phát các định dạng nội dung nghe nhìn thích ứng (chẳng hạn như DASH và HLS). Tính năng 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 đã phát. Với công việc chuyển mã vừa thực hiện, chúng tôi đã sử dụng các giá trị đặt trước mặc định và tạo ra hai chất lượng "chỉ": SD và HD. Khi chúng tôi 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 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 https://www.videolan.org/vlc/ và tải xuống phiên bản trình phát cho hệ điều hành máy tính xách tay của bạn – 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 của bạn rồi khởi chạy trình phát đó. Chúng ta sẽ sử dụng phiên bản MacOSX của trình phát trong một số bước tiếp theo.
Để phát video, hãy chuyển đến phần "Tệp" / "Mạng mở":
Thiết lập bằng:
- URL: http://<Replace_With_Edge_Cache_IP>/main.m3u8. Đây là URL của video mà chúng tôi muốn phát trực tuyến. Lưu ý:
- IP của thực thể CDN của nội dung nghe nhìn:
34.105.35.246
. Thay thế bằng IP của Dịch vụ Cloud Media mà bạn đã triển khai. - Đường dẫn đến tệp video của tệp kê khai: "
/
". Đây là đường dẫn mà chúng tôi đã sử dụng trong bộ chứalive-streaming-storage-$LOGNAME
để lưu trữ các tệp tín hiệu trực tiếp đã được chuyển mã. Đường dẫn này là đường dẫn gốc: "/". - Tên của tệp kê khai video: tệp kê khai HLS,
main.m3u8
.
Và nhấp vào "Open" (Mở). Bạn sẽ thấy video trực tiếp được chuyển mã bắt đầu phát. Video này sẽ trông giống như ảnh chụp màn hình dưới đây. Bộ đếm trên màn hình sẽ chạy tăng theo từng bậc 1 và bạn sẽ nghe thấy tiếng bíp liên tục.
Đây là một tín hiệu trực tiếp cơ bản để kiểm tra giao thức RTMP do FFmpeg tạo ra, được chuyển mã thành HLS bằng Live Streaming API và được phân phát qua bộ nhớ đệm Media CDN:
Bạn có thể sử dụng bất kỳ trình phát DASH HLS và MPEG DASH nào khác nếu muốn. Dưới đây là một số tính năng 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ự ở đây: mở kết nối mạng đến http://34.104.36.157/main.m3u8 – thay thế địa chỉ IP bằng một trong các phiên bản Dịch vụ bộ nhớ đệm của Edge.
17. Giám sát CDN của nội dung nghe nhìn
Mẫu trang tổng quan CDN truyền thông do nhóm SME tạo ra – https://gist.github.com/elithrar/1c511d00f5cd3736fb2a3897867209c1.
Để cài đặt ứng dụng này, 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 giải pháp Giám sát trên đám mây:
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. Truy cập vào Google Cloud Console rồi nhấp vào 3 thanh > Thao tác > Giám sát > Trang tổng quan. Bạn sẽ thấy một trang tổng quan có tên là "Chỉ số Media Edge". Hãy 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 phòng thí nghiệm. Trong phần này, chúng tôi sẽ xoá tất cả tài nguyên mà chúng tôi đã tạo trong toàn bộ phòng thí nghiệm này.
Dừng tín hiệu FFmpeg:
Nhấn <CTRL+C>
trên thiết bị đầu cuối Cloud Shell mà FFmpeg đang chạy.
Dừng kênh phát trực tiếp:
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 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 của Edge:
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 gốc của bộ nhớ đệm của 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)")