亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

C#調用FFMPEG,并異步讀取輸出信息的代碼

系統 4740 0
    public void ConvertVideo()
  
    {
  
      Process p = new Process();//建立外部調用線程
    
      p.StartInfo.FileName = @"c:\ffmpeg.exe";//要調用外部程序的絕對路徑
    
      p.StartInfo.Arguments = "-i XXXXXXXXXXXXXX";//參數(這里就是FFMPEG的參數了)
    
      p.StartInfo.UseShellExecute = false;//不使用操作系統外殼程序啟動線程(一定為FALSE,詳細的請看MSDN)
    
      p.StartInfo.RedirectStandardError = true;//把外部程序錯誤輸出寫到StandardError流中(這個一定要注意,FFMPEG的所有輸出信息,都為錯誤輸出流,用StandardOutput是捕獲不到任何消息的...這是我耗費了2個多月得出來的經驗...mencoder就是用standardOutput來捕獲的)
    
      p.StartInfo.CreateNoWindow = false;//不創建進程窗口
    
      p.ErrorDataReceived += new DataReceivedEventHandler(Output);//外部程序(這里是FFMPEG)輸出流時候產生的事件,這里是把流的處理過程轉移到下面的方法中,詳細請查閱MSDN
    
      p.Start();//啟動線程
    
      p.BeginErrorReadLine();//開始異步讀取
    
      p.WaitForExit();//阻塞等待進程結束
    
      p.Close();//關閉進程
    
      p.Dispose();//釋放資源
    
    } private void Output(object sendProcess, DataReceivedEventArgs output) {
  
      if (!String.IsNullOrEmpty(output.Data))
    
      {
    
    
      //處理方法...
    
    
      }
    
    }
  
    BeginErrorReadLine 可同步或異步讀取 StandardError 流。Read、ReadLine 和 ReadToEnd 等方法對進程的錯誤輸出流執行同步讀取操作。這些同步讀取操作只有在關聯的 Process寫入其 StandardError 流或關閉該流后才能完成。 相反,BeginErrorReadLine 在 StandardError 流上開始異步讀取操作。此方法會為流輸出啟用指定的事件處理程序并立即返回到調用方,這樣當流輸出被定向到該事件處理程序時,調用方還可以執行其他操作。 按照這些步驟對 Process 的 StandardError 執行異步讀取操作:
  
  • 將 UseShellExecute 設置為 false。
  • 將 RedirectStandardError 設置為 true。
  • 向 ErrorDataReceived 事件添加事件處理程序。事件處理程序必須與 System.Diagnostics.DataReceivedEventHandler?委托簽名相匹配。
  • 啟動 Process。
  • 調用 Process 的 BeginErrorReadLine。此調用將啟動 StandardError 上的異步讀取操作。
  • 啟動異步讀取操作時,關聯的 Process 每向其 StandardError 流寫入一行文本時,都將調用該事件處理程序。
  • 可通過調用 CancelErrorRead取消異步讀取操作。可通過調用方或事件處理程序取消讀取操作。取消之后,可以再次調用 BeginErrorReadLine 繼續進行異步讀取操作。
    ErrorDataReceived 事件指示關聯的進程已寫入其重定向 StandardError 流中。 該事件僅在對 StandardError 進行異步讀取操作期間發生。若要啟動異步讀取操作,必須重定向 Process 的 StandardError 流,向 ErrorDataReceived 事件添加事件處理程序,并調用 BeginErrorReadLine。之后,每當該進程向重定向 StandardError 流中寫入一行時,ErrorDataReceived 事件都會發出信號,直到該進程退出或調用 CancelErrorRead為止。
  

?

NET 2.0 調用FFMPEG,并同步讀取輸出信息的代碼...

    public void ConvertVideo() { Process p = new Process();//建立外部調用線程 p.StartInfo.FileName = @"c:\ffmpeg.exe";//要調用外部程序的絕對路徑 p.StartInfo.Arguments = "-i XXXXXXXXXXXXXX";//參數(這里就是FFMPEG的參數了) p.StartInfo.UseShellExecute = false;//不使用操作系統外殼程序啟動線程(一定為FALSE,詳細的請看MSDN) p.StartInfo.RedirectStandardError = true;//把外部程序錯誤輸出寫到StandardError流中(這個一定要注意,FFMPEG的所有輸出信息,都為錯誤輸出流,用StandardOutput是捕獲不到任何消息的...這是我耗費了2個多月得出來的經驗...mencoder就是用standardOutput來捕獲的) p.StartInfo.CreateNoWindow = false;//不創建進程窗口 p.Start();//啟動線程 p.WaitForExit();//等待完成 p.StandardError.ReadToEnd();//開始同步讀取 p.Close();//關閉進程 p.Dispose();//釋放資源 }
  
    StandardError 可以同步或異步讀取重定向的 StandardError 流。Read、ReadLine 和 ReadToEnd 等方法對進程的錯誤輸出流執行同步讀取操作。這些同步讀取操作只有在關聯的 Process 寫入其 StandardError 流或關閉該流后才能完成。 相反,BeginErrorReadLine 在 StandardError 流上開始異步讀取操作。此方法為流輸出啟用一個指定的事件處理程序并立即返回到調用方,這樣當流輸出被定向到該事件處理程序時,調用方可以執行其他操作。 同步讀取操作在讀取 StandardError 流的調用方及寫入該流中的子進程之間引入一個依賴項。這些依賴項可能導致產生死鎖情況。調用方讀取子進程的重定向流時依賴于該子進程。調用方將等待讀取操作,直到子進程寫入流或關閉流為止。子進程寫入足夠多的數據以填充重定向流的時間依賴于父進程。子進程將等待下一次寫操作,直到父進程讀取了全部流或關閉該流為止。當調用方和子進程相互等待對方完成操作時,就會產生死鎖情況,使雙方都無法繼續執行操作。您可以通過計算調用方和子進程之間的依賴項從而避免出現死鎖情況。
  

PS.以上全部引用來自MSDN(代碼除外)

我在.NET 2.0中用這些代碼,調用FFMPEG很方便...

至于同步還是異步...我會選擇異步的...因為異步很方便,有信息就會自動輸出...輸出的信息還可以經過特定的處理代碼,把進度等信息顯示出來...至于代碼怎么寫,無非就是文本處理操作...什么indexof,substring或者正則表達式之類的...

這只是代碼模型而已,可以引申出更高級的處理類,例如多線程調用,多線程并發處理,批處理(從文件列表或者數據庫數據)等等...

C#調用FFMPEG,并異步讀取輸出信息的代碼


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色婷婷久久合月综 | 99热久热这里只精品 | 国产精品自拍亚洲 | 天天夜夜骑 | 5388国产亚洲欧美在线观看 | 久久国产精品广西柳州门 | 色老头老太做爰视频在线观看 | 九九影视理伦片 | 国产一级淫片a免费播放口欧美 | 国产成人亚洲综合91精品555 | 99爱视频免费高清在线观看 | 欧美jizz19性欧美 | 久久综合精品国产一区二区三区 | 夜夜资源 | 激情奇米 | 国产国产成人人免费影院 | 久久天天躁狠狠躁夜夜爽蜜月 | 国产福利一区视频 | 久久精品中文字幕一区 | 久久午夜青青草原影院 | 国产毛片一级国语版 | 国产成人麻豆精品 | 欧美一区二区三区视频在线 | 99久久精品无码一区二区毛片 | 国产精品自拍一区 | 久久99精品视频 | 日本一级毛片中文字幕 | 色爱区综合激月婷婷激情五月 | 免费亚洲视频在线观看 | 色综合精品久久久久久久 | 日日夜夜操视频 | 国产成人精品一区二区三区 | 草草免费观看视频在线 | 婷婷六月激情在线综合激情 | 真实国产乱子伦精品免费 | 日韩欧美亚洲国产一区二区三区 | 午夜网站在线观看免费网址免费 | 欧美一级毛片片aa视频 | 狠狠色官网在线 | 国产精品成人免费视频不卡 | 日日操夜夜操免费视频 |