簡體   English   中英

從C#中的視頻流中獲取圖像

[英]get image from video stream in C#

我試圖從流中獲取圖像(MemoryStream更精確)。 我找不到可以解決我的問題的微軟的任何東西。 我從SQL獲取我的流,所以如果有某種方法可以從那里獲取圖像,那就沒問題了。 我檢查了ffmpeg,問題是我需要保存視頻文件。 這些文件最高可達2GB,如果有辦法不寫入磁盤,則會有所幫助。 如果有一種方法只能讀取前10MB或其他有限的大小並從中讀取圖像,那么這也是一種解決方案。

視頻源可以像原始未壓縮視頻幀一樣簡單到更復雜的多路復用文件格式兼容的數據塊,例如.MP4文件。 雖然前一種情況可能非常簡單,但后者需要您解復用文件,在流內搜索,開始解碼,可能跳過幾幀,然后抓住感興趣的幀。 關鍵是它可能不像看起來那么簡單。

Windows中的視頻處理API是DirectShow,Media Foundation。 使用DirectShow,可以在SQL支持的數據流之上創建自定義數據源,並從那里根據需要獲取數據庫數據,使用API​​接口組件(庫存和第三方)完成剩余的任務。

可以使用免費的VideoConverter for .NET捕獲幀,它實際上是FFMpeg工具的包裝器。 想法是使用VideoConverter的實時流功能(到C#Stream)來獲取特殊的FFMpeg格式“rawvideo”,它實際上是可以由C#程序處理的位圖流,類似於:

var videoConv = new FFMpegConverter();
var ffMpegTask = videoConv.ConvertLiveMedia(
    "input.mp4",
    null, // autodetect live stream format
    rawBmpOutputStream,  // this is your special stream that will capture bitmaps
    "rawvideo",
    new ConvertSettings() {
        VideoFrameSize = "320x200",  // lets resize to exact frame size
        CustomOutputArgs = " -pix_fmt bgr24 ", // windows bitmap pixel format
        VideoFrameRate = 5, // lets consume 5 frames per second
        MaxDuration = 5 // lets consume live stream for first 5 seconds
    });

VideoConverter可以從另一個.NET Stream中讀取實時流(如果輸入格式可以用於實時流轉換)。

暫無
暫無

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

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