2013-04-08 59 views
0

我想從流中獲取圖像(MemoryStream更加精確)。我找不到任何可以解決我的問題的Microsoft。 我正在從SQL獲取流,所以如果有某種方法可以從那裏獲取圖像,那麼就可以。 我檢查過ffmpeg,問題是我需要保存視頻文件。這些文件可以達到2GB,如果有方法不寫入磁盤,這將是有益的。如果有辦法只讀取前10MB或其他有限大小並從中讀取圖像,那也可以是解決方案。從C#中的視頻流中獲取圖像

+0

視頻不過是圖像幀的集合(例如,採用Kinect彩色圖像流)。鑑於圖像大小,像素格式和起始位置,將其分割成片並不困難。從你的觀點來看,這是否有意義? – David 2013-04-08 14:27:20

+0

感謝您的回答。但我仍然不知道如何從流中獲取單個圖像。有一些我可以使用的圖書館嗎? – 2013-04-08 15:16:13

+1

您正在從... SQL獲取視頻流? – leonbloy 2013-04-08 17:37:34

回答

1

視頻輸入可能與原始未壓縮視頻幀並排連接到更復雜的多路複用文件格式兼容的數據塊, .MP4文件。雖然前一種情況可能非常簡單,但後者要求您解複用文件,在流中搜索,開始解碼,可能跳過幾幀,然後抓取感興趣的幀。重點是它可能不像看起來那麼簡單。

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

0

有可能捕獲框架與自由VideoConverter for .NET實際上是FFMpeg工具的包裝。我們的想法是使用流媒體直播功能(以C#流)VideoConverter的特殊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(如果輸入格式可用於實時流轉換)。