天天看点

视频转成flv格式

最近完成了这个小demo,来分享一下!

上面给了我两天时间,来完成这个小功能

于时我花了半天时间从网络上到处鄱资料,又花了半天时间调试代码,成功之后,终于有了以下一点的经验之谈:

这里讲一下重要的:

1.用到两个工具,一个是ffmpeg.exe,另一个是mencoder.exe

这里有一个重点,网上的文章都没讲到,所以造成有些人运行后没反应,原因是上面路径的下载,有很多版本,不同的版本可能个别参数不同,而网上的文章所用的参数都是用很早的版本写的,所以会造成运行后因参数错误而没有效果

简单处理是:把网上参数在cmd命令行执行一下,这时命令行会报哪个参数错误,把它删了即可!

2.判断处理成功与失败或是进度是否完成,从异步获取的输出信息判断[包括获取原视频的宽与高]

这里重点在两个委托事件中,详情见以下几行代码

视频转成flv格式

 1 

 2  private  void startprocess(string tool)

 3         {

 4             startprocess(tool, false);

 5         }

 6         private  void startprocess(string tool,bool onlycheckinfo)

 7         {

 8             system.diagnostics.process p = new system.diagnostics.process();

 9             p.startinfo.filename = tool;

10             p.startinfo.arguments = commandpara;

11             p.startinfo.useshellexecute = false;

12             p.startinfo.redirectstandardinput = true;

13             p.startinfo.redirectstandardoutput = true;

14             p.startinfo.redirectstandarderror = true;

15             p.startinfo.createnowindow = false;

16             p.outputdatareceived += new system.diagnostics.datareceivedeventhandler(p_outputdatareceived);

17             if (onlycheckinfo)//只检测文件是否可转换与获到内部宽与高

18             {

19                 p.errordatareceived += new system.diagnostics.datareceivedeventhandler(p_checkinfodatareceived);

20             }

21             else

22             {

23                 p.errordatareceived += new system.diagnostics.datareceivedeventhandler(p_errordatareceived);

24             }

25             //开始执行 

26             try

27             {

28                 p.start();

29                 p.beginoutputreadline();

30                 p.beginerrorreadline();

31                 p.waitforexit();

32             }

33             catch (exception err)

34             {

35                 console.writeline(err.message);

36             }

37             finally

38             {

39                 p.close();

40             }

41         }

42         void p_checkinfodatareceived(object sender, system.diagnostics.datareceivedeventargs e)

43         {

44             if (!string.isnullorempty(e.data))

45             {

46                 if (e.data.contains("stream") && e.data.contains("video:"))//设置原视频窗口大小作为flv视频的宽与高

47                 {

48                     match match = regex.match(e.data, @", (\d+)x(\d+)");

49                     if (match != null)

50                     {

51                         videowidth = match.groups[1].value;

52                         videoheight = match.groups[2].value;

53                     }

54                 }

55                 else if (e.data.contains("could not find codec parameters"))//ffmpeg转换失败

56                 {

57                     iscanchangetoflv = false;

58                     program.setdatabase(id, 1, count + 1);

59                 }

60             }

61 

62         }

63 

64          void p_errordatareceived(object sender, system.diagnostics.datareceivedeventargs e)

65         {

66             if (!string.isnullorempty(e.data))

67             {

68                 if (e.data.contains("video:") && e.data.contains("muxing overhead"))//ffmpeg转换完成

69                 {

70                     program.setdatabase(id, 2, count + 1);

71                     console.writeline("转换完成");

72                 }

73                 console.writeline(e.data);

74             }

75             

76         }

77 

78          void p_outputdatareceived(object sender, system.diagnostics.datareceivedeventargs e)

79         {

80             if (!string.isnullorempty(e.data))

81             {

82                 if (e.data.contains("writing index"))//mencoder转换完成

83                 {

84                     program.setdatabase(id, 2, count + 1);

85                     console.writeline("转换完成");

86                 }

87                 //else if (e.data.contains("exiting"))//mencoder转换失败

88                 //{

89                 //    console.writeline("转换失败");

90                 //}

91                 console.writeline(e.data);

92             }

93         }

94 

95 

本文只讲重点,请结合网络其它文章与本文即可!

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/archive/2008/10/15/1311410.html