Phát trực tiếp trên Google Cloud với CDN của nội dung nghe nhìn và Live Streaming API

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:

de33cb3e75d52549.png

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:

55efc1aaa7a4d3ad.pngS

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:

7ffe5cbb04455448.pngS

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

  1. Nếu phiên bản SDK là 408.0.0 trở lên, hãy chuyển sang phần tiếp theo.
  2. 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:

  1. Thiết lập biến môi trường
  2. 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 gcloudcurl 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:

  1. Tạo bộ chứa Cloud Storage
  2. Đặ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:

96b5d26aedeb89a6.pngS

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:

  1. Bắt đầu kênh Phát trực tiếp
  2. 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:

  1. Nguồn gốc của bộ nhớ đệm ở cạnh
  2. 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ành cme-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:

  1. Cài đặt FFmpeg, một phần mềm nguồn mở miễn phí
  2. 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.

b3c7b0be6276c194.png

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 hitmiss. 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 GCS live-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ới cme-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.

2a2d19abe728d222.pngS

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ở":

f85565301f7c68dc.png

Thiết lập bằng:

  • URL: http://&lt;Replace_With_Edge_Cache_IP&gt;/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ứa live-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:

28fc359b49d44ec2.pngS

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ố:

d0821d84a88a928d.png

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)")