天天看點

視訊轉成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