2016-10-03 8 views
0
 string strParam;   
     string Path_FFMPEG = @"C:\Windows\system32\cmd.exe"; 
     string WorkingDirectory = @"C:\Users\Braintech\documents\visual studio 2013\Projects\convertVideo\convertVideo";    
     string command1 = "ffmpeg -i video1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts"; 
     string command2 = "ffmpeg -i video2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts"; 
     string command3 = "ffmpeg -i" + "concat:intermediate1.ts|intermediate2.ts" + " -c copy -bsf:a aac_adtstoasc Output.mp4"; 
     string Command = @"" + command1 + " & " + command2 + " & " + command3 + " ";  

     strParam = "ffmpeg -f concat -i " + file + " -c copy " + strResult; 

     process(Path_FFMPEG, Command, WorkingDirectory); 
    public static void process(string Path_FFMPEG, string Command, string WorkingDirectory) 
    { 
     try 
     {   

      Process ffmpeg = new Process(); 
      ProcessStartInfo ffmpeg_StartInfo = new ProcessStartInfo(Path_FFMPEG, Command); 
      ffmpeg_StartInfo.WorkingDirectory = WorkingDirectory;    
      ffmpeg_StartInfo.UseShellExecute = false; 
      ffmpeg_StartInfo.RedirectStandardError = true; 
      ffmpeg_StartInfo.RedirectStandardOutput = true; 
      ffmpeg.StartInfo = ffmpeg_StartInfo; 
      ffmpeg_StartInfo.CreateNoWindow = true; 
      ffmpeg.EnableRaisingEvents = true; 
      ffmpeg.Start(); 
      ffmpeg.WaitForExit(30000);    
      ffmpeg.Close(); 
      ffmpeg.Dispose(); 
      ffmpeg = null; 
     } 
     catch (Exception ex) 
     { 

     } 
    } 

私はffmpegを使って2つのビデオをマージしようとしています。しかし、手動では動作していますが、c#code.itを使用して実行することはできません。コマンドを手動で実行すると動作します。しかし、私はC#を使用して実行しようとしているときに動作しません。誰かを助けてください。 ありがとうございます。ffmpegを使用して2つの動画を連結します。

答えて

1

基本的には、配列にロードしようとしないでください。大きなファイルの場合は、File()メソッドのオーバーロードの範囲があるか、またはStreamで、何をすべきかを知っている必要があります。

return File("/TestVideo/Wildlife.wmv", "video/x-ms-wmv"); 

か:たとえば

return File(videoPath, "video/x-ms-wmv"); 

はしかし、映像は本当に特別なケースであり、より専門的な取り扱いから利益を得ることができます。

+0

を参照してください。だから私は、バイト配列を送信したいと思うapiとクライアント側のビデオと再生を変換します。 –

+0

@SunilKumarビデオをバイト配列にロードするのはひどい考えであり、決してうまくいきません。大容量ファイルの処理方法ではありません。だから、ストリーミングAPI(FileResultはここで何をするかを知っている)か、複数の小さなリクエスト(恐ろしい)が必要です。 –

+0

ファイルの結果は、APIコントローラ –

0

byte配列を返すことは、実際には不可能です。
ビデオ全体をbyte配列として返すのではなく、ファイルとしてまだ保存されていない場合はどこに保存して(Web APIなど)、ビデオURIを返信してみてください。

あなたが使用するビデオプレーヤーは、そのURIをどのように処理するかを知っているでしょう。

もう1つの方法は、Web APIで206 PARTIAL CONTENTのサポートを有効にし、ビデオプレーヤーでWeb APIのURIを使用することです。

は、私は動画のURLを押すことなくAndroidアプリで動画を再生するためにそれを返す必要があり、ここでhttps://stackoverflow.com/a/33634614/2528907

+0

実際に私はセキュリティの理由からレスポンスにビデオURLを送信したくありません。私はちょうどバイト配列または他の適切な解決策を送信したいのですが、私はwho; eビデオをレスポンスに送ることができ、それはサーバーのビデオURLを打つことなくアンドロイドアプリを使用して再生されます。 –

+0

実際、あなたのユーザーは、バイト配列が送信されているエンドポイントも見つけ出すことができます。 '部分的なコンテンツ'オプションはどうですか? – GeorgeChond

+0

私は部分的なコンテンツを使用していますが、大きなビデオの場合は、それも機能せず、要求がクラッシュします。 –

関連する問題