簡體   English   中英

C# 從 stream 讀取視頻/音頻/圖像文件元數據

[英]C# Reading Video / Audio / Image file metadata from a stream

我目前正在尋找在 C# 中編寫 AWS Lambda function

  1. 上傳到 S3 的文件觸發我的 Lambda
  2. Lambda 查詢文件並獲取有關視頻編解碼器、幀速率、音頻通道、持續時間的技術元數據
  3. Lambda 將該數據發布到另一個服務

我查看了 Nuget 上的 MediaInfo 和 FFMPeg 包裝器,但問題是它們都接受 FilePaths 來打開文件,而在 S3 / Lambda 土地上我正在使用流。

我不想創建一個 EFS 來臨時存儲文件,因為它看起來有點矯枉過正,而且我認為圖書館也不需要讀取整個 stream 來獲取元數據。

基本上我想做的與類似,但我是一個 .net 的人,寧願不學習 Python / Docker / Linux 等......

您可以使用 C# 中的 MediaInfo 庫,沒有安裝程序DLL具有 C# 綁定,還有一個 C# MediaInfo 綁定示例,它通過提供 URL(HTTP、FTP、S3...)提供有關如何使用 MediaInfo 庫的信息或通過緩沖區(您自己獲取內容,在 C# 中,因為您是唯一知道如何獲取流的人)從您的流中獲取緩沖區數據,並將緩沖區數據發送到 MediaInfo; MediaInfo 表示何時不需要更多數據,因此不會讀取整個流)。

Jérôme,MediaInfo 的開發者

為了確保您將支持所有格式(分路器/編解碼器),我將使用 FFmpeg.Autogen .NET 綁定與 FFmpeg win 構建。 然后,您可以獲得所有流所需的所有信息(包括編解碼器和元數據)。

(不熟悉 AWS lambda 所以不確定這是否有效)

只是想在這里添加,因為我已經花了好幾個小時在這上面(雖然文檔沒問題,但我覺得它有利於重組)。

對於 C# 框架:

  1. 下載DLL並放入debug文件夾
  2. 下載包裝器 class wrapper cs並將其放在您的項目中
  3. 對於 S3,您還需要 bin/debug 文件夾中的libcurl.dll
  4. 測試代碼:

 using System.IO; using MediaInfoLib; namespace MediaInfoNetFramework { internal class Program { static void Main(string[] args) { var purl = "https://presignedS3URL"; MediaInfo MI = new MediaInfo(); MI.Open(purl); MI.Option("Complete"); var x = MI.Inform(); MI.Close(); return; } } }

筆記:

  1. 您可以將 DLL 包含在 bin 文件夾中,包含在項目中,並在屬性上復制到 output。這樣它們總是被復制到 debug/release 文件夾中。
  2. 如果在運行時它說無法加載 mediainfo,請嘗試其他 32 位或 64 位 DLL。

暫無
暫無

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

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