2013-04-02 42 views
3

我正嘗試在C#中創建一個桌面實時流應用程序。該程序必須在Windows下運行,並將來自用戶桌面的圖像傳輸到rtmp。還必須有幀率,視頻尺寸,質量和編解碼器(h263和h264)的選項。我認爲FFmpeg是最好的選擇(如果不是這樣,請寫評論)。我已經設法通過使用控制檯來完成上面提到的ffmpeg.exe。所以我想知道,我可以包含FFmpeg庫到C#項目(作爲.lib或.dll)來使用它而不是.exe,爲我的任務保存適當的功能?我會很感激任何例子。在C#項目中使用FFmpeg

P.S.以下是命令的一些例子我用:

ffmpeg -f dshow -i video=UScreenCapture -vcodec h264 -pix_fmt yuv420p -s 320x240 -f flv rtmp://[my adr]/desc 

ffmpeg -f dshow -i video=UScreenCapture -vcodec h264 -r 15 -t 0:1:00 -q 12 -pix_fmt yuv420p -s 320x240 -f flv rtmp://[my adr]/desc 

回答

7

這是my sample,希望這有助於

您可以使用這樣的.exe文件:

  ffmpeg.StartInfo.UseShellExecute = false; 
      ffmpeg.StartInfo.RedirectStandardOutput = true; 
      ffmpeg.StartInfo.FileName = Server.MapPath("~/Video_Clips/ffmpeg.exe"); 

      ffmpeg.StartInfo.Arguments = String.Format(@"-i ""{0}"" -threads 8 -f webm -aspect 16:9 -vcodec libvpx -deinterlace -g 120 -level 216 -profile 0 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -vb 2M -acodec libvorbis -aq 90 -ac 2 ""{1}""", 
                 Server.MapPath("~/Video_Clips/" + sNameWithoutExtension + ".wmv"), 
                 Server.MapPath("~/Video_Clips/" + sNameWithoutExtension + ".webm")); 
      ffmpeg.Start(); 

      ffmpeg.WaitForExit(); 
+1

在某些時候,你應該叫'關閉「或」Dispose「放在'ffmpeg'(它看起來像'Process'類型)來釋放進程句柄。來自[MSDN](http://msdn.microsoft.com/en-us/library/ccf1tfx0.aspx):*手柄是非常寶貴的資源,因此泄漏手柄比泄漏內存更具毒性。*不,樣品不要不要這樣做。我已經提交了他們的反饋。 –

+1

謝謝你的回答,這真的很有幫助。問題是,我無法使用VS-2010打開您的項目,VS-2012也無法打開您的項目。事實上,我並不需要它來解釋你的答案(你的評論足夠了),但是看看它是很有趣的。我怎樣才能打開你的項目? – JustLogin

+0

看起來很奇怪,讓我試着再次打開它,稍後我會告訴你。 –