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 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 các kết nối đến nguồn gốc và thông qua việc sử dụng các giao thức kết nối mạng hiện đại và 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í giảm đi – dẫn đến doanh số bán hàng, trải nghiệm web và trải nghiệm người dùng tăng lên. Hiện nay, rất ít trang web 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
Lớp học 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 làm việc 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 sẵn sàng cho HLS + MPEG-DASH).
Chúng ta sẽ thiết lập các thành phần API phát trực tiếp – Đầu vào, Kênh – và bắt đầu nguồn cấp dữ liệu trực tiếp đến Đầ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ủa sự kiện phát trực tiếp. Tệp kê khai và các phân đoạn video được chuyển mã sẽ được lưu trữ trong một bộ chứa trên Cloud Storage. Sau đó, chúng ta sẽ thiết lập Media CDN với bộ chứa video phát trực tiếp trên Cloud Storage làm nguồn gốc. Cuối cùng, VLC Player sẽ được dùng để phát nội dung phát 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 về Giám sát trên đám mây để trực quan hoá 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:
Trong lớp học này, chúng ta sẽ thiết lập các thành phần sau và thực hiện các nhiệm vụ sau:
- Tạo một bộ chứa Google Cloud Storage (GCS) để lưu trữ video phát trực tiếp đã chuyển mã
- Định cấu hình API Phát trực tiếp để 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 với bộ chứa GCS làm nguồn gốc
- Thiết lập FFmpeg để truyền dữ liệu đến kênh phát trực tiếp
- Phát trực tuyến nguồn cấp dữ liệu phát trực tiếp đã chuyển mã bằng trình phát video
- Thiết lập trang tổng quan Cloud Monitoring để giám sát hoạt động của CDN nội dung nghe nhìn (độ trễ, số lần truy cập vào bộ nhớ đệm, số lần không truy cập được vào bộ nhớ đệm, v.v.)
Lưu ý: Đối với lớp học 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ả 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 lớp học này 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 tài khoản của bạn. Họ có thể thay mặt bạn để tạo yêu cầu truy cập. Nếu bạn là nhân viên của Google và muốn thử nghiệm tính năng Phát trực tiếp bằng Media CDN, hãy liên hệ với Nhà quản lý sản phẩm phụ trách Media CDN để yêu cầu quyền truy cập vào Media CDN.
3. Cách thiết lập và các yêu cầu
Khởi động Cloud Shell
Mặc dù có thể điều khiển 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 đám mây.
Trong 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 cấp phép và kết nối với môi trường sẽ chỉ mất vài phút. Khi hoàn tất, bạn sẽ thấy như sau:
Máy ảo này được tải sẵn tất cả các công cụ phát triển mà bạn cần. Ứng dụng này cung cấp một thư mục gốc 5 GB ổn định và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất mạng và 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 một 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 viết bài, 408.0.0
là phiên bản SDK Google Cloud 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 SDK Google Cloud. 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ẽ 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ả
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ê 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 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 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 vài 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 Cloudshell. Chúng ta sẽ sử dụng lệnh env
để xác minh.
Lệnh
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'
Ví dụ về kết quả
DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID> LOGNAME=<YOUR_USERNAME>
Tạo tệp env_variables
Sử 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 biến môi trường
Chúng ta sẽ 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 đã thiết lập 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 kết quả.
Lệnh
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
Ví dụ về 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 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
- Certificate Manager API
- API phát trực tiếp
- Media CDN Edge Cache API
Bật API Dịch vụ mạng
Để bật API Dịch vụ mạng, 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 Luồng phát trực tiếp
Để bật Live Stream API, hãy chạy lệnh sau:
Lệnh
gcloud services enable livestream.googleapis.com
Bật API bộ nhớ đệm Media CDN Edge
Để bật API bộ nhớ đệm Media CDN Edge, 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ề 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ông khai
Trong phần sau của lớp học lập trình, chúng ta sẽ sử dụng bộ chứa này để lưu trữ các tệp video đã chuyển mã. Bộ chứa này cũng sẽ đóng vai trò là bộ nhớ gốc cho dịch vụ CDN nội dung nghe nhìn.
1. Tạo bộ chứa
Chúng ta sẽ sử dụng lệnh gsutil mb
để tạo nhóm:
Lệnh
gsutil mb gs://live-streaming-storage-$LOGNAME
2. Cho phép mọi người truy cập vào bộ chứa
Chúng ta sẽ sử dụng lệnh gsutil
iam
để cung cấp các 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 Cloud Storage live-streaming-storage-$LOGNAME
trong 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. Bạn có thể sử dụng điểm cuối đầu vào để chỉ định cấu hình cho luồng, 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 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 bản trình bày và phát hành sự kiện phát trực tiếp đầu ra ở một số định dạng nhất định tại vị trí đã chỉ định. Bạn có thể thêm luồng đầu vào chính và dự phòng trong cùng một kênh.
Chúng ta sẽ tạo các tài nguyên sau trong phần sau của lớp học lập trình:
- Bộ mã hoá: Bộ mã hoá là một chương trình dùng để gửi luồng đầu vào. Trong lớp học lập trình 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 lớp học lập trình 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 bài này, gcloud không hỗ trợ API Luồng phát trực tiếp. Chúng ta sẽ 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ề 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ó rất 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 hai trường:
- Mã thao tác: Trong kết quả, hãy sao chép và ghi lại mã thao tác. Dưới đây là mã thao tác trong ví dụ về kết quả. Bạn có thể tìm 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 chờ 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ã 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ả
{ "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ừ kết quả trước đó trong phần sau của lớp học lập trình. 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 ghi chú ở 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 tạo một kênh tạo sự kiện phát trực tiếp HLS bao gồm một bản trình bày có độ 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 bộ nhớ mà chúng ta đã tạo trước đó.
Tạo tệp channel.json
Trong 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 để 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ả
{ "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ã hoạt động. Chúng ta sẽ cần đến nó trong một trong các bước sắp tới. Bạn có thể tìm 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 ta cần kiểm tra để đảm bảo kênh đã đượ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_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ả
"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 tại 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ờ thì chúng ta đã tạo xong kênh Phát trực tiếp, hãy bắt đầu sử dụng kênh này. 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
streamingState
là"AWAITING INPUT"
1. Bắt đầu kênh
Trong Cloud Shell, hãy chạy lệnh curl
sau để 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ả
{ "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 để 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ề 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 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 bộ nhớ đệm Edge
- Dịch vụ bộ nhớ đệm Edge
1. Tạo nguồn gốc bộ nhớ đệm Edge
Nguồn bộ nhớ đệm Edge đại diện cho một vị trí nội dung, chẳng hạn như bộ chứa trên 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 gốc (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. Đối với lớp học lập trình này, chúng ta sẽ tạo một nguồn gốc liên kết đến bộ chứa trên Cloud Storage mà chúng ta đã tạo ở đầu lớp học lập trình. Chúng ta sẽ gọi Edge Cache Origin là 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ẽ sử dụng lệnh gcloud edge-cache origins create
để tạo nguồn gốc. Quá trình thực thi lệnh này sẽ mất vài phú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ạnh
Giờ đây, khi đã thiết lập Nguồn bộ nhớ đệm Edge, chúng ta có thể tự tạo Dịch vụ bộ nhớ đệm Edge.
Tạo tệp cme-demo.yaml
Bạn có thể định cấu hình Dịch vụ bộ nhớ đệm Edge 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 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 ta sẽ giữ nguyên tất cả cấu hình mặc định của Dịch vụ bộ nhớ đệm Edge. 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 thực thể Media CDN – ở đây làcme-demo
hosts:
danh sách tên miền sẽ được Dịch vụ CDN nội dung nghe nhìn này phân giải – tại đây:demo.cme.com
. Chúng ta sẽ sử dụng trong phần minh hoạ này. Chúng ta sẽ sử dụng địa chỉ IP của thực thể CDN nội dung nghe nhìn.Origin:
đây là Edge Cache Origin (Nguồn bộ nhớ đệm Edge) mà chúng ta vừa tạo ở bước trước. Đặt giá trị này thànhcme-origin
– tên của Media CDN Origin.
Để biết thêm thông tin về các biến khác nhau mà bạn có thể sử dụng trong tệp YAML, hãy xem Hướng dẫn cấu hình Dịch vụ bộ nhớ đệm Edge.
Tạo Dịch vụ bộ nhớ đệm cạnh
Chúng ta sẽ tạo một Dịch vụ bộ nhớ đệm Edge có tên là cme-demo
, trên Nguồn bộ nhớ đệm Edge 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 Edge.
Ví dụ về 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 thực thể Dịch vụ bộ nhớ đệm Edge – tại đây là 34.104.36.157
. Chúng ta sẽ sử dụng tệp này để cập nhật tệp cme-demo.yaml
và sau đó để truyền trực tuyến video đã chuyển mã.
Cập nhật Dịch vụ bộ nhớ đệm 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 Edge để 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ụ bộ nhớ đệm Edge cho phép chúng ta liệt kê tất cả tên/IP máy chủ lưu trữ mà Dịch vụ bộ nhớ đệm Edge sẽ chấp nhận yêu cầu. Tại thời điểm này, chúng ta chỉ chỉ định demo.cme.com
làm máy chủ lưu trữ. Để cung cấp dịch vụ phân giải tên cho miền này, bạn có thể định cấu hình 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 và chỉnh sửa tệp đó 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
Để phản ánh các thay đổi, chúng ta chỉ cần nhập lại tệp YAML. Trong 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, thực thể Dịch vụ bộ nhớ đệm Edge 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, khi đã đị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 luồng 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 phát 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 cửa sổ dòng lệnh 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 xác minh FFmpeg đã được cài đặt đúng cách bằng cách kiểm tra phiên bản của FFmpeg:
Lệnh
ffmpeg -version
Ví dụ về 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
Giờ đây, khi FFmpeg đã được cài đặt, chúng ta sẽ gửi luồng đầu vào thử nghiệm đến điểm cuối đầu vào để tạo luồng phát trực tiếp.
Trong dòng lệnh Cloud Shell, hãy chạy lệnh sau, 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 thử nghiệm 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 lớp học.
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 lớp học này 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 FFmpeg và do đó dừng việc 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ở thêm một cửa sổ Cloud Shell.
Chạy phần còn lại của lớp học trong cửa sổ Cloud Shell mới mở.
Thiết lập biến môi trường
Vì đây là một 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ẽ sử dụng lệnh source
để đặt 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 đã thiết lập 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 kết quả.
Lệnh
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
Ví dụ về 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. Xác minh tín hiệu phát trực tiếp đang được chuyển mã
Chúng ta sẽ chạy curl
để mô tả kênh. Chúng ta sẽ thấy trong kết quả rằng 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 tệp JSON đầu ra, bạn sẽ thấy "streamingState": "STREAMING"
– cho biết rằng Kênh đang phát trực tuyến và tín hiệu phát trực tiếp đang được chuyển mã.
Hãy xác minh nội dung của bộ chứa, trong đó 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 bộ chứa mà chúng ta đã tạo ở đầu lớp học và được API Phát trực tiếp sử dụng để xuất tệp kê khai tín hiệu phát trực tiếp đã chuyển mã và các đoạn video TS:
Lệnh
gcloud storage ls --recursive gs://live-streaming-storage-$LOGNAME/**
Ví dụ về 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 tệp được đánh số
segment-000000000X.ts
Đến đây, chúng ta đã hoàn tất các bước sau:
- API Phát trực tiếp: tín hiệu phát trực tiếp được tạo và chuyển mã thành một bộ chứa thông qua API Phát trực tiếp
- Media CDN: đã định cấu hình Media CDN với bộ chứa lưu trữ của sự kiện Phát trực tiếp làm nguồn gốc của Media CDN.
Trong các phần tiếp theo, chúng ta sẽ xác thực Dịch vụ bộ nhớ đệm cạnh, sau đó phát trực tuyến video đã chuyển mã bằng địa chỉ IP anycast của Media CDN.
15. Xác minh rằng thực thể Dịch vụ bộ nhớ đệm Edge hoạt động
Trong phần này, chúng ta sẽ xác minh rằng thực thể Dịch vụ bộ nhớ đệm Edge 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ể Dịch vụ bộ nhớ đệm Edge bằng địa chỉ IP của Dịch vụ bộ nhớ đệm Edge. Trong lần đầu tiên truy cập vào một đối tượng, đối tượng đó chưa được lưu vào bộ nhớ đệm. Chúng ta sẽ quan sát thấy một MISS
bộ nhớ đệm. Đối với yêu cầu đầu tiên, đối tượng được đọc từ nguồn gốc và lưu vào bộ nhớ đệm ở rìa. Tất cả các lần truy cập sau vào cùng một tệp sẽ trả về một HIT
bộ nhớ đệm 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 trong Cloud Shell để truy cập vào tệp kê khai video được chuyển mã được lưu trữ trong Edge Cache Origin:
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 việc phân giải mà chúng ta sử dụng địa chỉ IP của thực thể Dịch vụ bộ nhớ đệm Edge để phân giải tên của thực thể đó. Hãy nhớ sử dụng demo.cme.com:<IP>
, trong đó IP là IP của thực thể Dịch vụ bộ nhớ đệm Edge mà chúng ta vừa tạo.
Tìm tiêu đề x-cache-status
trong kết quả.
Ví dụ về 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
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 cho tệp m3u8
và nếu mọi thứ được định cấu hình chính xác, thì Media CDN sẽ bắt đầu phân phát nội dung từ bộ nhớ đệm. Lệnh bên dưới 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ả sẽ là kết hợp của bộ nhớ đệm hit
và miss
. Nếu bạn thấy các lượt truy cập vào bộ nhớ đệm trong kết quả, thì Media CDN đang hoạt động như dự kiến.
Ví dụ về 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
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 ở cạnh. Dịch vụ Cloud Media Edge đang hoạt động như dự kiến.
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 kết nối các dấu chấ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 bộ chứa có tên là
live-streaming-storage-$LOGNAME
để nhận kết quả của tín hiệu phát trực tiếp được chuyển mã sang nội dung HLS bằng API Phát trực tiếp. - Chúng ta 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/Kênh cho API Phát trực tiếp.
- 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 + các phân đoạn TS) đã được tạo và lưu trữ trong bộ chứa
live-streaming-storage-$LOGNAME
. - Thiết lập một Điểm gốc bộ nhớ đệm Edge có tên là
cme-origin
với bộ chứa GCSlive-streaming-storage-$LOGNAME
làm điểm gốc. - Một thực thể Edge Cache có tên là
cme-demo
được thiết lập vớicme-origin
làm nguồn gốc. - Chúng tôi đã xác minh hành vi (bỏ lỡ bộ nhớ đệm, truy cập bộ nhớ đệm) của thực thể Dịch vụ bộ nhớ đệm Edge.
Bây giờ, chúng ta có thể sử dụng trình phát video để truyền trực tuyến tín hiệu phát trực tiếp đã chuyển mã qua bộ nhớ đệm Media CDN. Để làm việc này, chúng ta sẽ sử dụng VLC Player. Trình phát VLC là một trình phát và khung đa phương tiện nguồn mở và miễn phí trên nhiều nền tảng, 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 – 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 giá trị đặt trước mặc định và "chỉ" tạo ra hai 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ẽ truyền trực tuyến tín hiệu phát trực tiếp đã chuyển mã HLS (định dạng video được Apple 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 Trình phát VLC, hãy truy cập vào https://www.videolan.org/vlc/ và tải phiên bản trình phát 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 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 vài bước tiếp theo.
Để phát video, hãy chuyển đến mục "Tệp" / "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 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 phát trực tiếp đã chuyển mã. Đường dẫn ở đây là đường dẫn gốc: "/". - 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 phát trực tiếp đã được 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ẽ chạy theo từng bước 1 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 kiểm thử RTMP cơ bản do FFmpeg tạo, được Live Streaming API chuyển mã sang HLS và phân phát qua bộ nhớ đệm Media CDN:
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 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ở 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 Edge.
17. Giám sát Media CDN
Nhóm SME đã tạo một mẫu trang tổng quan về CDN nội dung nghe nhìn – 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 Google Cloud Console rồi nhấp vào biểu tượng 3 thanh > Hoạt động > Giám sát > Trang tổng quan. Bạn sẽ thấy một trang tổng quan có tên "Chỉ số về cạnh 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 thử nghiệm
Chúc mừng bạn đã hoàn thành lớp học lập trình. Trong phần này, chúng ta sẽ xoá tất cả tài nguyên đã tạo trong suốt lớp học lập trình.
Dừng tín hiệu FFmpeg:
Nhấn phím <CTRL+C>
trên dòng lệnh Cloud Shell nơi FFmpeg đang chạy.
Dừ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 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á thực thể Dịch vụ bộ nhớ đệm 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 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)")