日期:2014-05-20  浏览次数:20468 次

FFmpeg 上传视频问题。 头大了一个星期了。
原来可能没有测试过大文件上传。
然后网站都已经上线了,人家客户说视频上传有问题。
但是在我机器上又重现不了。
所以就把我头大的。

具体问题是这样的,在客户的服务器上面小于1M的100%上传成功。
但是大于1M就有时候会上传不成功。原本程序是会截图5张 出来,出错的时候图片就会少,我大概估计就是视频还没转换直接就截图了,在原本的视频上截图。这样虽然能添加成功,但是播放的时候就会显示文件不存在,因为根本就没有转换。
但是有时候会直接报错。


可是吧,我想在我机器上把问题给揪出来,可是怎么弄,它就是不报错。我打断点调试吧,它就100%成功。
我原本还以为是web.config里面的executionTimeout设置小了,然后我就把它设置大点,刚开始还能行,但是过了一晚,问题又出来了.唉 我算是败在这程序上面了.

求各位大哥大姐指点指点,代码下面贴.

------解决方案--------------------
C# code

//读取session中上传文件数据
                UploadInfo uploadInfo = Session[UploadInfo.UPLOADINFO] as UploadInfo;
                if (string.IsNullOrEmpty(uploadInfo.FilePath) || string.IsNullOrEmpty(uploadInfo.LastFileName))
                {
                    convertInfo.Status = -3;
                    return;
                }

------解决方案--------------------

------解决方案--------------------
个人觉得可能是大文件转换时间长的问题,ffmpeg我印象中是无法知道文件何时转换完毕的,也就是说你调用了vc.VideoConvertFlv()后,他什么时候能够转换完毕,你是不知道的,而你后续的截图等操作应该是等转换完毕后再截图。问题就是如何得知已经转换完成,完成了就做截图等操作,没有完成就继续等待。
我的想法是用一个循环,检测转换后的文件是否存在,不存在则等待2秒(几秒你自己定),再检测文件是否存在,一直到检测到文件存在了,说明转换完毕,退出循环,做后续操作。
------解决方案--------------------
你可以这样测试下
1,先确保上传成功了
2,先别删除视频,
3,for (int i = 1; i <= 5; i++)里面Sleep一段时间试试
4,iis有应用程序池的回收机制,看看是不是占用了过多的内存进行了回收,你可以设置下应用程序池的配置试试