Cách tốt nhất để quản lý video ở quy mô

Trong ngày hôm nay, các video trên thế giới đã trở thành một cách dễ dàng để giải thích bất kỳ ý tưởng nào cũng như hiểu bất kỳ chủ đề nào. Video đã được chứng minh là đòi hỏi sự chú ý của người tiêu dùng nhiều hơn bất kỳ phương tiện nào khác. Mọi người thích truy cập video mọi lúc, mọi nơi và đó là một thách thức đối với các công ty mới nổi không chỉ cung cấp nội dung chất lượng mà còn mang lại trải nghiệm xem tốt cho khách hàng của họ.

Giới thiệu về công ty chúng tôi -

Chúng tôi là một nền tảng của 3 lakh bác sĩ xác minh, lớn nhất trong cả nước. Là một công ty di chuyển nhanh, chúng tôi thử nghiệm rất nhiều với sản phẩm và đồng thời cẩn thận để cung cấp sản phẩm chất lượng cho tất cả. Gần đây, chúng tôi đã cho phép người dùng của chúng tôi tải lên video về các quy trình phẫu thuật, v.v., để chia sẻ những phát hiện của họ và tìm kiếm đề xuất từ ​​các bác sĩ đồng nghiệp của họ.

Hầu hết người dùng của chúng tôi, khi đang di chuyển, có sự tiếp nhận tối thiểu với tốc độ internet nhanh hơn và đây là một thách thức khi cung cấp nội dung dữ liệu nặng như video.

Chúng tôi thấy khá rõ ràng khi sử dụng giao thức HLS để phân phối video vì nó được hỗ trợ rộng rãi, được phát triển bởi Apple và được sử dụng bởi nhiều công ty lớn như Facebook. HLS là viết tắt của HTTP Live Streaming. Nó là một giao thức truyền phát phương tiện để cung cấp nội dung video và âm thanh. Một video mp4 được chia thành các phân đoạn nhỏ thường là 10 giây và đối với mỗi phân đoạn, nhiều phân đoạn chất lượng video cũng được tạo để có thể tải xuống để phát lại dựa trên băng thông internet có sẵn.

Vì vậy, bất cứ khi nào người chơi phát video định dạng HLS, nó có thể yêu cầu phân đoạn video dựa trên băng thông có sẵn và truyền phát video liên tục mang đến cho người dùng trải nghiệm mượt mà. Tại một thời điểm, người dùng có thể đang xem video độ phân giải thấp và trong khoảnh khắc tiếp theo, nó có thể chuyển sang độ phân giải cao hơn ngay khi thiết bị nằm trong phạm vi của mạng băng thông cao hơn.

Dưới đây là các độ phân giải chúng tôi sử dụng cho trường hợp sử dụng của chúng tôi ngoài độ phân giải gốc của video -

Độ phân giải của video sẽ được tạo

Thách thức là chuyển đổi các video đã tải lên ở định dạng bắt buộc cũng như tạo hình thu nhỏ cho trình giữ chỗ của video. Có nhiều nhà cung cấp dịch vụ cung cấp chuyển đổi video và phân phối nội dung, nhưng vấn đề chính là chúng có giá cả phải chăng cho đến một thời điểm nhất định và với sự phát triển của công ty, bạn cần một giải pháp không phải là gánh nặng trong túi của bạn. AWS MediaConvert và S3 là những công cụ chúng tôi chọn để chuyển đổi và phân phối phương tiện video của chúng tôi. Bằng cách sử dụng giải pháp được thảo luận dưới đây, chúng tôi có thể giảm 90% chi phí, điều này khá có ý nghĩa đối với công ty ở bất kỳ quy mô nào. Theo dõi qua bài viết nếu bạn muốn biết làm thế nào chúng tôi tập trung vào giải pháp.

Tiếp cận ban đầu

Thay vì xây dựng giải pháp nội bộ, chúng tôi đã quyết định sử dụng dịch vụ của bên thứ ba mà Cloudinary phù hợp với trường hợp sử dụng của chúng tôi. Nó cung cấp dịch vụ chuyển đổi video bay thực sự giúp ích cho việc chuyển đổi mà chúng tôi cần và tổng thời gian thực hiện cũng rất ít.

Sự phát triển nhanh hơn khi chúng tôi không phải lo lắng về việc chuyển đổi. Người ta phải tải lên video, chọn chuyển đổi cần thiết và Cloudinary sẽ làm phần còn lại. Ban đầu, Cloudinary nằm trong ngân sách của chúng tôi nhưng khi tính năng bắt đầu tăng thêm lực kéo, nhiều người dùng bắt đầu tải lên video. Sự tăng trưởng này tăng vọt số tiền chúng tôi đã chi cho Cloudinary và đã đến lúc tìm kiếm các lựa chọn khác.

Thí nghiệm của chúng tôi

Đầu tiên, chúng tôi đã thử nghiệm thư viện mã nguồn mở nổi tiếng - ffmpeg có khả năng thực hiện chuyển đổi video mà chúng tôi cần. Chúng tôi có hai tùy chọn sử dụng thư viện ffmpeg - sử dụng Hàm đám mây hoặc sử dụng một trong các phiên bản VM đã chạy trên GCP (Google Cloud Platform).

Vì, toàn bộ quá trình hoạt động theo mô hình theo yêu cầu, lựa chọn thứ hai đã bị loại bỏ. Cloud Function dựa trên mô hình điện toán theo yêu cầu, có nghĩa là chúng tôi sẽ nhận được các tài nguyên khi cần mà không ảnh hưởng đến các dịch vụ khác của chúng tôi. Vì theo yêu cầu, chúng tôi không nên trả tiền cho máy chủ khi không hoạt động.

Các hàm đám mây thực sự dễ sử dụng và cung cấp tùy chọn viết mã bằng hai ngôn ngữ phổ biến nhất - nút và python. Chúng tôi quyết định đi với trăn vì chúng tôi cảm thấy thoải mái với mô hình vì ngăn xếp của chúng tôi nằm trên trăn. Cài đặt các phụ thuộc thực sự dễ dàng, bạn chỉ cần đề cập đến nó trong tệp tests.txt và bạn đã được đặt.

Chúng tôi có tập lệnh hoạt động cho chức năng đám mây nơi chúng tôi tải video đầu tiên từ bộ lưu trữ đám mây, chuyển đổi nó theo định dạng bắt buộc và chuyển nó trở lại bộ nhớ đám mây để phát trực tuyến.

Nhưng đã có một cái bẫy. Chúng tôi cho phép người dùng tải lên video lên tới 100 MB và để xử lý video về chức năng đám mây có kích thước đó đã mất rất nhiều thời gian và cuối cùng chấm dứt trước khi hoàn thành toàn bộ quá trình vì giới hạn thời gian (540 giây). Trong phòng thủ của chúng tôi, chúng tôi đã nghĩ về kịch bản đó trước đó.

Sau khi khám phá các tùy chọn khác và rất nhiều nghiên cứu AWS MediaConvert có vẻ đầy hứa hẹn. Làm việc với MediaConvert rất khó khăn vì nó cung cấp nhiều tùy chọn để tùy chỉnh chuyển đổi của bạn và người ta có thể dễ dàng bị lạc trong tình huống đó (bị phá hỏng bởi sự lựa chọn). Nhưng sau khi tìm kiếm một thời gian, chúng tôi đã nhận được mẫu cần thiết cho chuyển đổi mong muốn của chúng tôi. (đính kèm mẫu)

Toàn bộ dòng chảy của chúng tôi trông giống như -

Chúng tôi tải video lên thùng S3, từ đó kích hoạt chức năng Lambda. Trong lambda, chúng tôi tìm ra các tham số cần thiết làm đầu vào cho MediaConvert bằng cách sử dụng không ai khác ngoài ffmpeg. Sau khi tính toán tất cả các tham số, chúng tôi gửi yêu cầu tới AWS MediaConvert để chuyển đổi video của chúng tôi. Để được thông báo về việc hoàn thành chuyển đổi, người ta có thể tạo một sự kiện theo dõi trạng thái thay đổi trạng thái công việc được gửi trong MediaConvert từ ‘tiến triển thành’ hoàn thành, điều này sẽ kích hoạt chức năng lambda. Hàm lambda được kích hoạt có thể thực hiện cuộc gọi api hoặc thực hiện cập nhật db dựa trên tính khả thi của dự án của bạn.

Nói ngắn gọn :

Giải pháp AWS hoạt động như bùa mê và nó thực sự rất nhanh. Điều này có thể trông giống như rất nhiều công việc nhưng nó rất đáng làm nếu bạn cần mở rộng quy mô.

Lợi ích của việc sử dụng giải pháp này -

  • Chúng tôi đang sử dụng S3 để lưu trữ và cung cấp nội dung phương tiện rất có thể mở rộng và giá cả phải chăng.
  • AWS MediaConvert thực sự nhanh và cung cấp chức năng duy trì một số hàng đợi để gửi công việc để chuyển đổi. Vì vậy, bạn không phải lo lắng về việc nhảy đột ngột trong yêu cầu xử lý video. Ngoài ra giá cả thực sự kinh tế, không có phí hàng tháng và bạn chỉ phải trả tiền cho các dịch vụ được sử dụng.
  • AWS Lambda dựa trên tính toán theo yêu cầu mà chúng ta đã thảo luận ở trên. Ngoài ra, AWS còn cung cấp cho bạn một số lệnh gọi lambda miễn phí và thời gian CPU của chức năng Lambda mỗi tháng, điều này thực sự tuyệt vời và thậm chí cả việc sử dụng vượt quá mức giá miễn phí không làm gánh nặng cho bạn.

Các vấn đề gặp phải trong quá trình triển khai AWS:

  • Luôn nhớ AWS cung cấp dịch vụ dựa trên các khu vực, ngoại trừ một số ít như S3 có sẵn ở cấp độ toàn cầu. Sử dụng các dịch vụ trong cùng khu vực nếu không bạn không thể bắt các sự kiện hoặc kích hoạt các chức năng lambda.
  • Cấp quyền cần thiết cho vai trò IAM của bạn cho các dịch vụ bạn đang sử dụng.
  • Như đã đề cập ở trên, video tải lên xô S3 kích hoạt chức năng lambda nơi chúng tôi điền các chi tiết chuyển đổi cần thiết như độ phân giải của video kết quả, tốc độ bit, v.v. và đối với các giá trị này, bạn cần tìm dữ liệu meta của video được tải lên như chiều cao , chiều rộng và bitrate. Bạn cần sử dụng một số thư viện xử lý video như ffmpeg để có được các giá trị này không được tải sẵn trên container mà lambda của chúng tôi đang chạy khi lambda chạy trên một hoặc nhiều container được tạo và xóa theo yêu cầu.
  • Không giống như Google Cloud Function, nơi bạn chỉ có thể thêm tên thư viện trong tests.txt và họ sẽ xử lý phần còn lại, đối với AWS lambda, bạn cần tạo tệp zip của tất cả các thư viện và tệp nhị phân được sử dụng trong hàm lambda. Sau khi thực hiện một số nghiên cứu, chúng tôi phát hiện ra rằng bạn có thể thêm các nhị phân của thư mục ffmpeg trong / tmp và sử dụng nó trong chức năng của mình. Để biết các bước để đưa ffmpeg vào đường dẫn của bạn, hãy truy cập vào đây và để tạo gói triển khai lambda aws tại đây.
  • Trong khi thử nghiệm, chúng tôi đã phát hiện ra rằng các video được quay trên thiết bị iOS đang được xoay từ dọc sang ngang sau khi chuyển đổi (thảo luận StackOverflow và diễn đàn AWS). Lý do cho điều đó là quay video trên thiết bị iOS ban đầu được lưu ở chế độ ngang với cờ trong dữ liệu meta video cho phép người chơi xoay video trong khi phát. Trong khi thực hiện chuyển đổi, số nhận dạng xoay bị mất và do video đó được phát ở chế độ ngang và trông giống như được xoay.
  • Để khắc phục điều này trước tiên, chúng tôi đã xác định những video đó bằng cách sử dụng ffmpeg. Những video này có ‘giá trị quay vòng trong Matrix Hiển thị ma trận của dữ liệu meta video có thể thu được bằng cách sử dụng ffmpeg. Sau đó xoay các video đó dựa trên xoay được đưa ra và bây giờ bạn có video xoay có thể dễ dàng chuyển đổi bằng kỹ thuật trên.

Nếu bạn thấy bài viết này hữu ích thì hãy nhấn nút vỗ tay bao nhiêu lần tùy thích. Xin vui lòng liên hệ nếu bạn cần bất kỳ trợ giúp trong bất kỳ bước được đề cập ở trên.