2013-07-25 2 views
0

매일 밤 GoToMeeting 비디오 파일을 트랜스 코드하는 작업이 제공됩니다. 동영상이 트랜스 코드되면 웹 사이트에 업로드됩니다. 그러나 프로젝트에 너무 많이 뛰어 들기 전에 이것이 가능한지 알아 내려고했습니다.외부 프로그램을 실행할 때 C#의 동기 명령

현재 샘플 스크립트는 배치 파일에 여러 파일을 끌어다 놓을 수있는 간단한 배치 파일입니다. 첫 번째 파일을 트랜스 코딩하고 출력을 표시 한 다음 트랜스 코드 할 두 번째 파일로 계속 진행합니다. 이것은 내가 기대하는 행동입니다.

@echo off 
C:\g2mtranscoder.exe source=%~1 
echo %~1 has completed. 
C:\g2mtranscoder.exe source=%~2 
echo %~2 has completed. 
C:\g2mtranscoder.exe source=%~3 
echo %~3 has completed. 
C:\g2mtranscoder.exe source=%~4 
echo %~4 has completed. 
pause 

내 질문은 C#으로 (궁극적으로 Windows 서비스 예정)하는 경우는 트랜스 코딩을하고 마우스 오른쪽 나중에 내 업로드 스크립트를 넣어 외부 프로그램 g2mtranscoder.exe를 호출하는 것처럼 간단 할 것입니까? 분명히 현재 트랜스 코딩 된 비디오를 업로드하고 싶지 않으며 트랜스 코딩하지 않고 비디오를 업로드하고 싶지 않습니다.

내 하위 질의는 디렉토리의 내용이 변환 된 비디오 만있는 경우 모든 문제를 일으킬 수 있습니다 (디렉토리의 각 파일에 대한 루프). 루프에서 루프를 통해 비동기 적으로 디렉토리 내의 모든 파일의 코드 변환을 시작하거나보다 동기가 발생합니까? 오디오/비디오 타이밍과 관련된 아티팩트 또는 동기화 문제를 일으키는 컴퓨터에 과부하가 걸릴 수 있으므로 루프를 비동기 적으로 발생시키지 않으려합니다. 가장 중요한 점은 트랜스 코딩 중간의 비디오 또는 트랜스 코딩되지 않은 비디오를 업로드 할 수 없다는 것입니다.

코딩 방법에 대한 제안은 훌륭 하겠지만 C# 코드가 실행되는 중간에 호출되는 외부 프로그램을 사용하여 코드 실행과 함께 C# 작동 방법을 더 많이 이해하고자합니다.

저는 Ruby/Rails 및 Linux 사용자이며 C#에 익숙하지 않습니다. 나는 위험하다는 것을 충분히 알고 있지만, 내가하고 싶은 일이 실현 가능한지 확인하고 싶습니다.

답변

0

나는 그것을 알아 냈다. 프로세스를 만든 다음 HasExited 플래그를 사용하여 프로세스가 완료 될 때까지 기다릴 수 있습니다. 끝나면 프로그램을 계속 업로드 할 수 있습니다. 성공적인 이탈은 0HasExited 값을 가지며 실패한 종료는 1 또는 -1이됩니다.

StartInfo.Arguments은 비디오 파일을 처리하기 위해 source=<location of GTM video>으로 전달할 수 있습니다.

Console.WriteLine("Running"); 
Process pr = new Process(); 
pr.StartInfo.FileName = "Notepad.exe"; 
pr.StartInfo.Arguments = "test.dat"; 
pr.Start(); 
while (pr.HasExited == false) 
    if ((DateTime.Now.Second % 5) == 0) 
    { // Show a tick every five seconds. 
     Console.Write("."); 
     System.Threading.Thread.Sleep(1000); 
    }