Amazon Kinesis Video Streams คืออะไร? การแนะนำฟังก์ชันของ AWS IoT ในปี 2023
บทความนี้มีเนื้อหาดัดแปลงมาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「AWS IoT 再入門ブログリレー Amazon Kinesis Video Streams編 | DevelopersIO」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอัพเดทเนื้อหาบางอย่างเพื่อให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
เกริ่นนำ
สวัสดีครับ ผมต้า ครับ
ในบทความนี้ เราจะมาแนะนำเกี่ยวกับ Amazon Kinesis Video Streams (เรียกย่อๆมา Kinesis Video Streams) ที่ให้บริการสตรีมวิดีโอสดไปยัง AWS ได้ง่ายๆและปลอดภัยครับ
ฟังก์ชันหลักๆของ Kinesis Video Streams จะมีดังต่อไปนี้
- เป็น Managed Service ที่จัดการโครงสร้างพื้นฐานทั้งหมดที่จำเป็นในการนำเข้าข้อมูลสตรีมมิ่งจากอุปกรณ์ที่มีจำนวนมากได้ถึงหลักล้าน
- ทำการจัดเก็บ การเข้ารหัส และการจัดทำ index ข้อมูลวิดีโอในสตรีมที่มีความทนทานสูง
- สามารถเข้าถึงข้อมูลผ่าน API ได้
- สามารถเล่นไลฟ์ หรือ วิดีโอที่ต้องการรับชมได้
- สร้างแอปพลิเคชันอย่างรวดเร็วโดยใช้ computer vision และการวิเคราะห์วิดีโอ
- เปิดใช้งานวิดีโอแชทและการสตรีมสื่อแบบ peer to peer (WebRTC)
Use case
use case ที่ได้แนะนำใน AWS Document จะมีดังต่อไปนี้ครับ
(1) Smart Home
เราสามารถ Streaming วิดีโอและเสียงไปยัง AWS ด้วยไลฟ์จากอุปกรณ์ที่ติดตั้งกล้องได้ เช่น ระบบรักษาความปลอดภัย และเราสามารถใช้ Streaming นั้นในการสร้างระบบต่างๆ ได้
ตัวอย่าง: ควบคุมกริ่งประตูที่ติดตั้งกล้องจากโทรศัพท์ของคุณ
https://aws.amazon.com/th/kinesis/video-streams
(2) Smart City
มีความสามารถในการนำเข้า จัดเก็บ วิเคราะห์ และใช้ประโยชน์จากวิดีโอจำนวนมหาศาลที่ถ่ายทุกวันตลอด 24 ชั่วโมงในเมืองต่างๆ ได้อย่างปลอดภัยและคุ้มต้นทุน
ตัวอย่าง: amber alert system
https://aws.amazon.com/th/kinesis/video-streams
(3) Industrial automation
รวบรวมข้อมูลที่เข้ารหัสเวลาต่างๆ เช่น สัญญาณ RADAR และ LIDAR โปรไฟล์อุณหภูมิ และข้อมูลเชิงลึกจากอุปกรณ์อุตสาหกรรม วิเคราะห์ข้อมูลด้วย machine learning framework และสร้างระบบอัตโนมัติทางอุตสาหกรรม เช่น การบำรุงรักษาเชิงคาดการณ์
ตัวอย่าง: การซ่อมบำรุงอุปกรณ์เชิงป้องกัน
https://aws.amazon.com/th/kinesis/video-streams
2 วิธีในการสตรีม
ใน Kinesis Video Streams จะมีวิธีการ Streaming อยู่ 2 วิธีต่อไปนี้
- รวบรวมด้วยรูปแบบ media
จัดเก็บข้อมูลสตรีมมิ่งจากอุปกรณ์ของคุณส่งไปยังระบบ Cloud เพื่อการเล่นและการวิเคราะห์ โดยมีเงื่อนไขที่ว่าการเล่นสดควรจะสามารถทนต่อ latency ได้อย่างน้อย 2 วินาที
- WebRTC
streaming data สามารถรับข้อมูลได้ 2 ทิศทาง และมี latency ต่ำมากๆ โดย WebRTC และไม่จำเป็นต้องบันทึกข้อมูลงที่ Cloud
【AWS Black Belt Online Seminar】Amazon Kinesis Video Streams (Japanese)
ไม่ว่าจะเป็นวิธีไหนก็สามารถแสดงผลแบบ Real time ได้ แต่ว่าทั้งสองก็มีขีดจำกัดในเรื่องจำนวนการเชื่อมต่อ เพราะฉนั้น หากต้องการ Streaming สำหรับคนจำนวนมากแนะนำให้ใช้ AWS Media Service ครับ
รวบรวมด้วยรูปแบบ media
Architecture ของ "รวบรวมด้วยรูปแบบ media" จะเป็นดังต่อไปนี้
- Producer (Device ที่ทำการอัพโหลด Media)
- Stream (หน่วยการรับข้อมูลแบบตัวต่อตัวกับ Device)
- Consumer (Application ที่ทำการรับข้อมูลเพื่อทำการวิเคราะห์ หรือ อื่นๆ โดยที่ 1 Stream สามารถสร้างได้ Consumer)
- Index (ข้อมูลข้างใน Stream จะได้รับ index โดยอ้างอิงจากเวลา และบันทึกลงในข้างใน S3)
【AWS Black Belt Online Seminar】Amazon Kinesis Video Streams (Japanese)
ต่อไปเราจะมาเล่าเกี่ยวกับรายละเอียเพิ่มเติมเกี่ยวกับ การนำเข้า, การบันทึก, การเล่น, ดึงข้อมูล・วิเคราะห์ ครับ
(1) นำเข้า
Kinesis Video Streams วิธีการนำเข้า Media มีวิธีดังต่อไปนี้
- PutMedia API
- Amazon Kinesis Video Streams Producer SDK (แนะนำ)
(1-1) PutMediaAPI
PutMedia - Amazon Kinesis Video Streams
HTTP POST กับ MKV format fragment เป็น payload โดยอาจจะยากหน่อยที่จะใช้ MKV format เฉพาะทาง กับ Long Running Session
(1-2) Amazon Kinesis Video Streams Producer SDK
สามารถใช้ Amazon Kinesis Video Streams Producer SDK แยกตามจุดประสงค์ของแต่ละ Layer ได้
- Library ที่ให้บริการ core function (สามารถรวมกันกับ firmware level ได้)
- Producer SDK(สำหรับนักพัฒนา[C,C++,Java])
- Demo application
【AWS Black Belt Online Seminar】Amazon Kinesis Video Streams (Japanese)
ด้านล่างนี้เป็นลิ้งค์ git มีตัวอย่างที่ใช้ Produser SDK และ CPP Producer, GStreamer Plugin โดย JNI ครับ
Amazon Kinesis Video Streams CPP Producer, GStreamer Plugin and JNI
Amazon Kinesis Video Streams Producer SDK Java
สำหรับ "demo application" ที่สามารถใช้งานได้ง่ายที่สุด สามารถดูรายละเอียดได้ที่ลิ้งค์ด้านล่างนี้ครับ
RTSP demo application (Docker application ที่ทำการส่ง ภาพจาก RTSP camera)
Sample Docker container build and run instructions for Kinesis Video Streams RTSP demo application
Brower-based Ingestion
การอัพโหลดภาพจากกล้องไปยัง browser
KVS Browser-based Ingestion
(2) บันทึก
ใน Kinesis Video Streams จะมีการใช้คำศัพท์ดังต่อไปนี้
- frame (ภาพ 1 ภาพที่แสดงอยู่ในวิดีโอ)
- fragment (ก้อนของ frame หลายๆอันที่มารวมกัน แต่ละ fragment จะแยกออกจากกัน)
- Chunk (รูปแบบพื้นที่จัดเก็บใน stream โดยจะเป็น fragment ที่เพิ่ม metadata เข้าไป)
วิดีโอจะถูกส่งต่อเนื่องในหน่วยของ fragment จาก Producer(Device)
เมื่อข้อมูลมาถึง Kinesis Video Streams ข้อมูลจะถูกจัดเก็บในรูปแบบ Chunk พร้อมข้อมูลเพิ่มเติม เช่น การประทับเวลาที่กำหนดโดยผู้ผลิต การประทับเวลาที่มาถึงเซิร์ฟเวอร์ และหมายเลข index
Consumer จะรับข้อมูลเป็นหน่วย Chunk และทำการดึง fragment(frame) ที่อยู่ในนั้นออกมา
ระยะเวลาการเก็บข้อมูล(Data retention) สามารถตั้งค่าได้ตั้งแต่ 0(ไม่เก็บ) ถึง 10 ปี และเราสามารถเปลี่ยนระยะเวลาการเก็บข้อมูล(ยืด, หด) ก่อนที่ข้อมูลจะถูกลบได้(ค่าบริการจะสูงตามระยะเวลาที่เราเก็บ)
(3) การเล่น
ในการใช้งาน Kinesis Video Streams จะสามารถใช้งาน Live playback หรือ on-demand playback ได้ด้วยวิธีต่อไปนี้
- Simple viewer
- การ playback ด้วย HTTP Live Stringing(HLS) รวมไปถึง Dynamic Adaptive Striaming over HTTP(DASH)
(3-1) Simple viewer
การ Playback สามารถที่จะระบุ stream หรือ เวลาเริ่ม ใน console ได้ และสามารถดาวน์โหลดไฟล์ mp4 ได้ด้วย นอกจากนั้น การ playback จะถูกจำกัด limited ในรูปแบบไฟล์ H264 compressed โดยส่วนใหญ่ที่แสดงอยู่นี่มักจะถูกใช้ในการทดสอบวิดีโอครับ
(3-2) การ playback ด้วย HLS หรือ DASH
เราสามารถทำการ playback HLS หรือ DASH ได้ หาก ไฟล์อยู่ในรูปแบบ H264,H265, AAC และระยะเวลาเก็บข้อมูลมากกว่า 0 และขีดจำกัดของ Session อยู่ที่ 10 ครับ ขั้นตอนในการทำโดยรวมจะมมีประมาณนี้ครับ
- รับ Endpoint ด้วย GetDataEndpoint API
- รับ Streaming URL ด้วย GetHLS(DASH)StreamingSession URL API
- ทำการ playback ด้วย tool ที่ต้องการด้วย URL
Video playback with HLS
Video Playback with MPEG-DASH
(4) ดึงข้อมูล・วิเคราะห์
ใน Kinesis Video Streams เราสามารถดึงข้อมูล/วิเคราะห์ข้อมูล ด้วยวิธีต่อไปนี้ได้
- GetClip API
- GetMedia API
- GetMediaForFragmentList API/ListFragments API
- Amazon Kinesis Video Streams Perser Library
- Amazon Rekognition Video
- Amason Kinesis Video Inference Template
(4-1) GetClip API
1 Request มีข้อจำกัดอยู่ที่ต้องต่ำกว่า 100MByte และน้อยกว่า 200 fragment และสามารถดาวน์โหลด MP4 ได้จาก Management console หรือ mp4 ได้
GetClip
(4-2) GetMedia API
ทำการเก็บข้อมูล Realtime จาก Stream
GetMedia
(4-3) GetMediaForFragmentList API/ListFragments API
สามารถรับข้อมูลที่ระบุช่วงเวลาจาก stream ใน batches และรับรายการ fragment ที่ได้รับการระบุเวลาจาก GetMediaForFragmentList และทำการดาวน์โหลดข้อมูลจริงๆจาก ListFragments ได้
GetMediaForFragmentList
ListFragments
(4-4) Amazon Kinesis Video Streams Perser Library
Java library ที่ประมวลผลข้อมูลรูปแบบ MKV ที่ได้รับจาก Stream
Amazon Kinesis Video Streams Parser Library
(4-5) Amazon Rekognition Video
ทำการเชื่อมต่อ Amazon Rekognition Video ด้วยการตั้งค่า
Working with streaming video events
https://docs.aws.amazon.com/rekognition/latest/dg/streaming-video.html
(4-6) Amason Kinesis Video Inference Template
ไม่ต้องสร้าง Consumer ก็สามารถเชื่อมต่อไปยัง SageMaker inference endpoint ได้
WebRTC
WebRTC(Web Real-Time Communication) คือ โปรเจ็กต์ open-source ที่ให้บริการ real-time communication ระหว่าง web browsers กับ mobile applications สามารถเชื่อมต่อแบบ peer to peer กับระหว่างอุปกรณ์ เพื่อ Streaming วิดีโอ และ เสียง หรือ ข้อมูลอื่นๆ แบบได้ 2 ทาง และ low-latency
ใน WebRTC จะมีฟังก์ชันเซิร์ฟเวอร์ เช่น Signaling Server, STUN Server, TURN Server
ส่วน Kinesis Video Streams จะให้บริการในส่วนนี้แบบ full manage service ครับ
What Is Amazon Kinesis Video Streams with WebRTC
นอกจากนี้โปรดทราบว่า ณ เวลาที่เขียนบทความนี้(2023/08/25) Master ที่สามารถทำการเชื่อมต่อ Viewer ไปยัง Signal channel ได้มากที่สุดแค่ 10 ตัว และเชื่อมต่อ Master ไปยัง Signal channel ได้มากที่สุดแค่ 1 ตัว
Kinesis Video Streams with WebRTC: How It Works
(1) Signal Channel
ด้วยการสร้าง Signal channel จะทำให้เราสามารถใช้งาน WebRTC ได้
เมื่อสร้าง Signal Channel เสร็จสิ้น เราจะสามารถตรวจสอบการทำงานโดยการ Demo ได้ครับ
(2) SDK
จะมีการให้บริการ SDK สำหรับแต่ละ Platform ในการใช้งาน Master หรือ Viewer
Amazon Kinesis Video Streams WebRTC SDK for JavaScript
Amazon Kinesis Video Streams C WebRTC SDK
The Amazon Kinesis Video WebRTC Sample
ตัวอย่างภาพที่ใช้ Amazon Kinesis Video Streams WebRTC SDK for JavaScript ครับ
ทิ้งท้าย
เป็นยังไงบ้างครับสำหรับ Kinesis Video Streams Service โดยเมื่อพูดถึงการส่งข้อมูลแบบ Real-time ของ AWS นั้น ชื่อ Kinesis ก็มักจะมาเป็นชื่อแรกๆที่ผมคิดถึง โดยเจ้านี้มีความสามารถเกี่ยวกับการส่งข้อมูลวิดีโอแบบ Real time ซึ่งถ้าใครสนใจก็ลองไปทดลองใช้กันได้นะครับ
บทความอ้างอิง
Amazon Kinesis Video Streams
What is Kinesis Video Streams? (English)
【AWS Black Belt Online Seminar】Amazon Kinesis Video Streams (Japanese)
Amazon Kinesis Video Streams Workshop(English)
บทความต้นฉบับ
AWS IoT 再入門ブログリレー Amazon Kinesis Video Streams編 | DevelopersIO