簡體   English   中英

AWS 上的媒體轉換

[英]Media conversion on AWS

我有一個用 nodeJS (/api/uploadS3) 編寫的 API,它是一個 PUT 請求並接受一個視頻文件和一個 URL(在這種情況下是 AWS s3 URL)。 一旦被調用,它的任務就是在 s3 URL 上上傳文件。

現在,用戶正在以不同的格式將文件上傳到這個節點 API(由於不同的瀏覽器以不同的格式錄制視頻),我想將所有這些視頻轉換為 mp4,然后將它們存儲在 s3 中。

我想知道這樣做的最佳方法是什么?

到目前為止,我有 2 個解決方案

1. 使用 ffmpeg 在節點服務器上轉換 -

問題在於 ffmpeg 一次只能執行一個操作。 而且由於我只有一台服務器,我將不得不為多個請求實現一個隊列,這可能會導致隊列末尾的用戶等待更長的時間。 除此之外,我擔心在任何正在進行的視頻轉換過程中,如果我的節點的流量處理能力會受到影響。

有人可以幫助我了解在進行視頻轉換時其他請求到達我的服務器的影響嗎? 它將如何影響 RAM、CPU 使用率和處理其他請求的速度?

2. 使用 AWS lambda 函數 -

為了避免我的節點服務器上的負載,我正在考慮使用 AWS lambda 服務器,我的節點 API 將以用戶提供的格式將文件上傳到 S3。 一次,done s3 將觸發一個 lambda 函數,然后該函數可以獲取該 s3 文件並使用 ffmpeg 或 AWS MediaConvert 將其轉換為 .mp4,一旦完成,它將 mp4 文件上傳到新的 s3 路徑。 現在我不希望輸出路徑是任何 s3 路徑,而是節點 API 首先接收到的路徑。

此外,我希望用戶等待所有這些發生,因為我必須根據此上傳的成功或錯誤啟用其他 UI 功能。

這里的查詢是,是否可以僅使用像 /api/uploadS3 這樣的單個 API 來執行此操作,它 --> 上傳到 s3 --> 觸發 lambda --> 轉換文件 --> 上傳 mp4 版本 --> 返回成功或錯誤。

目前,如果我上傳到 s3,請求就會結束。 那么有沒有辦法將 API 響應推遲到並且除非所有操作都已完成?

此外,lambda 函數將如何訪問傳遞給節點 API 的輸出 s3 存儲桶的路徑?

歡迎任何其他更好的方法。

PS - 節點 API 接收到的 s3 路徑對於每個用戶都是不同的。

謝謝你的帖子。 當新文件到達(即從 AWS MediaConvert 交付)時,輸出 S3 存儲桶會生成文件事件。

此文件事件可以觸發第二個 Lambda 函數,該函數可以使用任何支持的傳輸協議將文件移動到其他位置,必要時重試; 將狀態記錄到 AWS CloudWatch 和/或 AWS SNS; 然后根據他們移動的成功/完成發送最終的 API 響應。

AWS 有一個 Step Functions 功能,可以跨連續的 lambda 函數維護狀態,用於自動化簡單的工作流程。 這應該適用於您想要完成的工作。 請參閱https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html

請注意,任何一個 lambda 函數的最大運行時間為 15 分鍾,因此任何一項轉碼或文件復制操作都必須在 15 分鍾內完成。 另一種方法是在 EC2 上運行。

我希望這可以幫助你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM