- vừa được xem lúc

Sử dụng AWS MediaConvert để xử lí auto convert video HD sang SD

0 0 10

Người đăng: Dương Tiến Đạt

Theo Viblo Asia

image.png

Introduction

Vào một ngày bạn gặp phải yêu cầu của khách hàng:

  • Chuyển đổi video từ định dạng HD sang SD để tiết kiệm tài nguyên
  • Việc convert bắt đầu khi có 1 file video được upload lên S3
  • Quá trình hoàn toàn tự động

Mình sẽ sử dụng các dịch vụ trên AWS để giải quyết bài toán trên. Ưu điểm việc dùng AWS sẽ dễ dàng quản lý, triển khai, liên kết các service. Nếu cần tích hợp thêm thông báo sau khi xử lí xong thì có thể tích hợp nhanh chóng. Có nhiều định dạng video theo mong muốn của người dùng.

Source code Lambda: https://github.com/dtdat1997/aws-lambda-transcoding-video-by-aws-mediaconvert

Bài viết này khá dài rất mong mọi người có thể cùng mình theo dõi tới cuối bài 😅😅

Workflow

Các dịch vụ trên AWS sẽ sử dụng tới

  • AWS S3: kho chứa các file media, video input/output
  • AWS Elemental MediaConvert: công cụ xử lí convert/transcoding video
  • AWS Lambda: viết function xử lí trung gian, trong bài toán này xử lí input/output, các tham số khi convert video
  • AWS EventBridge (AWS CloudWatch Events): quản lý các logs, sự kiện khi có video được upload lên S3
  • AWS IAM: tạo các role, policy cần dùng để xử lí bài toán

Screenshot_2.png

Mô tả:

  1. Quá trình bắt đầu khi có event upload file video (Object Created) lên S3 bucket input
  2. EventBridge sẽ nhận biết sự kiện này truyền tới Lambda function
  3. Lambda function sẽ đọc file vừa upload, định nghĩa option convert file, output destination
  4. AWS MediaConvert nhận được input từ Lambda, sau quá trình convert sẽ chuyển file output vào S3 bucket output
  5. Quá trình hoàn tất

Workflow này các bạn cũng có thể dùng vào các bài toán tương tự như cải thiện audio, thêm caption vào video,....

Configuration

S3

Các bạn vào S3 để tạo 2 bucket input, output để chứa các video upload và video sau xử lý

Ở đây mình sẽ tạo 2 bucket có tên kid328-video-inputkid328-video-output

Lưu ý: không nhét dùng chung 1 bucket để chứa các file input lẫn output, vì ta sẽ bắt sự kiện objectCreated trên bucket, file convert xong nếu upload vào cùng bucket cũ sẽ bị sinh ra vòng lặp làm cho quá trình convert này chạy mãi, gây phát sinh chi phí

image.png

image.png

image.png

Giờ chúng ta sẽ bật Amazon EventBridge trên bucket input để bucket có thể gửi event vào EventBridge

Vào phần Properties của bucket input, tìm mục Amazon EventBridge, chọn Edit

image.png

image.png

Thay đổi sang On rồi ấn Save changes

Như vậy các bước setup S3 đã xong, tiếp tới chúng ta sẽ đi tạo Lambda function

MediaConvert

Trên S3 bucket input, ta up 1 video HD lên image.png

image.png

Trong MediaConvert, ta tạo 1 job

Ở phần input, ta chọn đường dẫn của file vừa tải lên

image.png

Sau Add một Output groups, chọn File group

image.png

image.png

Ta nhập vị trí bucket output

image.png

Trong output setting, ta điền thông tin file sau khi convert và chọn Preset (các option convert định dạng file video)

image.png

Có rất nhiều option cho bạn lựa chọn, ở đây mình sẽ lấy 1 định dạng file SD để convert về

Tiếp đến ta vào mục AWS integration, ta sẽ tạo một role mới full permission trên S3 và APIGatewayInvoke để cho MediaConvert chạy được job này

Ở đây mình tạo role có tên AmazonMediaConvertUsingS3AndAPIGateway

image.png

Sau khi đã điền xong thông tin ta ấn Create để Job này được tiến hành

Khi sang màn hình dashboard job ta sẽ thấy job vừa tạo đang được xử lý

image.png

Sau vài phút, job đã convert xong, ta cùng vào bucket output để xem kết quả

image.png

image.png

File video HD ban đầu có dung lượng 11Mb sau khi convert về SD chỉ còn 1.3Mb

image.png

Ta quay lại Job detail của job vừa rồi chọn Export JSON

Trong file json vừa lấy về chúng ta lấy

  • 2 thông tin OutputGroupsInputs vào nhét vào 1 file json riêng đặt tên là job.json
  • Phần Role, ta copy lại value để dùng cho Lambda function, ở đây mình lấy được role value dạng
arn:aws:iam::{{aws_user_id}}:role/service-role/AmazonMediaConvertUsingS3AndAPIGateway

image.png

Như sau quá trình trên ta đã có file job template để các file convert tự động sau có thể sử dụng template convert này

Lambda

Vào Lambda, chọn Create function

Ở đây mình tạo function có tên là convert-video, mình sẽ dùng Python v3.8 để viết function

image.png

Chúng ta config các environment variables cho function

Chọn Configuartion >> Environment variables >> Edit

image.png

image.png

Mình điền 3 biến Application , DestinationBucket(ta điền tên bucket output), MediaConvertRole (ta lấy role value lấy được ở phần trên để điền vào)

Các bạn clone repository dưới đây để lấy code up lên Lambda nhé

https://github.com/dtdat1997/aws-lambda-transcoding-video-by-aws-mediaconvert

Ta chọn upload .zip file

image.png

image.png

File job.json này ta đã có được ở phần trên

Sau khi upload code, ta ấn Deploy

Lưu ý: trong một vài trường hợp việc xử lý Lambda bị mất thêm thời gian đọc file từ S3, bạn cần tăng timeout của Lambda lên nhé

EventBridge

image.png

Ta vào service EventBridge, chọn Create rule

image.png

Ở đây mình tạo event có tên video-convert-uploaded, bấm Next

image.png

Trong phần Event pattern, chúng ta chọn event type như trên vào chỉ check trong bucket input thôi nhé

image.png

Tại step Select target(s), ta chọn Lambda vừa tạo bên trên

Ta next đến bước cuối cùng và chọn Create rule

image.png

Lambda đã nhận được trigger event trên

Công đoạn setup cuối cùng là IAM, để cung cấp thêm quyền xử lí cho Lambda function

IAM

Để tới nhanh Role, ta vào Configuration >> Permissions và ấn vào Role name

image.png

image.png

Chọn Attach policies

Ta cần thêm các policy sau

  • AmazonS3FullAccess
  • AWSElementalMediaConvertFullAccess

Test

Như vậy sau một quá trình dài setup, ta cùng thử kiểm tra thành quả nhé

Ta upload một file video HD lên S3 bucket input

Mình upload một file video-test1.mp4 lên bucket kid328-video-input

image.png

Vậy là phía MediaConvert đã nhận được job và tiến hành xử lý

Status bên MediaConvert là COMPLETE thì job đã xử lý thành công

image.png

image.png

image.png

Lưu ý: Nếu có lỗi xảy ra bạn có monitoring trong Cloudwatch Logs group

Cảm ơn mọi người đã theo dõi bài viết tới cuối 😀😀

Source code Lambda: https://github.com/dtdat1997/aws-lambda-transcoding-video-by-aws-mediaconvert


Nguồn tham khảo: https://aws.amazon.com/vi/blogs/media/vod-automation-part-1-create-a-serverless-watchfolder-workflow-using-aws-elemental-mediaconvert/

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 66

- vừa được xem lúc

Giới thiệu về AWS Batch

Khi sử dụng hệ thống cloud service, điều chúng ta thường phải quan tâm đến không chỉ là hiệu suất hoạt động (performance) mà còn phải chú ý đến cả chi phí bỏ ra để duy trì hoạt động của hệ thống. Chắn hẳn là hệ thống lớn hay nhỏ nào cũng đã từng phải dùng đến những instance chuyên để chạy batch thực

0 0 143

- vừa được xem lúc

Tìm hiểu về AWS KMS

1. AWS KMS là gì. Ở KMS bạn có thể lựa chọn tạo symetric key (khóa đối xứng) hoặc asymetric key (khóa bất đối xứng) để làm CMK (Customer Master Key). Sau khi tạo key thì có thể thiết đặt key policy để control quyền access và sử dụng key.

0 0 66

- vừa được xem lúc

AWS VPC cho người mới bắt đầu

Tuần này, tôi trình bày lại những gì tôi đã học được về Virtual Private Cloud (VPC) của Amazon. Nếu bạn muốn xem những gì tôi đã học được về AWS, hãy xem Tổng quan về DynamoDB và Tổng quan về S3. VPC là gì. Những điều cần lưu ý:.

0 0 84

- vừa được xem lúc

AWS Essentials (Phần 6): Guildline SNS Basic trên AWS

Tiếp tục với chuỗi bài viết về Basic AWS Setting, chúng ta tiếp tục tìm hiểu tiếp tới SNS (Simple Notification Service). Đây là một service của AWS cho phép người dùng setting thực hiện gửi email, text message hay push notification tự động tới mobile device dựa trên event người dùng setting phía AWS

0 0 145

- vừa được xem lúc

Sử dụng Amazon CloudFront Content Delivery Network với Private S3 Bucket — Signing URLs

Trong nhiều trường hợp, thì việc sử dụng CDN là bắt buộc. Mình đã trải nghiệm với một số CDN nhưng cuối cùng mình lựa chọn sử dụng AWS CloudFront.

0 0 117