2013-10-28 111 views
3

我有一個c#應用程序。我有100個JPEG(例如)。我可以使用ffmpeg將jpegs輸出到內存流而不是文件

我可以很容易地將其編碼成視頻文件。

當它在客戶端應用上完成編碼後,我將FTP上傳到我的服務器。

如果我不能將視頻文件寫入光盤,而是將其寫入內存流(或字節數組)並通過Web服務上傳,它會是'整潔'嗎?

我已經簽出了ffmpeg文檔,但作爲一個c#開發人員,我不覺得自然理解c的例子。

我想我的第一個問題是可能的,如果是的話,任何人都可以在c#中發佈一個示例代碼?目前我正在使用c#中的進程類來執行ffmpeg。

我當然會發佈此代碼,如果它會幫助?

感謝大家的時間。

+1

請注意,FFmpeg命令行問題發送給超級用戶,而FFmpeg API編程問題屬於堆棧溢出。 – slhck

+1

[你可以「流」圖像到ffmpeg構建一個視頻,而不是將它們保存到磁盤?](http://stackoverflow.com/questions/13294919/can-you-stream-images-to-ffmpeg構建一個視頻而不是保存它們-t) – CodeCaster

+1

'ffmpeg'作爲一個獨立的進程運行,你不能實例化一個直接掛接或者從中出來的流。你可以讓'ffmpeg'將它的輸出管道輸出到'stdin',看到重複的鏈接和http://www.codeproject.com/Articles/16011/PipeStream-a-Memory-Efficient-and-Thread-Safe-Stre for例。 – CodeCaster

回答

5

你的工藝方法已經是不錯的,只是需要調整:

  1. 設置StartupInfo.RedirectStandardOutput = trueStartupInfo.UseShellExecute = false
  2. 而不是輸出文件名稱,調用ffmpeg與pipe:,這將使它寫入標準輸出。另外,由於格式不能再從文件名中確定,所以請確保使用-f <format>開關。
  3. 開始這個過程。
  4. Process.StandardOutput.BaseStream.BaseStream,因此StreamReader.StandardOutput不會弄亂任何東西)讀取過程正在運行到您的內存流中。
  5. 讀取任何仍在Process.StandardOutput.BaseStream中緩存的內容。
  6. 利潤。

我懶得/現在忙拿出一個全面的,最小的例子,但我編碼,一個thumbnailer而回(BSD 2條),有演示此實際代碼。如果它最終是來自ffmpeg的圖像或視頻,則無關緊要。

+0

非常好...謝謝 –

+0

一個有趣的情況出現了。你是否曾經有過這樣一個過程'掛起',而這樣做?我只有。如果我輸出到硬盤驅動器上的文件沒有問題,但輸出和捕獲基本流我的代碼掛起... –

+1

不是真的。但是,如果不通過stdout(或者stderr,如果重定向)或者沒有填充stdin(如果重定向),那麼很容易就會導致某些東西死鎖。請參閱['RedirectOutputStream']的備註部分(http://msdn.microsoft.com/zh-cn/library/system.diagnostics.processstartinfo.redirectstandardoutput%28v=vs.110%29.aspx)。沒有你使用的實際代碼,很難說出任何東西。無論如何,你應該提出一個新問題。 – nmaier

相關問題