From f1a88acb8933c47ef03ae1487b851fbc534206a7 Mon Sep 17 00:00:00 2001 From: owen Date: Thu, 17 Sep 2026 18:15:57 +0800 Subject: [PATCH] ow --- .../DmsFileService.auto.cs | 16 +- .../PublishVideoService.auto.cs | 16 +- .../Policy/FileTypePolicy.cs | 4 +- .../CloudBuilder.Web.Entry/Dockerfile | 22 +- .../FolderProfile3.pubxml.user | 2 +- .../CloudBuilder.Web.Entry/appsettings.json | 2 +- CloudBuilder/Data/发布配置文件.zip | Bin 0 -> 4889 bytes WebVue/src/components/basic/VideoPlayer.vue | 967 ++++++++++++++++++ WebVue/src/views/master/PreviewVideo.vue | 176 +--- 9 files changed, 1040 insertions(+), 165 deletions(-) create mode 100644 CloudBuilder/Data/发布配置文件.zip create mode 100644 WebVue/src/components/basic/VideoPlayer.vue diff --git a/CloudBuilder/CloudBuilder.Master.Service/DmsFileService.auto.cs b/CloudBuilder/CloudBuilder.Master.Service/DmsFileService.auto.cs index 4c5a5b7..7165860 100644 --- a/CloudBuilder/CloudBuilder.Master.Service/DmsFileService.auto.cs +++ b/CloudBuilder/CloudBuilder.Master.Service/DmsFileService.auto.cs @@ -1190,7 +1190,7 @@ namespace CloudBuilder.Master.Service string backupFileName = Path.Combine(backupRootPath, filePath, file.FileName); if (!Directory.Exists(Path.Combine(backupRootPath, filePath))) { - Directory.CreateDirectory(Path.Combine(backupRootPath, filePath)); + Directory.CreateDirectory(Path.Combine(backupRootPath, filePath)); } if (fns[fns.Length - 1].Split('.')[0] == "1") @@ -1357,7 +1357,7 @@ namespace CloudBuilder.Master.Service { if (File.Exists(fileName)) File.Delete(fileName); } - string m3u8FilePath = fullName.Replace(fileExtension, ".png"); + string m3u8FilePath = fullName.Replace(fileExtension, FileTypePolicy.JPG); //生成m3u8(暂不生成,只生成截图) TsToM3u8(dmsFile.OrderKey, fullName, m3u8FilePath); } @@ -1405,7 +1405,14 @@ namespace CloudBuilder.Master.Service public void TsToM3u8(string orderKey, string mp4Url, string m3u8Url, int videoLength = 6) { string para = string.Format(service.Configuration[ServiceSettingsPolicy.FfmpegPictrue], mp4Url, m3u8Url); - RunMyProcess(service.Configuration[ServiceSettingsPolicy.FfmpegPath], para); + try + { + RunMyProcess(service.Configuration[ServiceSettingsPolicy.FfmpegPath], para); + } + catch (Exception ex) + { + new FileLog(service.Configuration).WriteToFile(ex.Message); + } return; para = string.Format(service.Configuration["Ffmpeg:Arguments"], mp4Url, videoLength, m3u8Url); //不直接转码视频文件,影响服务器性能,改为在闭时自动生成 @@ -1483,8 +1490,10 @@ namespace CloudBuilder.Master.Service /// public void RunMyProcess(string exePath, string Parameters) { + FileLog log = new FileLog(service.Configuration); try { + log.WriteToFile(exePath + Parameters); if (string.IsNullOrEmpty(exePath)) return; Cli.Wrap(exePath) .WithArguments(Parameters) @@ -1492,6 +1501,7 @@ namespace CloudBuilder.Master.Service } catch (Exception ex) { + log.WriteToFile(ex.Message); throw new ValidatedException(ex.Message); } diff --git a/CloudBuilder/CloudBuilder.Master.Service/PublishVideoService.auto.cs b/CloudBuilder/CloudBuilder.Master.Service/PublishVideoService.auto.cs index d317fde..a78e321 100644 --- a/CloudBuilder/CloudBuilder.Master.Service/PublishVideoService.auto.cs +++ b/CloudBuilder/CloudBuilder.Master.Service/PublishVideoService.auto.cs @@ -88,18 +88,10 @@ namespace CloudBuilder.Master.Service { var upload = ServiceSettingsPolicy.GetDmsFileUploadDirectory(service).Replace(phy, ""); - var filePathRel = Path.Combine(upload, item.CreatedBy, "m3u8", ""); - var filePath = filePathRel.Replace(Path.DirectorySeparatorChar, '/'); - item.FormattedUrl = service.Configuration[AppsettingsPolicy.ApplicationUrl] + webRootPath + filePath + '/' + Path.GetFileNameWithoutExtension(item.Url) + "/main.m3u8"; - - item.FormattedPic = item.FormattedUrl.Replace("main.m3u8", "main.png"); - - DmsFileEntity dmsFileEntity = repositoryDmsFile.DetachedEntities.Where(x => x.OrderKey == Path.GetFileNameWithoutExtension(item.Url)).FirstOrDefault(); - string transcodeIndc = YesNoPolicy.NO; - if (dmsFileEntity != null) transcodeIndc = dmsFileEntity.TranscodeIndc; - item.FormattedUrl = FileTypePolicy.PackUrl(service, item.CreatedBy, item.Url, transcodeIndc); - - + //暂时不支持转码 + //DmsFileEntity dmsFileEntity = repositoryDmsFile.DetachedEntities.Where(x => x.OrderKey == item.Url).FirstOrDefault(); + item.FormattedPic = FileTypePolicy.PackUrl(service, item.CreatedBy, item.Url, YesNoPolicy.YES); + item.FormattedUrl = FileTypePolicy.PackUrl(service, item.CreatedBy, item.Url, YesNoPolicy.NO); } } } diff --git a/CloudBuilder/CloudBuilder.Security/Policy/FileTypePolicy.cs b/CloudBuilder/CloudBuilder.Security/Policy/FileTypePolicy.cs index c2d713d..7c59ba2 100644 --- a/CloudBuilder/CloudBuilder.Security/Policy/FileTypePolicy.cs +++ b/CloudBuilder/CloudBuilder.Security/Policy/FileTypePolicy.cs @@ -22,6 +22,8 @@ namespace CloudBuilder.Security.Policy public const string DOCUMENT = "D"; public const string LYRIC = "L"; + public const string JPG = ".jpg"; + public static FileTypePolicy instance = null; public FileTypePolicy(IContext context) : base(context) @@ -115,7 +117,7 @@ namespace CloudBuilder.Security.Policy var upload = (ServiceSettingsPolicy.GetDmsFileBackupDirectory(service) ?? "").Replace(phy ?? "", ""); var filePathRel = Path.Combine(upload, createdBy, fileExtension.Replace(".", ""), ""); var filePath = filePathRel.Replace(Path.DirectorySeparatorChar, '/') + "/"; - url = service.Configuration[AppsettingsPolicy.ApplicationUrl] + webRootPath + filePath + Path.GetFileNameWithoutExtension(orderKey) + ".png"; + url = service.Configuration[AppsettingsPolicy.ApplicationUrl] + webRootPath + filePath + Path.GetFileNameWithoutExtension(orderKey) + JPG; } else { diff --git a/CloudBuilder/CloudBuilder.Web.Entry/Dockerfile b/CloudBuilder/CloudBuilder.Web.Entry/Dockerfile index 3d1b683..7e5ea14 100644 --- a/CloudBuilder/CloudBuilder.Web.Entry/Dockerfile +++ b/CloudBuilder/CloudBuilder.Web.Entry/Dockerfile @@ -5,35 +5,17 @@ FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base WORKDIR /app EXPOSE 8080 - -# 此階段是用來組建服務專案 -FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build -ARG BUILD_CONFIGURATION=Release -WORKDIR /src -COPY ["CloudBuilder.Web.Entry/CloudBuilder.Web.Entry.csproj", "CloudBuilder.Web.Entry/"] -RUN dotnet restore "./CloudBuilder.Web.Entry/CloudBuilder.Web.Entry.csproj" -COPY . . -WORKDIR "/src/CloudBuilder.Web.Entry" -RUN dotnet build "./CloudBuilder.Web.Entry.csproj" -c $BUILD_CONFIGURATION -o /app/build - -# 此階段可用來發佈要複製到最終階段的服務專案 -FROM build AS publish -ARG BUILD_CONFIGURATION=Release -RUN dotnet publish "./CloudBuilder.Web.Entry.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false - # 此階段用於生產環境,或以一般模式從 VS 執行時 (未使用偵錯設定時的預設值) FROM base AS final WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/* -COPY --from=publish /app/publish . -COPY ./dist ./dist ENTRYPOINT ["dotnet", "CloudBuilder.Web.Entry.dll"] #version: "3" #services: #cb: - #image: mcr.microsoft.com/dotnet/runtime-deps:8.0 - #container_name: CloudBuilder.Web.Entry + #build: . + #container_name: youjiala.com #restart: always #ports: #- "5200:8080" diff --git a/CloudBuilder/CloudBuilder.Web.Entry/Properties/PublishProfiles/FolderProfile3.pubxml.user b/CloudBuilder/CloudBuilder.Web.Entry/Properties/PublishProfiles/FolderProfile3.pubxml.user index de8cc61..1d2a01b 100644 --- a/CloudBuilder/CloudBuilder.Web.Entry/Properties/PublishProfiles/FolderProfile3.pubxml.user +++ b/CloudBuilder/CloudBuilder.Web.Entry/Properties/PublishProfiles/FolderProfile3.pubxml.user @@ -3,7 +3,7 @@ <_PublishTargetUrl>C:\inetpub\wwwroot\dockwebapi2 - True|2026-09-16T05:56:51.8724546Z||;True|2026-09-15T20:44:46.6559899+08:00||;True|2026-09-13T19:02:59.5654245+08:00||;True|2026-09-10T09:14:56.2914193+08:00||;True|2026-09-09T16:40:16.6461154+08:00||;True|2026-09-08T13:55:23.1502435+08:00||;True|2026-09-08T08:04:53.4279263+08:00||;True|2026-09-07T08:48:17.4682304+08:00||;True|2026-09-04T14:39:08.7878670+08:00||;True|2026-09-04T14:35:48.2937877+08:00||;True|2026-09-04T11:45:16.1372876+08:00||;True|2026-09-04T11:42:59.9356436+08:00||;True|2026-09-03T16:05:52.5270232+08:00||;True|2026-09-03T14:52:56.8559144+08:00||;True|2026-09-02T11:08:23.8720038+08:00||;True|2026-09-02T10:58:16.8081797+08:00||;True|2026-08-26T13:34:12.3805892+08:00||;True|2026-08-25T08:31:30.7787234+08:00||;True|2026-08-20T13:10:46.4725468+08:00||;True|2026-08-20T13:10:28.3142576+08:00||;True|2026-08-19T16:10:27.3362887+08:00||;True|2026-08-19T16:01:12.6234971+08:00||;True|2026-08-19T15:42:46.6576265+08:00||;True|2026-08-19T13:39:59.9363522+08:00||;True|2026-08-19T13:36:53.0379313+08:00||;True|2026-08-19T13:31:36.0841398+08:00||;True|2026-08-19T11:44:37.5319626+08:00||;True|2026-08-19T09:36:45.6000047+08:00||;True|2026-08-19T09:34:36.8468631+08:00||;True|2026-08-19T08:35:41.2202300+08:00||;True|2026-08-18T16:20:59.0170916+08:00||; + True|2026-09-17T10:11:11.5364547Z||;True|2026-09-17T18:07:27.7830758+08:00||;True|2026-09-17T17:58:16.5798560+08:00||;True|2026-09-17T15:37:30.9025614+08:00||;True|2026-09-17T15:25:46.9116292+08:00||;True|2026-09-17T15:05:18.6592403+08:00||;True|2026-09-17T14:57:28.7997437+08:00||;True|2026-09-17T14:36:00.6339386+08:00||;True|2026-09-17T13:56:43.2376873+08:00||;True|2026-09-16T13:56:51.8724546+08:00||;True|2026-09-15T20:44:46.6559899+08:00||;True|2026-09-13T19:02:59.5654245+08:00||;True|2026-09-10T09:14:56.2914193+08:00||;True|2026-09-09T16:40:16.6461154+08:00||;True|2026-09-08T13:55:23.1502435+08:00||;True|2026-09-08T08:04:53.4279263+08:00||;True|2026-09-07T08:48:17.4682304+08:00||;True|2026-09-04T14:39:08.7878670+08:00||;True|2026-09-04T14:35:48.2937877+08:00||;True|2026-09-04T11:45:16.1372876+08:00||;True|2026-09-04T11:42:59.9356436+08:00||;True|2026-09-03T16:05:52.5270232+08:00||;True|2026-09-03T14:52:56.8559144+08:00||;True|2026-09-02T11:08:23.8720038+08:00||;True|2026-09-02T10:58:16.8081797+08:00||;True|2026-08-26T13:34:12.3805892+08:00||;True|2026-08-25T08:31:30.7787234+08:00||;True|2026-08-20T13:10:46.4725468+08:00||;True|2026-08-20T13:10:28.3142576+08:00||;True|2026-08-19T16:10:27.3362887+08:00||;True|2026-08-19T16:01:12.6234971+08:00||;True|2026-08-19T15:42:46.6576265+08:00||;True|2026-08-19T13:39:59.9363522+08:00||;True|2026-08-19T13:36:53.0379313+08:00||;True|2026-08-19T13:31:36.0841398+08:00||;True|2026-08-19T11:44:37.5319626+08:00||;True|2026-08-19T09:36:45.6000047+08:00||;True|2026-08-19T09:34:36.8468631+08:00||;True|2026-08-19T08:35:41.2202300+08:00||;True|2026-08-18T16:20:59.0170916+08:00||; \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json b/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json index 7e977d9..d20508b 100644 --- a/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json +++ b/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json @@ -65,7 +65,7 @@ }, "Ffmpeg": { "Path": "D:\\NET8\\Exe\\ffmpeg\\bin\\ffmpeg.exe", //视频转码 - "Pictrue": " -i {0} -ss 00:00:2.000 -frames:v 1 {1}", + "Pictrue": " -i {0} -ss 00:00:2.000 -frames:v 1 -vf \"scale=1280:-1\" -q:v 4 {1}", //" -i {0} -ss 00:00:2.000 -frames:v 1 {1}", "Arguments": " -i {0} -c:v libx264 -vf scale=1280:-1 -start_number 0 -hls_time {1} -hls_list_size 0 -f hls {2}" //0-源路径,1-目标路径,2-存放多少秒 1280×720,852*480 }, "CloudBuilder.Topshelf": { diff --git a/CloudBuilder/Data/发布配置文件.zip b/CloudBuilder/Data/发布配置文件.zip new file mode 100644 index 0000000000000000000000000000000000000000..5951ec4ba23812313435cc5e1528eec245780bdc GIT binary patch literal 4889 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 +
+ +
+ +

暂无视频

+
+ + +
+ + +
+ + +
+ +
+ + + + + + + + + +
+ +
+ + +
+ {{ Math.round(volume * 100) }} +
+ +
+
+ + +
+ +
+
+ + +
+
+ + +
+
+ {{ fmt(displayTime) }} + {{ fmt(duration) }} +
+
+ + +
+ + + + + +
+
+ + + +
+
+ 播放列表({{ videos.length }}) + +
+
    +
  • + + + + + {{ v.Title }} + {{ v.Author }} +
  • +
+
+
+
+ + + + + \ No newline at end of file diff --git a/WebVue/src/views/master/PreviewVideo.vue b/WebVue/src/views/master/PreviewVideo.vue index b77c48c..41cfbec 100644 --- a/WebVue/src/views/master/PreviewVideo.vue +++ b/WebVue/src/views/master/PreviewVideo.vue @@ -1,93 +1,49 @@ - - + \ No newline at end of file