惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Engineering at Meta
Engineering at Meta
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
小众软件
小众软件
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
Last Week in AI
Last Week in AI
博客园_首页
I
InfoQ
T
Tailwind CSS Blog
爱范儿
爱范儿
雷峰网
雷峰网
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
B
Blog
WordPress大学
WordPress大学
A
About on SuperTechFans
V
Visual Studio Blog
有赞技术团队
有赞技术团队
P
Proofpoint News Feed

博客园 - 投石问路

ASP做贝宝(paypal)支付接口(推荐)[转] - 投石问路 - 博客园 asp paypal接口处理 - 投石问路 - 博客园 Asp.Net 学习资源列表 推荐几个.NET开源图表组件 机器克隆会导致DTC进程堵死 [SQLServer2005]ADO.NET2.0中的查询通知 SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ] -- [转] 讲解SQL 2000的Collection排序规则 (3)[转] 讲解SQL 2000的Collection排序规则 (2)[转] 讲解SQL 2000的Collection排序规则 (1)[转] IIS出现server application error,解决方案一 C#动态获取当前屏幕中光标所在位置的颜色 Excel开发(VSTO2005):简化工作表中选定区域的操作。[轉載] .NET 2.0 CER学习笔记 [转载] 格式化类型连接地址 FLV Flash video streaming with ASP.NET 2.0, IIS and HTTP handler [转载] ASP.NET 视频截图功能的C#代码[转载] 利用Mencoder转换视频格式[转载] FLV播放器 源码二例[转载]
NET 2.0(C#)调用ffmpeg处理视频的方法
投石问路 · 2008-03-10 · via 博客园 - 投石问路

.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.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))
       {
                //处理方法...
        }
}

StandardError 可以同步或异步读取重定向的 StandardError 流。Read、ReadLine 和 ReadToEnd 等方法对进程的错误输出流执行同步读取操作。这些同步读取操作只有在关联的 Process 写入其 StandardError 流或关闭该流后才能完成。相反,BeginErrorReadLine 在 StandardError 流上开始异步读取操作。此方法为流输出启用一个指定的事件处理程序并立即返回到调用方,这样当流输出被定向到该事件处理程序时,调用方可以执行其他操作。同步读取操作在读取 StandardError 流的调用方及写入该流中的子进程之间引入一个依赖项。这些依赖项可能导致产生死锁情况。调用方读取子进程的重定向流时依赖于该子进程。调用方将等待读取操作,直到子进程写入流或关闭流为止。子进程写入足够多的数据以填充重定向流的时间依赖于父进程。子进程将等待下一次写操作,直到父进程读取了全部流或关闭该流为止。当调用方和子进程相互等待对方完成操作时,就会产生死锁情况,使双方都无法继续执行操作。您可以通过计算调用方和子进程之间的依赖项从而避免出现死锁情况。

PS.以上全部引用来自MSDN(代码除外)

原文出处:

http://blog.feel2u.com/html/3/3-397.html