1. บทนำ
เครือข่ายนำส่งข้อมูล (CDN) ช่วยปรับปรุงประสิทธิภาพของผู้ใช้โดยการแคชเนื้อหาที่เข้าถึงบ่อยๆ ให้ใกล้กับผู้ใช้ปลายทางมากขึ้น ปิดการเชื่อมต่อให้ใกล้กับไคลเอ็นต์มากขึ้น นำการเชื่อมต่อไปยังต้นทางกลับมาใช้ใหม่ และผ่านการใช้โปรโตคอลเครือข่ายและการปรับแต่งที่ทันสมัย สำหรับผู้ใช้ (และลูกค้าของเรา) สิ่งนี้หมายถึงเวลาในการตอบสนองที่ต่ำลง ความน่าเชื่อถือที่มากขึ้น และต้นทุนที่ลดลง ซึ่งจะนำไปสู่ยอดขายที่เพิ่มขึ้น ประสบการณ์บนเว็บที่ดีขึ้น และประสบการณ์ของผู้ใช้ที่เพิ่มขึ้นโดยรวม ปัจจุบันมีเว็บไซต์และแพลตฟอร์มสตรีมมิงวิดีโอเพียงไม่กี่แห่งที่ไม่ได้ใช้ CDN
สิ่งที่คุณจะได้เรียนรู้
แล็บนี้จะแนะนำขั้นตอนในการติดตั้งใช้งานสภาพแวดล้อมเวิร์กโฟลว์การสตรีมแบบสดด้วย Media CDN (CDN) + Cloud Media Live Streaming API (การแปลงรหัสวิดีโอสด) + Cloud Storage (ที่เก็บข้อมูลสำหรับวิดีโอ) + Video Player (VLC, Google Shaka Player ฯลฯ - โปรแกรมเล่นที่พร้อมใช้งาน HLS + MPEG-DASH)
เราจะตั้งค่าคอมโพเนนต์ Live Streaming API - อินพุต ช่อง - และเริ่มฟีดสดไปยังอินพุต/ช่องด้วย FFmpeg (FFmpeg สามารถสร้างสัญญาณทดสอบสดได้) API สตรีมมิงแบบสดจะแปลงรหัสฟีดสด ระบบจะจัดเก็บไฟล์ Manifest และกลุ่มวิดีโอที่แปลงรหัสแล้วไว้ใน Bucket ของ Cloud Storage จากนั้นเราจะตั้งค่า Media CDN โดยใช้ที่เก็บข้อมูล Cloud Storage ของวิดีโอสดเป็นต้นทาง สุดท้ายนี้ เราจะใช้ VLC Player เพื่อเล่นเนื้อหาแบบสดที่แคชผ่าน Media CDN นอกจากนี้ เราจะตั้งค่าแดชบอร์ด Cloud Monitoring เพื่อแสดงภาพกิจกรรมของ Media CDN ด้วย
สิ่งที่คุณจะสร้าง
ในแล็บนี้ เราจะตั้งค่าสภาพแวดล้อมตามสถาปัตยกรรมต่อไปนี้

เราจะตั้งค่าคอมโพเนนต์ต่อไปนี้และทํางานต่อไปนี้เป็นส่วนหนึ่งของแล็บ
- สร้าง Bucket ของ Google Cloud Storage (GCS) เพื่อจัดเก็บวิดีโอที่แปลงรหัสแบบสด
- กำหนดค่า Live Streaming API เพื่อแปลงรหัสวิดีโอเป็นหลายรูปแบบ ได้แก่ HLS + MPEG DASH, SD และ HD
- ตั้งค่าคอมโพเนนต์การไลฟ์สด: อินพุต/ช่อง
- เริ่มช่องไลฟ์สด
- ตั้งค่า Media CDN โดยใช้ที่เก็บข้อมูล GCS เป็นต้นทาง
- ตั้งค่า FFmpeg เพื่อป้อนข้อมูลไปยังช่องแบบสด
- สตรีมฟีดสดที่แปลงรหัสแล้วด้วยวิดีโอเพลเยอร์
- ตั้งค่าแดชบอร์ด Cloud Monitoring เพื่อตรวจสอบกิจกรรมของ Media CDN (เวลาในการตอบสนอง, แคชฮิต, แคชมิส ฯลฯ)
หมายเหตุ: สำหรับแล็บนี้ เราจะถือว่าผู้ใช้มีสิทธิ์เข้าถึงคอนโซล Google Cloud และได้ตั้งค่าโปรเจ็กต์ไว้แล้ว นอกจากนี้ เรายังถือว่าผู้ใช้เริ่มต้นด้วยสภาพแวดล้อมใหม่และไม่ได้ตั้งค่าอะไรสำหรับการสาธิตนี้
การดำเนินการกำหนดค่าทั้งหมดจะทำผ่านบรรทัดคำสั่งใน Cloud Shell เราตรวจสอบคอมโพเนนต์ที่กำหนดค่าผ่านบรรทัดคำสั่งในคอนโซลได้ทุกเมื่อ เราจะเห็นคำแนะนำตลอดทั้งแล็บที่ชี้ไปยัง Google Cloud Console
2. ก่อนเริ่มต้น
มีการจำกัดการเข้าถึง Media CDN หากต้องการเข้าถึง Media CDN โปรดติดต่อทีมดูแลลูกค้า โดยพาร์ทเนอร์ดังกล่าวจะสร้างคำขอสิทธิ์เข้าถึงในนามของคุณได้ หากคุณเป็นส่วนหนึ่งของ Google และต้องการทดสอบการไลฟ์สดด้วย Media CDN โปรดติดต่อ PM สำหรับ Media CDN เพื่อขอสิทธิ์เข้าถึง Media CDN
3. การตั้งค่าและข้อกำหนด
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดใน Codelab นี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร
4. เวอร์ชัน Google Cloud SDK
ณ เวลาที่เขียน 408.0.0 คือ SDK ของ Google Cloud เวอร์ชันล่าสุด คำสั่งทั้งหมดในแล็บนี้ได้รับการทดสอบโดยใช้ Google Cloud SDK เวอร์ชันล่าสุด ก่อนดำเนินการต่อ โปรดตรวจสอบว่า Cloud Shell ใช้ SDK เวอร์ชันล่าสุด
การตรวจสอบเวอร์ชัน SDK
เราจะใช้คำสั่ง gcloud version เพื่อตรวจสอบเวอร์ชัน SDK
คำสั่ง
gcloud version | grep "Google Cloud SDK"
ตัวอย่างเอาต์พุต
Google Cloud SDK 408.0.0
ขั้นตอนถัดไป
- หาก SDK เป็นเวอร์ชัน
408.0.0ขึ้นไป ให้ข้ามไปยังส่วนถัดไป - หากเวอร์ชัน SDK ต่ำกว่า
408.0.0ให้เรียกใช้คำสั่งที่ระบุไว้ด้านล่างเพื่ออัปเดต SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk
5. ข้อกำหนดเบื้องต้น
ก่อนเริ่มกำหนดค่าทรัพยากร GCP เราต้องทำสิ่งต่อไปนี้
- ตั้งค่าตัวแปรสภาพแวดล้อม
- เปิดใช้ Service API ที่จำเป็น
1. ตั้งค่าตัวแปรสภาพแวดล้อม
ตลอดแล็บนี้ เราจะเรียกใช้คำสั่ง gcloud และ curl โดยใช้ตัวแปร 2-3 ตัว เราต้องกำหนดค่าตัวแปรสภาพแวดล้อมต่อไปนี้
- รหัสโปรเจ็กต์
- หมายเลขโปรเจ็กต์
- ชื่อผู้ใช้
- ภูมิภาค
- รหัสอินพุต
- รหัสช่อง
รหัสโปรเจ็กต์และชื่อผู้ใช้
โดยทั่วไปแล้ว ตัวแปรสภาพแวดล้อมเหล่านี้จะได้รับการกำหนดค่าล่วงหน้าใน Cloud Shell เราจะใช้คำสั่ง env เพื่อยืนยัน
คำสั่ง
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'
ตัวอย่างเอาต์พุต
DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID> LOGNAME=<YOUR_USERNAME>
สร้างไฟล์ env_variables
ใช้คำสั่ง cat เพื่อสร้างไฟล์ env_variables.txt คำสั่งด้านล่างจะสร้างไฟล์ env_variables.txt ในไดเรกทอรีหลักของผู้ใช้
คำสั่ง
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
ตั้งค่าตัวแปรสภาพแวดล้อม
เราจะใช้คำสั่ง source เพื่อตั้งค่าตัวแปรสภาพแวดล้อม
คำสั่ง
source ~/env_variables.txt
ตรวจสอบว่าได้ตั้งค่าตัวแปรแล้ว
มาตรวจสอบว่าได้ตั้งค่าตัวแปรสภาพแวดล้อมที่จำเป็นทั้งหมดแล้ว เราควรเห็นตัวแปรสภาพแวดล้อมทั้งหมด 6 รายการในเอาต์พุต
คำสั่ง
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
ตัวอย่างเอาต์พุต
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. เปิดใช้ API ของบริการที่จำเป็น
เราต้องตรวจสอบว่าได้เปิดใช้ API ต่อไปนี้ในโปรเจ็กต์แล้ว
- Network Services API
- Certificate Manager API
- Livestream API
- Media CDN Edge Cache API
เปิดใช้ Network Services API
หากต้องการเปิดใช้ Network Services API ให้เรียกใช้คำสั่งต่อไปนี้
คำสั่ง
gcloud services enable networkservices.googleapis.com
เปิดใช้ Certificate Manager API
หากต้องการเปิดใช้ Certificate Manager API ให้เรียกใช้คำสั่งต่อไปนี้
คำสั่ง
gcloud services enable certificatemanager.googleapis.com
เปิดใช้ Live Stream API
หากต้องการเปิดใช้ Live Stream API ให้เรียกใช้คำสั่งต่อไปนี้
คำสั่ง
gcloud services enable livestream.googleapis.com
เปิดใช้ Media CDN Edge Cache API
หากต้องการเปิดใช้ Media CDN Edge Cache API ให้เรียกใช้คำสั่งต่อไปนี้
คำสั่ง
gcloud services enable edgecache.googleapis.com
ตรวจสอบว่าได้เปิดใช้ API แล้ว
เรียกใช้คำสั่ง gcloud services list เพื่อแสดงรายการ API ที่เปิดใช้ทั้งหมด เราควรเห็น API 4 รายการในเอาต์พุต
คำสั่ง
gcloud services list | grep -E 'networkservices|certificatemanager|livestream|edgecache'
ตัวอย่างเอาต์พุต
NAME: certificatemanager.googleapis.com NAME: livestream.googleapis.com NAME: networkservices.googleapis.com NAME: edgecache.googleapis.com
6. สร้าง Bucket ของ Cloud Storage
ในส่วนนี้ เราจะทำสิ่งต่อไปนี้
- สร้างที่เก็บข้อมูล Cloud Storage
- กำหนดให้ Bucket เข้าถึงได้แบบสาธารณะ
ในภายหลังในแล็บ เราจะใช้ที่เก็บข้อมูลนี้เพื่อจัดเก็บไฟล์วิดีโอที่แปลงรหัสแล้ว นอกจากนี้ Bucket นี้ยังทำหน้าที่เป็นที่เก็บข้อมูลต้นทางสำหรับบริการ Media CDN ด้วย
1. สร้างที่เก็บข้อมูล
เราจะใช้คำสั่ง gsutil mb เพื่อสร้างที่เก็บข้อมูล
คำสั่ง
gsutil mb gs://live-streaming-storage-$LOGNAME
2. ทำให้ Bucket เข้าถึงได้แบบสาธารณะ
เราจะใช้คำสั่ง gsutil iam เพื่อทำให้ไฟล์พร้อมใช้งานต่อสาธารณะ
คำสั่ง
gsutil iam ch allUsers:objectViewer gs://live-streaming-storage-$LOGNAME
7. การตั้งค่าสภาพแวดล้อม Live Streaming API
คอมโพเนนต์ของเชน Live Streaming API ได้รับการออกแบบมาดังนี้

เราสร้าง Bucket ของ Cloud Storage live-streaming-storage-$LOGNAME ในส่วนก่อนหน้า ใน 2 ส่วนถัดไป เราจะสร้างทรัพยากรต่อไปนี้
- อินพุตการไลฟ์สด: ปลายทางอินพุตคือปลายทางที่โปรแกรมเปลี่ยนไฟล์ส่งสตรีมอินพุต คุณสามารถใช้ปลายทางอินพุตเพื่อระบุการกำหนดค่าสำหรับสตรีม เช่น ความละเอียดของอินพุต ประเภทอินพุต และการครอบตัดวิดีโอ
- ช่องไลฟ์สด: ช่องคือทรัพยากรที่รับสตรีมอินพุตผ่านปลายทางอินพุต แปลงรหัสสตรีมอินพุตเป็นหลายเวอร์ชัน และเผยแพร่ไลฟ์สดเอาต์พุตในรูปแบบที่กำหนดในตำแหน่งที่ระบุ คุณสามารถรวมสตรีมอินพุตหลักและสำรองไว้ในช่องเดียวกันได้
เราจะสร้างทรัพยากรต่อไปนี้ในภายหลังในแล็บ
- โปรแกรมเปลี่ยนไฟล์: โปรแกรมเปลี่ยนไฟล์คือโปรแกรมที่ใช้ส่งสตรีมอินพุต ใน Lab นี้ เราจะใช้ FFmpeg
8. สร้างและกำหนดค่าปลายทางอินพุต
สร้างไฟล์ input.json
เราจะสร้างไฟล์ input.json เพื่อระบุประเภทสัญญาณไลฟ์สด ใน Lab นี้ เราจะใช้สัญญาณสด RTMP
คำสั่ง
cat > input.json << EOF
{
"type": "RTMP_PUSH"
}
EOF
สร้างปลายทางอินพุต
ณ เวลาที่เขียนแล็บนี้ gcloud ยังไม่รองรับ Live Stream API เราจะใช้คำสั่ง curl เพื่อทำการเรียก API
คำสั่ง
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"
ตัวอย่างเอาต์พุต
{
"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
}
เอาต์พุตมีข้อมูลที่เป็นประโยชน์มากมาย แต่ในตอนนี้เราต้องมุ่งเน้นที่ 2 ฟิลด์ต่อไปนี้
- รหัสการดำเนินการ: คัดลอกและจดรหัสการดำเนินการจากเอาต์พุต ด้านล่างคือรหัสการดำเนินการจากตัวอย่างเอาต์พุต ซึ่งจะอยู่ในบรรทัดเอาต์พุตที่ขึ้นต้นด้วย
"name""operation-1661405972853-5e70a38d6f27f-79100d00-310671b4" - สถานะ: เราต้องรอให้สถานะเปลี่ยนจาก
"done": falseเป็น"done": true
ตรวจสอบสถานะ
ก่อนที่จะดําเนินการต่อ เราต้องตรวจสอบว่าได้สร้างปลายทางอินพุตสําเร็จและพร้อมใช้งานแล้ว
ในคำสั่งด้านล่าง ให้แทนที่ <OPERATION> ด้วยรหัสของการดำเนินการที่เราเพิ่งได้รับด้านบน ในตัวอย่างนี้คือ "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4"
คำสั่ง
export OPERATION_ID_1=<OPERATION>
คำสั่ง
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"
ตัวอย่างเอาต์พุต
{
"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"
}
}
เรียกใช้คำสั่งอีกครั้งจนกว่าคุณจะเห็น "done:true" ซึ่งแสดงว่าสร้าง Input Endpoint แล้วและพร้อมใช้งาน
บันทึก URI
เราจะใช้ URI จากเอาต์พุตก่อนหน้าในภายหลังในแล็บ ตอนนี้มาตั้งค่าตัวแปรสภาพแวดล้อมสำหรับ URI กัน
คำสั่ง
export URI=<uri>
แทนที่ <uri> ด้วย URI ที่คุณเพิ่งจดไว้ข้างต้น นอกจากนี้ คุณยังใช้วิธี GET เพื่อดึงข้อมูล URI ได้ด้วย
คำสั่ง
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. สร้างและกำหนดค่าช่องไลฟ์สด
มาสร้างช่องไลฟ์สดที่เชื่อมโยงกับปลายทางอินพุตที่เราเพิ่งสร้างในส่วนก่อนหน้ากัน ตัวอย่างต่อไปนี้จะสร้างช่องที่สร้างไลฟ์สด HLS ซึ่งประกอบด้วยการแสดงผลความละเอียดสูง (1280x720) รายการเดียว ระบบจะเชื่อมโยงช่องกับปลายทางอินพุตและที่เก็บข้อมูล Bucket ที่เราสร้างไว้ก่อนหน้านี้
สร้างไฟล์ channel.json
ในเทอร์มินัลของ Cloud Shell ให้พิมพ์คำสั่งต่อไปนี้เพื่อสร้างไฟล์ "channel.json"
คำสั่ง
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
สร้างช่อง
เรียกใช้คำสั่ง curl ต่อไปนี้เพื่อสร้างแชแนล
คำสั่ง
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"
ตัวอย่างเอาต์พุต
{
"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
}
จดและคัดลอกรหัสการดำเนินการ เนื่องจากเราจะต้องใช้ในขั้นตอนใดขั้นตอนหนึ่งในอนาคต ซึ่งจะอยู่ในบรรทัดเอาต์พุตที่ขึ้นต้นด้วย "name"
ตรวจสอบสถานะ
ก่อนดำเนินการต่อ เราต้องตรวจสอบว่าได้สร้างช่องเรียบร้อยแล้วและช่องพร้อมใช้งาน
ในคำสั่งด้านล่าง ให้แทนที่ <OPERATION> ด้วยรหัสของการดำเนินการที่เราเพิ่งได้รับด้านบน ในตัวอย่างนี้คือ operation-1661405972853-5e70a38d6f27f-79100d00-310671b4
คำสั่ง
export OPERATION_ID_2=<OPERATION>
คำสั่ง
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"
ตัวอย่างเอาต์พุต
"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"
}
}
}
เรียกใช้คำสั่งอีกครั้งจนกว่าคุณจะเห็น "done:true" ซึ่งแสดงว่าสร้าง Input Endpoint แล้วและพร้อมใช้งาน
โปรดทราบว่าขณะนี้ "streamingState" คือ "STOPPED" และเราจะเริ่มช่องในส่วนถัดไป
10. เริ่มช่องไลฟ์สด
ตอนนี้เราได้สร้างช่องไลฟ์สดแล้ว มาเริ่มใช้ช่องกันเลย ในส่วนนี้ เราจะทำสิ่งต่อไปนี้
- เริ่มช่องไลฟ์สด
- ตรวจสอบสถานะของช่อง เราต้องตรวจสอบว่า
streamingStateเป็น"AWAITING INPUT"
1. เริ่มช่อง
ใน Cloud Shell ให้เรียกใช้คำสั่ง curl ต่อไปนี้เพื่อเริ่มช่อง
คำสั่ง
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"
ตัวอย่างเอาต์พุต
{
"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. ตรวจสอบสถานะของช่อง
เรียกใช้คำสั่ง curl ต่อไปนี้เพื่อดูสถานะของช่อง
คำสั่ง
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"
ตัวอย่างเอาต์พุต
"streamingState": "AWAITING_INPUT",
เรียกใช้คำสั่งอีกครั้งจนกว่าจะเห็น "AWAITING_INPUT" ซึ่งแสดงว่าช่องกำลังทำงานและพร้อมรับสัญญาณ
11. กำหนดค่า Media CDN
ในส่วนนี้ เราจะติดตั้งใช้งาน Media CDN ซึ่งเป็นโครงสร้างพื้นฐานของ CDN เราจะสร้างทรัพยากรต่อไปนี้
- ต้นทางของ Edge Cache
- บริการแคชที่ Edge
1. สร้างต้นทางของ Edge Cache
ต้นทางของ Edge Cache แสดงถึงตำแหน่งเนื้อหา เช่น Bucket ของ Cloud Storage, ตำแหน่งพื้นที่เก็บข้อมูลของบุคคลที่สาม หรือตัวจัดสรรภาระงาน ในแง่ของ CDN ต้นทาง (หรือเซิร์ฟเวอร์ต้นทาง) คือตำแหน่งที่ตั้งของแหล่งที่มาของเนื้อหาที่เราต้องการเผยแพร่ เช่น CSS, JavaScript, HTML, รูปภาพ ฯลฯ สำหรับแล็บนี้ เราจะสร้างต้นทางที่แมปกับที่เก็บข้อมูล Cloud Storage ที่เราสร้างขึ้นในช่วงต้นของแล็บ เราจะเรียกต้นทางของ Edge Cache ว่า cme-origin ต้นทางของ CDN คือที่ที่จัดเก็บเนื้อหาต้นฉบับทั้งหมดก่อนที่จะกระจายไปยังเซิร์ฟเวอร์แคชที่ขอบ
เราจะใช้คำสั่ง gcloud edge-cache origins create เพื่อสร้างต้นทาง คำสั่งจะใช้เวลาสักครู่จึงจะเสร็จสมบูรณ์
คำสั่ง
gcloud edge-cache origins create cme-origin \ --origin-address="gs://live-streaming-storage-$LOGNAME"
ตัวอย่างเอาต์พุต
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. สร้างบริการ Edge Cache
เมื่อตั้งค่าต้นทางของ Edge Cache แล้ว เราก็สามารถสร้างบริการ Edge Cache ได้
สร้างไฟล์ cme-demo.yaml
การกำหนดค่าบริการแคชที่ Edge จะทำผ่านไฟล์ YAML ใน Cloud Shell ให้สร้างไฟล์ในเครื่องชื่อ cme-demo.yaml ใช้ vi, nano หรือโปรแกรมแก้ไขอื่นๆ แล้ววางบรรทัดต่อไปนี้ในไฟล์ 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
เราจะคงค่าเริ่มต้นของการกำหนดค่า Edge Cache Service ทั้งหมดไว้ ในไฟล์ด้านบนมีค่าฟิลด์ 3 ค่าที่ผู้ใช้อาจต้องการอัปเดต ดังนี้
name: ชื่อของอินสแตนซ์ Media CDN - ในที่นี้คือcme-demohosts:รายชื่อชื่อโดเมนที่จะได้รับการแก้ไขโดยบริการ Media CDN นี้ - ที่นี่:demo.cme.comเราจะใช้ข้อมูลนี้ในระหว่างการสาธิตนี้ เราจะใช้ที่อยู่ IP ของอินสแตนซ์ Media CDNOrigin:นี่คือต้นทางของ Edge Cache ที่เราเพิ่งสร้างในขั้นตอนก่อนหน้า ตั้งค่าเป็นcme-origin- ชื่อของต้นทาง Media CDN
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรต่างๆ ที่คุณใช้ในไฟล์ YAML ได้ในคู่มือการกำหนดค่าบริการ Edge Cache
สร้างบริการ Edge Cache
เราจะสร้างบริการ Edge Cache ชื่อ cme-demo ในต้นทาง Edge Cache cme-origin ที่มีโฮสต์ demo.cme.com หากต้องการสร้างบริการ ให้เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud edge-cache services import cme-demo \
--source=cme-demo.yaml
การสร้างบริการแคช Edge อาจใช้เวลา 2-3 นาที
ตัวอย่างเอาต์พุต
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'
จดและคัดลอก ipv4Addresses ของอินสแตนซ์ Edge Cache Service - ที่นี่ 34.104.36.157 เราจะใช้ไฟล์นี้เพื่ออัปเดตไฟล์ cme-demo.yaml และใช้สตรีมวิดีโอที่แปลงรหัสแล้วในภายหลัง
อัปเดตบริการ Edge Cache
ตอนนี้คุณควรจะอัปเดตการกำหนดค่าบริการ Edge Cache เพื่อให้ใช้ IP ของบริการในการสตรีมวิดีโอในภายหลังได้ ไฟล์ YAML ของบริการแคชที่ขอบช่วยให้เราแสดงชื่อโฮสต์/IP ทั้งหมดที่บริการแคชที่ขอบจะยอมรับคำขอได้ ในตอนนี้เราได้ระบุ demo.cme.com เป็นโฮสต์เท่านั้น หากต้องการระบุชื่อสำหรับโดเมนนี้ คุณสามารถกำหนดค่าโซน DNS ได้ อย่างไรก็ตาม วิธีที่ง่ายกว่าคือการเพิ่มที่อยู่ IP ลงในรายการโฮสต์ในไฟล์ yaml แก้ไขไฟล์ YAML อีกครั้งและแก้ไขให้มีลักษณะเหมือนกับไฟล์ด้านล่าง
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
หากต้องการให้การเปลี่ยนแปลงมีผล เราเพียงแค่นำเข้าไฟล์ YAML อีกครั้ง ในเทอร์มินัล Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้
คำสั่ง
gcloud edge-cache services import cme-demo \
--source=cme-demo.yaml
ตรวจสอบเอาต์พุตของคำสั่งและยืนยันว่า IP ปรากฏในรายการโฮสต์
ณ จุดนี้ อินสแตนซ์บริการแคชที่ขอบจะยอมรับคำขอที่มี "demo.cme.com" หรือที่อยู่ IP เป็นโฮสต์
12. สร้างสัญญาณอินพุต
ตอนนี้เราได้กำหนดค่าบริการที่จำเป็นทั้งหมดแล้ว มาสร้างสัญญาณอินพุตของไลฟ์สดกัน ในส่วนนี้ เราจะทำสิ่งต่อไปนี้
- ติดตั้ง FFmpeg ซึ่งเป็นซอฟต์แวร์โอเพนซอร์สฟรี
- ส่งสัญญาณไลฟ์สดทดสอบไปยังอินพุต/ช่อง
1. ติดตั้ง FFmpeg
FFmpeg เป็นโปรเจ็กต์ซอฟต์แวร์โอเพนซอร์สฟรีที่ประกอบด้วยชุดไลบรารีและโปรแกรมสำหรับจัดการวิดีโอ เสียง และไฟล์และสตรีมมัลติมีเดียอื่นๆ ในเทอร์มินัลของ Cloud Shell ให้ใช้คำสั่งต่อไปนี้เพื่อติดตั้ง FFmpeg
คำสั่ง
sudo apt install ffmpeg -y
เมื่อติดตั้งเสร็จแล้ว ให้ตรวจสอบว่าได้ติดตั้ง FFmpeg อย่างถูกต้องโดยตรวจสอบเวอร์ชันของ FFmpeg ดังนี้
คำสั่ง
ffmpeg -version
ตัวอย่างเอาต์พุต
ffmpeg version 4.3.4-0+deb11u1 Copyright (c) 2000-2021 the FFmpeg developers built with gcc 10 (Debian 10.2.1-6) ...
ติดตั้ง FFmpeg อย่างถูกต้อง
2. เริ่มสัญญาณไลฟ์สดไปยังอินพุต/ช่อง
เมื่อติดตั้ง FFmpeg แล้ว เราจะส่งสตรีมอินพุตทดสอบไปยังปลายทางอินพุตเพื่อสร้างไลฟ์สด
ในเทอร์มินัล Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้โดยใช้ตัวแปรสภาพแวดล้อม URI ที่เราสร้างไว้ในส่วน "สร้างและกำหนดค่าปลายทางอินพุต"
คำสั่ง
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \ -acodec aac -vcodec h264 -f flv $URI
คุณควรเห็น FFmpeg ส่งสัญญาณทดสอบสด คำสั่งจะไม่แสดงพรอมต์ ระบบจะสร้างสัญญาณจนกว่าคุณจะหยุด คุณจะต้องเปิดหน้าต่าง Cloud Shell ใหม่สำหรับส่วนที่เหลือของแล็บ
13. เปิด Cloud Shell ใหม่
ตอนนี้คุณจะต้องเปิดหน้าต่าง Cloud Shell ใหม่เพื่อทำแล็บต่อ เนื่องจาก FFmpeg จะทำงานอย่างถาวรจนกว่าคุณจะกด <CTRL+C> เพื่อหยุดคำสั่ง และหยุดการสร้างสัญญาณสด
คลิกเครื่องหมาย "+" ข้างชื่อเทอร์มินัล Cloud Shell ปัจจุบัน ซึ่งจะเป็นการเปิดหน้าต่าง Cloud Shell เพิ่มเติม

เรียกใช้ส่วนที่เหลือของแล็บในหน้าต่าง Cloud Shell ที่เพิ่งเปิด
ตั้งค่าตัวแปรสภาพแวดล้อม
เนื่องจากเป็น Cloud Shell ใหม่ เราจึงต้องตั้งค่าตัวแปรสภาพแวดล้อมอีกครั้ง เราจะใช้คำสั่ง source เพื่อตั้งค่าตัวแปรสภาพแวดล้อม
คำสั่ง
source ~/env_variables.txt
ตรวจสอบว่าได้ตั้งค่าตัวแปรแล้ว
มาตรวจสอบว่าได้ตั้งค่าตัวแปรสภาพแวดล้อมที่จำเป็นทั้งหมดแล้ว เราควรเห็นตัวแปรสภาพแวดล้อมทั้งหมด 6 รายการในเอาต์พุต
คำสั่ง
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
ตัวอย่างเอาต์พุต
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. ตรวจสอบว่าระบบกำลังเปลี่ยนรหัสสัญญาณสด
เราจะแสดงcurlเพื่ออธิบายช่อง เราควรเห็นในเอาต์พุตว่า streamingState เปลี่ยนจาก "AWAITING_INPUT" เป็น "STREAMING"
คำสั่ง
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"
ในการตอบกลับไฟล์ JSON เอาต์พุต คุณควรเห็น "streamingState": "STREAMING" ซึ่งบ่งบอกว่าช่องกำลังสตรีมและระบบกำลังแปลงรหัสสัญญาณสด
นอกจากนี้ เรามาตรวจสอบเนื้อหาของที่เก็บข้อมูลที่เราควรเห็นไฟล์ Manifest และวิดีโอ TS หลายๆ ส่วนกัน เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อแสดงเนื้อหาของที่เก็บข้อมูลที่เราสร้างขึ้นในช่วงต้นของแล็บและใช้โดย Live Streaming API เพื่อส่งออกไฟล์ Manifest ของสัญญาณสดที่แปลงรหัสแล้วและวิดีโอ TS ที่แบ่งเป็นส่วนๆ
คำสั่ง
gcloud storage ls --recursive gs://live-streaming-storage-$LOGNAME/**
ตัวอย่างเอาต์พุต
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 ...
คุณควรเห็นข้อมูลต่อไปนี้
- ไฟล์ Manifest ของ HLS:
main.m3u8 - ส่วนวิดีโอ TS ที่เกี่ยวข้อง: ชุดไฟล์ที่มีหมายเลข
segment-000000000X.ts
ตอนนี้เราได้ดำเนินการต่อไปนี้เสร็จแล้ว
- Live Streaming API: สร้างสัญญาณสดและแปลงรหัสลงในที่เก็บข้อมูลผ่าน Live Streaming API
- Media CDN: กำหนดค่า Media CDN โดยใช้ที่เก็บข้อมูลไลฟ์สดเป็นต้นทางของ Media CDN
ในส่วนถัดไป เราจะตรวจสอบบริการ Edge Cache จากนั้นจะสตรีมวิดีโอที่แปลงรหัสโดยใช้ที่อยู่ IP แบบ Anycast ของ Media CDN
15. ตรวจสอบว่าอินสแตนซ์บริการแคชที่ Edge ทำงานอยู่
ในส่วนนี้ เราจะยืนยันว่าอินสแตนซ์บริการแคชที่ Edge ทำงานได้ตามที่คาดไว้ โดยเราจะพยายามเข้าถึงไฟล์จากอินสแตนซ์บริการแคชที่ขอบโดยใช้ที่อยู่ IP ของบริการแคชที่ขอบ เมื่อเข้าถึงออบเจ็กต์เป็นครั้งแรก ระบบจะยังไม่ได้แคชออบเจ็กต์นั้น เราควรสังเกตแคช MISS สำหรับคำขอแรก ระบบจะอ่านออบเจ็กต์จากต้นทางและแคชที่ Edge การพยายามเข้าถึงไฟล์เดียวกันในครั้งต่อๆ ไปจะแสดงแคช HIT เนื่องจากตอนนี้แคชของออบเจ็กต์อยู่ที่ Edge มาตรวจสอบลักษณะการทำงานนี้กัน
เรียกใช้คำสั่ง curl ต่อไปนี้ใน Cloud Shell เพื่อเข้าถึงไฟล์ Manifest ของวิดีโอที่แปลงรหัสแล้วซึ่งจัดเก็บไว้ในต้นทางของ Edge Cache
คำสั่ง
curl -svo /dev/null --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> \ "http://demo.cme.com/main.m3u8"
โปรดสังเกตการแก้ไขที่เราใช้ที่อยู่ IP ของอินสแตนซ์บริการ Edge Cache เพื่อแก้ไขชื่อ ตรวจสอบว่าคุณใช้ demo.cme.com:<IP> โดยที่ IP คือ IP ของอินสแตนซ์บริการ Edge Cache ที่เราเพิ่งสร้าง
มองหาส่วนหัว x-cache-status ในเอาต์พุต
ตัวอย่างเอาต์พุต
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
โปรดสังเกตว่าแคชไม่พบเนื่องจากยังไม่ได้แคชออบเจ็กต์และอ่านจากต้นทาง
ตอนนี้เราจะส่งคำขอหลายรายการสำหรับไฟล์ m3u8 และหากกำหนดค่าทุกอย่างถูกต้อง Media CDN ควรเริ่มแสดงเนื้อหาจากแคช คำสั่งด้านล่างจะส่งคำขอ curl 10 รายการและพิมพ์เฉพาะส่วนหัว x-cache-status
คำสั่ง
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
เอาต์พุตควรเป็นส่วนผสมของแคช hit และ miss หากเห็นแคชฮิตในเอาต์พุต แสดงว่า Media CDN ทำงานได้ตามที่คาดไว้
ตัวอย่างเอาต์พุต
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
สังเกตการเข้าถึงแคชเนื่องจากตอนนี้ระบบแคชออบเจ็กต์ที่ Edge แล้ว Cloud Media Edge Service ทำงานเป็นปกติ
16. สตรีมวิดีโอสัญญาณสดที่แปลงรหัสแล้วด้วย VLC
ในส่วนนี้ เราจะเชื่อมโยงและลิงก์ขั้นตอนทั้งหมดที่เราได้ดำเนินการมาจนถึงตอนนี้
- เราสร้างที่เก็บข้อมูลชื่อ
live-streaming-storage-$LOGNAMEซึ่งรับผลลัพธ์ของสัญญาณสดที่แปลงรหัสเป็นเนื้อหา HLS โดย Live Streaming API - เราได้ตั้งค่า Live Streaming API
- เราเริ่มสัญญาณไลฟ์สด RTMP ด้วย FFmpeg ซึ่งป้อนข้อมูลไปยังอินพุต/แชแนลของ Live Streaming API
- เราได้ยืนยันว่ามีการป้อนสัญญาณสดไปยังช่องและยืนยันว่าช่องอยู่ในโหมด
streaming - เราได้ยืนยันว่าระบบสร้างและจัดเก็บไฟล์ที่แปลงรหัสแล้ว (ไฟล์ Manifest + ส่วน TS) ไว้ใน Bucket
live-streaming-storage-$LOGNAME - มีการตั้งค่าต้นทางของ Edge Cache ที่ชื่อ
cme-originโดยใช้ Bucket ของ GCSlive-streaming-storage-$LOGNAMEเป็นต้นทาง - มีการตั้งค่าอินสแตนซ์ Edge Cache ชื่อ
cme-demoโดยมีcme-originเป็นต้นทาง - เราได้ยืนยันลักษณะการทำงาน (แคชไม่พบ แคชพบ) ของอินสแตนซ์บริการ Edge Cache แล้ว
ตอนนี้เราพร้อมที่จะใช้วิดีโอเพลเยอร์เพื่อสตรีมสัญญาณสดที่แปลงรหัสแล้วผ่านแคชของ Media CDN โดยเราจะใช้ VLC Player VLC Player เป็นโปรแกรมเล่นมัลติมีเดียและเฟรมเวิร์กข้ามแพลตฟอร์มแบบโอเพนซอร์สที่ใช้งานได้ฟรี ซึ่งเล่นไฟล์มัลติมีเดียส่วนใหญ่ได้ โดยจะเล่นรูปแบบสื่อแบบปรับอัตราการส่งข้อมูล (เช่น DASH และ HLS) โดยใช้หลักการของการสตรีมแบบปรับอัตโนมัติ ซึ่งหมายความว่าโปรแกรมเล่นจะปรับคุณภาพของวิดีโอที่เล่นตามคุณภาพของการเชื่อมต่อเครือข่ายและแบนด์วิดท์ที่มี ในงานการแปลงรหัสที่เราเพิ่งทำไป เราใช้ค่าที่กำหนดล่วงหน้าเริ่มต้นและสร้างคุณภาพ 2 ระดับ "เท่านั้น" ได้แก่ SD และ HD เมื่อเราเริ่มเล่นวิดีโอในเพลเยอร์ คุณควรเห็นวิดีโอเริ่มเล่นในรูปแบบ SD และเปลี่ยนเป็นรูปแบบ HD อย่างรวดเร็วหากการเชื่อมต่อเครือข่ายดีพอ
เราจะสตรีมสัญญาณสดที่แปลงรหัสแล้วในรูปแบบ HLS (รูปแบบวิดีโอของ Apple ที่รองรับอย่างกว้างขวาง) ไฟล์ที่เกี่ยวข้องเรียกว่า main.m3u8 ซึ่งเป็นไฟล์ Manifest ของ HLS ไฟล์ Manifest จะชี้ไปยังเซกเมนต์วิดีโอ TS
หากต้องการใช้ VLC Player ให้ไปที่ https://www.videolan.org/vlc/ แล้วดาวน์โหลดโปรแกรมเล่นเวอร์ชันสำหรับระบบปฏิบัติการของแล็ปท็อป โดย VLC มีให้ใช้งานสำหรับ Windows, MacOSX, Linux, Android และ iOS

ติดตั้งโปรแกรมเล่นบนแล็ปท็อปแล้วเปิดใช้งาน เราจะใช้โปรแกรมเล่นเวอร์ชัน MacOSX สำหรับขั้นตอนต่อไปอีก 2-3 ขั้นตอน
หากต้องการเล่นวิดีโอ ให้ไปที่ "ไฟล์" / "เปิดเครือข่าย"

ตั้งค่าด้วย
- URL: http://<Replace_With_Edge_Cache_IP>/main.m3u8 นี่คือ URL ของวิดีโอที่เราต้องการสตรีม หมายเหตุ:
- IP ของอินสแตนซ์ Media CDN:
34.105.35.246แทนที่ด้วย IP ของบริการสื่อในระบบคลาวด์ที่คุณติดตั้งใช้งาน - เส้นทางไปยังไฟล์วิดีโอ Manifest: "
/" นี่คือเส้นทางที่เราใช้ในที่เก็บข้อมูลlive-streaming-storage-$LOGNAMEเพื่อจัดเก็บไฟล์สัญญาณสดที่แปลงรหัสแล้ว เส้นทางคือเส้นทางรูทที่นี่: "/" - ชื่อไฟล์วิดีโอ Manifest: ไฟล์ Manifest ของ HLS,
main.m3u8
แล้วคลิก "เปิด" คุณควรเห็นวิดีโอสดที่แปลงรหัสแล้วเริ่มเล่น วิดีโอจะมีลักษณะเหมือนภาพหน้าจอด้านล่าง ตัวนับบนหน้าจอจะเพิ่มขึ้นทีละ 1 และคุณควรได้ยินเสียงบี๊ปอย่างต่อเนื่อง
โดยเป็นสัญญาณไลฟ์สดทดสอบ RTMP พื้นฐานที่สร้างโดย FFmpeg ซึ่งแปลงรหัสเป็น HLS โดย Live Streaming API และแสดงผ่านแคช Media CDN

คุณสามารถใช้เพลเยอร์ HLS และ MPEG DASH อื่นๆ ได้หากต้องการ โดยตัวอย่างเพลเยอร์ที่คุณอาจสนใจมีดังนี้
- Quicktime Player - ติดตั้งไว้ใน Mac โดยค่าเริ่มต้น เช่นเดียวกัน ให้เปิดการเชื่อมต่อเครือข่ายกับ http://34.104.36.157/main.m3u8 โดยแทนที่ที่อยู่ IP ด้วยที่อยู่ของอินสแตนซ์บริการ Edge Cache
17. การตรวจสอบ Media CDN
ทีม SME ได้สร้างเทมเพลตแดชบอร์ด Media CDN - https://gist.github.com/elithrar/1c511d00f5cd3736fb2a3897867209c1
หากต้องการติดตั้ง ให้เรียกใช้คำสั่งต่อไปนี้ในหน้าต่าง Cloud Shell
ดาวน์โหลดไฟล์ YAML
curl https://gist.githubusercontent.com/elithrar/1c511d00f5cd3736fb2a3897867209c1/raw/3cb70855304f29e5c06b8d63063196354db0dec3/media-edge-20210208-dashboard --output media-edge-20210208-dashboard.yaml
สร้างแดชบอร์ดสำหรับ Cloud Monitoring โดยทำดังนี้
gcloud monitoring dashboards create --config-from-file media-edge-20210208-dashboard.yaml
การตั้งค่าอาจใช้เวลาสักครู่ ไปที่ Google Cloud Console แล้วคลิก 3 แถบ > การดำเนินการ > การตรวจสอบ > แดชบอร์ด คุณควรเห็นแดชบอร์ดที่ชื่อ "เมตริก Media Edge" คลิกที่ตัวเลือกดังกล่าว แล้วคุณจะเห็นเมตริกต่อไปนี้

18. ทำความสะอาดสภาพแวดล้อมของ Lab
ขอแสดงความยินดีที่ทำแล็บเสร็จ ในส่วนนี้ เราจะลบทรัพยากรทั้งหมดที่เราสร้างขึ้นตลอดทั้งแล็บ
หยุดสัญญาณ FFmpeg:
กด <CTRL+C> ในเทอร์มินัล Cloud Shell ที่ FFmpeg กำลังทำงานอยู่
หยุดช่องไลฟ์สด
คำสั่ง
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"
วิธีลบช่องไลฟ์สด
คำสั่ง
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"
ลบปลายทางการป้อนข้อมูลการไลฟ์สด
คำสั่ง
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"
ลบ Bucket ของ GCS:
คำสั่ง
gsutil rm -r gs://live-streaming-storage-$LOGNAME
ลบอินสแตนซ์บริการ Edge Cache:
คำสั่ง
gcloud edge-cache services delete cme-demo
ยืนยันการลบโดยป้อน "Y" เมื่อได้รับข้อความแจ้ง
ลบต้นทางของ Edge Cache:
คำสั่ง
gcloud edge-cache origins delete cme-origin
ยืนยันการลบโดยป้อน "Y" เมื่อได้รับข้อความแจ้ง
ลบแดชบอร์ดที่กำหนดเอง
คำสั่ง
gcloud monitoring dashboards delete $(gcloud monitoring dashboards list --filter="displayName:Media Edge Metrics" --format="value(name)")