环境:vs2012中mvc4项目、win7x64
项目描述:用ffmpeg把上传视频转码为mp4格式的视频后,再用mp4box.exe修改mp4视频文件的meta信息到开头,让flash播放时候能够边下载边播放。
过程:把如图红框里面的两个文件复制到系统system32和SysWOW64目录下
表现:1、在命令行手动输入参数box.exe -inter 500 e:\\新建文件夹\\1.mp4 后如图,这样转换后的视频是可以在flash下边下载边播放的
2、在mvc项目中代码如下,调用这个方法来修改mp4视频的meta信息。程序运行也没提示什么错误,也没什么反应。也不知道它转换视频了没,最终视频是不能边下载边播放的。
Process p = new Process(); p.StartInfo.FileName = @"C:\WINDOWS\system32\cmd.exe "; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true; p.Start(); p.StandardInput.WriteLine(@"c: "); //先转到系统盘下 p.StandardInput.WriteLine(@"cd C:\WINDOWS\system32 "); //再转到CMD所在目录下 p.StandardInput.WriteLine("box.exe -inter 500 e:\\新建文件夹\\1.mp4 "); p.StandardInput.WriteLine("exit"); p.WaitForExit(); p.Close(); p.Dispose();
请问:1、哪位做过这样的东西?看看我这哪里出的问题。
2、或者有什么替代的方法、别的软件可以包含在项目中来调用,可以修改mp4的meta信息让flash播放时候边下边播。
最终答案:在iis应用程序池里,把对应应用程序池的标识改为LocalSystem后,可以正确运行。
建议将控制台输出结果在页面上显示出来,这样就知道命令是否成功运行。
好的 ,正在测试。
你好 dudu,经排查,以前是我只把box.exe放到system32目录,只把js32.dll放在SysWOW64目录。这样放置可以用控制台转换视频,但在vs环境中就不能转换了。后来把这两个文件都复制到system32和SysWOW64目录后,测试发现在vs环境中直接运行,控制台输入如下
,但配置到iis7中运行,控制台输入如下。
请问:这个Error:I/O Error,可能是哪方面的错误。我搜到一篇文章:
C# 启动进程 重定向IO 死锁避免 正往这方面看。
@黑峰: 可能是应用程序池对应的帐户权限不够
@dudu: 非常非常感谢!确实是应用程序池标识中的账户问题!经测试只有设置为内置账户LocalSystem时可以完成mp4文件修改meta过程,不再出现I/O错误。我这里打包后的软件自动安装时候默认是NetworkService内置账户。同时搜索看到在vs2012中内置的
IIS Express
介绍:
这样还是感觉有点知其然不知其所以然的。
多谢dudu,一语中的,经验丰富,向你学习。
ffmpeg默认就支持,被走弯路,去掉mp4box ,转码的时候 加上-movflags faststart
也多谢这位园友的提醒,经查看ffmpeg文档,同时在代码里面加上参数-movflags faststart,转码后播放,可以正常缓冲一小段后播放。这样就可以不用mp4box.exe再来修改一遍了,更加方便了。多谢多谢!多看文档,向你学习!