public void HandleGet(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { string queryString = request.Url.Query; var queryParts = Server.ParseQueryString(queryString); string jobID = queryParts.GetFirstValue("jobid"); if (string.IsNullOrEmpty(jobID)) { response.WriteResponse(400, "Missing parameter jobID"); return; } TranscodeJob job; if (!jobs.TryGetValue(jobID, out job)) { response.WriteResponse(404, "Job Not Found"); return; } // Build m3u8 file data StringBuilder sb = new StringBuilder(); sb.AppendLine("#EXTM3U"); foreach (var task in job.Results.OrderBy(x => x.BitRate)) { if (task.HasSegments) { sb.AppendLine("#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=" + (task.BitRate)); sb.AppendLine(task.Playlist); } } response.WriteResponse(200,sb.ToString()); }
public void HandleGet(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { try { string path = request.Url.AbsolutePath; if (path.Length < 9) { response.StatusCode = 404; response.WriteResponse("Video not found"); return; } string file = path.Substring(8); if (string.IsNullOrEmpty(file)) { response.StatusCode = 404; response.WriteResponse("Video not found"); return; } var match = Regex.Match(file, "^([a-zA-Z0-9_-])+\\.[a-zA-Z0-9]+$"); if (!match.Success) { response.StatusCode = 404; response.WriteResponse("Video not found"); return; } var jobID = match.Groups[1].Value; string filePath = FFRest.config["workingdir"] + Path.DirectorySeparatorChar + jobID + Path.DirectorySeparatorChar + file; if (!File.Exists(filePath)) { response.StatusCode = 404; response.WriteResponse("Video not found"); return; } response.StatusCode = 200; FileInfo fi = new FileInfo(filePath); response.ContentType = Utility.GetMime(fi.Extension); response.ContentLength64 = fi.Length; using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { Utility.CopyStream(fs, response.OutputStream); } response.OutputStream.Flush(); response.OutputStream.Close(); } catch (Exception ex) { log.Error("Failed to process video request", ex); } }
public void HandleGet(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { string queryString = request.Url.Query; var queryParts = Server.ParseQueryString(queryString); string type = queryParts.GetFirstValue("type"); if (string.IsNullOrEmpty(type)) { response.WriteResponse(400, "Missing parameter type"); return; } string data = ""; int exitCode; switch (type.ToLower()) { case "formats": data = FFmpeg.Exec("-formats", out exitCode); break; case "codecs": data = FFmpeg.Exec("-codecs", out exitCode); break; case "bsfs": data = FFmpeg.Exec("-bsfs", out exitCode); break; case "protocols": data = FFmpeg.Exec("-protocols", out exitCode); break; case "pix_fmts": data = FFmpeg.Exec("-pix_fmts", out exitCode); break; case "help": data = FFmpeg.Exec("-help", out exitCode); break; } response.WriteResponse(200, data); }