DreamineVMS 1.0.0.0
Windows PC의 RTSP·USB 카메라 영상을 HLS로 변환해 원격 CCTV Viewer에 전달하는 데스크톱 에이전트입니다.
로딩중...
검색중...
일치하는것 없음
DreamineVMS.Services.Streaming.FfmpegBootstrapper 클래스 참조

더 자세히 ...

정적 Public 멤버 함수

static async Task< string > EnsureAsync (string configuredPath, IProgress< string >? progress=null)

정적 Private 속성

const string ReleaseUrl

상세한 설명

FFmpeg 실행 파일이 없을 경우 GitHub에서 자동으로 다운로드합니다.

FfmpegBootstrapper.cs 파일의 15 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ EnsureAsync()

async Task< string > DreamineVMS.Services.Streaming.FfmpegBootstrapper.EnsureAsync ( string configuredPath,
IProgress< string >? progress = null )
inlinestatic

FFmpeg 경로를 확인하고, 없으면 다운로드한 후 최종 경로를 반환합니다.

매개변수
configuredPathconfigured Path에 사용할 string 값입니다.
progressprogress에 사용할 IProgress<string>? 값입니다.
반환값
Ensure Async 작업에서 생성한 Task<string> 결과입니다.
예외
FileNotFoundExceptionEnsure Async 작업을 완료할 수 없는 경우 FileNotFoundException이 발생합니다.

FfmpegBootstrapper.cs 파일의 68 번째 라인에서 정의되었습니다.

69 {
70 // 1. 설정 경로에 존재
71 if (File.Exists(configuredPath))
72 return configuredPath;
73
74 // 2. 앱 디렉토리 내 ffmpeg\ffmpeg.exe
75 var localPath = Path.Combine(AppContext.BaseDirectory, "ffmpeg", "ffmpeg.exe");
76 if (File.Exists(localPath))
77 return localPath;
78
79 // 3. PATH 환경변수에서 검색
80 foreach (var dir in (Environment.GetEnvironmentVariable("PATH") ?? "").Split(Path.PathSeparator))
81 {
82 var candidate = Path.Combine(dir.Trim(), "ffmpeg.exe");
83 if (File.Exists(candidate))
84 return candidate;
85 }
86
87 // 4. GitHub에서 다운로드
88 progress?.Report("FFmpeg를 찾을 수 없습니다. GitHub에서 자동 다운로드를 시작합니다...");
89
90 var ffmpegDir = Path.Combine(AppContext.BaseDirectory, "ffmpeg");
91 Directory.CreateDirectory(ffmpegDir);
92 var zipPath = Path.Combine(ffmpegDir, "ffmpeg_download.zip");
93
94 try
95 {
96 using var http = new HttpClient();
97 http.Timeout = TimeSpan.FromMinutes(10);
98 http.DefaultRequestHeaders.UserAgent.ParseAdd("DreamineVMS/1.0");
99
100 progress?.Report("다운로드 중... (약 100 MB, 잠시 기다려 주세요)");
101
102 using var response = await http.GetAsync(ReleaseUrl, HttpCompletionOption.ResponseHeadersRead);
103 response.EnsureSuccessStatusCode();
104
105 await using (var src = await response.Content.ReadAsStreamAsync())
106 await using (var dst = File.Create(zipPath))
107 {
108 await src.CopyToAsync(dst);
109 }
110
111 progress?.Report("압축 해제 중...");
112
113 using var zip = ZipFile.OpenRead(zipPath);
114 var entry = zip.Entries.FirstOrDefault(e =>
115 e.FullName.EndsWith("/bin/ffmpeg.exe", StringComparison.OrdinalIgnoreCase));
116
117 if (entry is null)
118 throw new FileNotFoundException("zip 파일 안에서 ffmpeg.exe를 찾지 못했습니다.");
119
120 entry.ExtractToFile(localPath, overwrite: true);
121 progress?.Report("FFmpeg 설치 완료.");
122 return localPath;
123 }
124 finally
125 {
126 try { File.Delete(zipPath); } catch { /* ignore */ }
127 }
128 }

다음을 참조함 : ReleaseUrl.

다음에 의해서 참조됨 : DreamineVMS.Program.Main().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ ReleaseUrl

const string DreamineVMS.Services.Streaming.FfmpegBootstrapper.ReleaseUrl
staticprivate
초기값:
=
"https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip"

Release Url 값을 보관합니다.

FfmpegBootstrapper.cs 파일의 25 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : EnsureAsync().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: