Sfoglia il codice sorgente

zhao:上传

tags/录制修改前
耀 4 anni fa
parent
commit
86de3c0653

+ 109
- 0
Common/AESHelper.cs Vedi File

@@ -0,0 +1,109 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Security.Cryptography;
5
+using System.Text;
6
+using System.Threading.Tasks;
7
+
8
+namespace Common
9
+{
10
+    /// <summary>
11
+    /// AES加密
12
+    /// 创建人:赵耀
13
+    /// 创建时间:2020年9月7日
14
+    /// </summary>
15
+    public class AESHelper
16
+    {
17
+        public static string QrcodeLoginKey = "zyyxhlywkdatakey";
18
+
19
+        /// <summary>
20
+        /// AES 加密
21
+        /// </summary>
22
+        /// <param name="content">Need encrypted string</param>
23
+        /// <returns>Encrypted 16 hex string</returns>
24
+        public static string AESEncrypt(String Data)
25
+        {
26
+            string key = QrcodeLoginKey.PadRight(16, '0');
27
+            // 256-AES key      
28
+            byte[] keyArray = UTF8Encoding.ASCII.GetBytes(key);
29
+            byte[] toEncryptArray = UTF8Encoding.ASCII.GetBytes(Data);
30
+
31
+            RijndaelManaged rDel = new RijndaelManaged();
32
+            rDel.Key = keyArray;
33
+            rDel.Mode = CipherMode.ECB;
34
+            rDel.Padding = PaddingMode.PKCS7;
35
+
36
+            ICryptoTransform cTransform = rDel.CreateEncryptor();
37
+            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0,
38
+                    toEncryptArray.Length);
39
+
40
+            return BytesToHexString(resultArray);
41
+        }
42
+
43
+        /// <summary>
44
+        /// AES 解密
45
+        /// </summary>
46
+        /// <param name="hexString">Encrypted 16 hex string</param>
47
+        /// <returns>Decrypted string</returns>
48
+        public static string AESDecrypt(String hexString)
49
+        {
50
+            string key = QrcodeLoginKey.PadRight(16, '0');
51
+            // 256-AES key      
52
+            byte[] keyArray = UTF8Encoding.ASCII.GetBytes(key);
53
+            byte[] toEncryptArray = HexStringToBytes(hexString);
54
+
55
+            RijndaelManaged rDel = new RijndaelManaged();
56
+            rDel.Key = keyArray;
57
+            rDel.Mode = CipherMode.ECB;
58
+            rDel.Padding = PaddingMode.PKCS7;
59
+
60
+            ICryptoTransform cTransform = rDel.CreateDecryptor();
61
+            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0,
62
+                    toEncryptArray.Length);
63
+
64
+            return UTF8Encoding.ASCII.GetString(resultArray);
65
+        }
66
+
67
+        /// <summary>
68
+        /// Byte array to convert 16 hex string
69
+        /// </summary>
70
+        /// <param name="bytes">byte array</param>
71
+        /// <returns>16 hex string</returns>
72
+        public static string BytesToHexString(byte[] bytes)
73
+        {
74
+            StringBuilder returnStr = new StringBuilder();
75
+            if (bytes != null || bytes.Length == 0)
76
+            {
77
+                for (int i = 0; i < bytes.Length; i++)
78
+                {
79
+                    returnStr.Append(bytes[i].ToString("X2"));
80
+                }
81
+            }
82
+            return returnStr.ToString();
83
+        }
84
+
85
+        /// <summary>
86
+        /// 16 hex string converted to byte array
87
+        /// </summary>
88
+        /// <param name="hexString">16 hex string</param>
89
+        /// <returns>byte array</returns>
90
+        public static byte[] HexStringToBytes(String hexString)
91
+        {
92
+            if (hexString == null || hexString.Equals(""))
93
+            {
94
+                return null;
95
+            }
96
+            int length = hexString.Length / 2;
97
+            if (hexString.Length % 2 != 0)
98
+            {
99
+                return null;
100
+            }
101
+            byte[] d = new byte[length];
102
+            for (int i = 0; i < length; i++)
103
+            {
104
+                d[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
105
+            }
106
+            return d;
107
+        }
108
+    }
109
+}

+ 1
- 0
Common/Common.csproj Vedi File

@@ -116,6 +116,7 @@
116 116
     <Reference Include="WindowsFormsIntegration" />
117 117
   </ItemGroup>
118 118
   <ItemGroup>
119
+    <Compile Include="AESHelper.cs" />
119 120
     <Compile Include="Model\DownloadInfoModel.cs" />
120 121
     <Compile Include="system\LatticeFileHelper.cs" />
121 122
     <Compile Include="system\PdfTrunImage.cs" />

+ 1
- 1
Common/system/BlackboardNew.cs Vedi File

@@ -331,7 +331,7 @@ namespace Common.system
331 331
         StylusPointCollection stylusPoints = new StylusPointCollection();
332 332
         StylusPoint stylusPoint = new StylusPoint();
333 333
         Stroke stroke;
334
-        bool isFirst = true;
334
+        //bool isFirst = true;
335 335
         //public void changepages(double _x, double _y, bool _new, Color _color, int _size)
336 336
         //{
337 337
         //    if (_new)

+ 92
- 0
Common/system/QueueSync.cs Vedi File

@@ -0,0 +1,92 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Text;
5
+using System.Threading.Tasks;
6
+
7
+namespace Common.system
8
+{
9
+    /// <summary>
10
+    /// 队列操作类 默认队列数1000
11
+    /// 创建人:赵耀
12
+    /// 创建时间:2019年8月22日
13
+    /// </summary>
14
+    /// <typeparam name="T"></typeparam>
15
+    public class QueueSync<T>
16
+    {
17
+        int _maxcount = 10000;
18
+        Queue<T> _queue = new Queue<T>();
19
+        /// <summary>
20
+        /// 获取该队列包含的元素数
21
+        /// </summary>
22
+        public int Count
23
+        {
24
+            get
25
+            {
26
+                if (_queue == null)
27
+                {
28
+                    return 0;
29
+                }
30
+                else
31
+                {
32
+                    return _queue.Count;
33
+                }
34
+            }
35
+        }
36
+
37
+        /// <summary>
38
+        /// 默认1000
39
+        /// </summary>
40
+        public QueueSync() : this(1000) { }
41
+
42
+        /// <summary>
43
+        /// 定义一个指定容量的队列
44
+        /// </summary>
45
+        /// <param name="maxcount"></param>
46
+        public QueueSync(int maxcount)
47
+        {
48
+            //_maxcount = Math.Max(maxcount, _maxcount);
49
+            _maxcount = maxcount;
50
+        }
51
+
52
+        /// <summary>
53
+        /// 入队列
54
+        /// </summary>
55
+        /// <param name="obj"></param>
56
+        /// <returns></returns>
57
+        public bool Enqueue(T obj)
58
+        {
59
+            bool result = false;
60
+            lock (this)
61
+            {
62
+                if (_queue.Count > _maxcount)
63
+                {
64
+                    _queue.Dequeue();
65
+                }
66
+                _queue.Enqueue(obj);
67
+                result = true;
68
+            }
69
+            return result;
70
+        }
71
+        /// <summary>
72
+        /// 出队列
73
+        /// </summary>
74
+        /// <returns></returns>
75
+        public T Dequeue()
76
+        {
77
+            T obj = default(T);
78
+            lock (this)
79
+            {
80
+                try
81
+                {
82
+                    obj = _queue.Dequeue();
83
+                }
84
+                catch
85
+                {
86
+
87
+                }
88
+            }
89
+            return obj;
90
+        }
91
+    }
92
+}

+ 8
- 2
XHWK.Model/Model_Video.cs Vedi File

@@ -1,4 +1,5 @@
1 1
 using System.Collections.Generic;
2
+using System.Runtime.Remoting.Messaging;
2 3
 
3 4
 namespace XHWK.Model
4 5
 {
@@ -7,7 +8,7 @@ namespace XHWK.Model
7 8
     /// </summary>
8 9
     public class Model_Video
9 10
     {
10
-        private string _videPath;
11
+        private string _videoPath;
11 12
         private string _thumbnailPath;
12 13
         private Enum_VideoType _videoType;
13 14
         private Enum_WKVidetype _wkType;
@@ -19,10 +20,11 @@ namespace XHWK.Model
19 20
         private string _Savefolder;
20 21
         private int _Block;
21 22
         private int _Uploaded;
23
+        private long _SliceLen;
22 24
         /// <summary>
23 25
         /// 视频路径
24 26
         /// </summary>
25
-        public string VidePath { get => _videPath; set => _videPath = value; }
27
+        public string VideoPath { get => _videoPath; set => _videoPath = value; }
26 28
         /// <summary>
27 29
         /// 缩略图路径
28 30
         /// </summary>
@@ -67,6 +69,10 @@ namespace XHWK.Model
67 69
         /// 当前已上传到第几块
68 70
         /// </summary>
69 71
         public int Uploaded { get => _Uploaded; set => _Uploaded = value; }
72
+        /// <summary>
73
+        /// 视频每片长度
74
+        /// </summary>
75
+        public long SliceLen { get => _SliceLen; set => _SliceLen = value; }
70 76
     }
71 77
 
72 78
     /// <summary>

+ 2
- 0
XHWK.WKTool/App.config Vedi File

@@ -30,5 +30,7 @@
30 30
     展示文件:   https://schoolfiletest.xhkjedu.com/-->
31 31
     <!--摄像头位置 1.右上 2.左上 3.右下 4.左下-->
32 32
     <add key="CameraPosition" value=""/>
33
+    <!--上传每片大小 Mb-->
34
+    <add key="UploadSliceLen" value="1"/>
33 35
   </appSettings>
34 36
 </configuration>

+ 1
- 1
XHWK.WKTool/CountdownWindow.xaml.cs Vedi File

@@ -23,7 +23,7 @@ namespace XHWK.WKTool
23 23
         /// <summary>
24 24
         /// 计时器
25 25
         /// </summary>
26
-        new System.Timers.Timer timer;
26
+        System.Timers.Timer timer;
27 27
         int ImgNum = 3;
28 28
         public void Initialize(int changeTime=650)
29 29
         {

+ 1
- 1
XHWK.WKTool/CreateAMicroLessonWindow.xaml.cs Vedi File

@@ -120,7 +120,7 @@ namespace XHWK.WKTool
120 120
                 //APP.W_XHMicroLessonSystemWindow .Topmost = true;
121 121
             }
122 122
             this.Hide();
123
-            APP.W_XHMicroLessonSystemWindow.ShowDialog();
123
+            APP.W_XHMicroLessonSystemWindow.Show();
124 124
           
125 125
         }
126 126
         /// <summary>

+ 93
- 5
XHWK.WKTool/DAL/DAL_Upload.cs Vedi File

@@ -1,14 +1,19 @@
1
-using Common.system;
1
+using Common;
2
+using Common.system;
2 3
 
3 4
 using Newtonsoft.Json.Linq;
4 5
 
5 6
 using System;
6 7
 using System.Collections.Generic;
8
+using System.Collections.Specialized;
9
+using System.IO;
7 10
 using System.Linq;
8 11
 using System.Text;
9 12
 using System.Threading;
10 13
 using System.Threading.Tasks;
11 14
 
15
+using XHWK.Model;
16
+
12 17
 namespace XHWK.WKTool.DAL
13 18
 {
14 19
     /// <summary>
@@ -37,7 +42,7 @@ namespace XHWK.WKTool.DAL
37 42
                 {
38 43
                     JObject jo = HttpHelper.PostFunction(FileRequestAddress + @"/chunkdb/isexist", @"application/x-www-form-urlencoded", @"md5=" + MD5, "");
39 44
                     //0成功,1失败
40
-                    if(jo["code"].ToString()=="0")
45
+                    if (jo["code"].ToString() == "0")
41 46
                     {
42 47
                         if (string.IsNullOrWhiteSpace(jo["obj"].ToString()))
43 48
                         {
@@ -52,7 +57,7 @@ namespace XHWK.WKTool.DAL
52 57
                     }
53 58
                     else
54 59
                     {
55
-                        Message=jo["msg"].ToString();
60
+                        Message = jo["msg"].ToString();
56 61
                         return false;
57 62
                     }
58 63
                 }
@@ -74,7 +79,7 @@ namespace XHWK.WKTool.DAL
74 79
         /// <param name="FileCode">文件唯一编号 Guid</param>
75 80
         /// <param name="Message">错误信息</param>
76 81
         /// <returns></returns>
77
-        public bool ReportFileMerge(string Savefolder,string FileCode, out string Message)
82
+        public bool ReportFileMerge(string Savefolder, string FileCode, out string Message)
78 83
         {
79 84
             Exception ex = null;
80 85
             Message = "";//请求重试5次 共5秒
@@ -82,7 +87,7 @@ namespace XHWK.WKTool.DAL
82 87
             {
83 88
                 try
84 89
                 {
85
-                    JObject jo = HttpHelper.PostFunction(FileRequestAddress + @"/chunkdb/mergechunk", @"application/x-www-form-urlencoded", @"savefolder=" + Savefolder+ "&identifier="+ FileCode, "");
90
+                    JObject jo = HttpHelper.PostFunction(FileRequestAddress + @"/chunkdb/mergechunk", @"application/x-www-form-urlencoded", @"savefolder=" + Savefolder + "&identifier=" + FileCode, "");
86 91
                     //0成功,1失败
87 92
                     if (jo["code"].ToString() == "0")
88 93
                     {
@@ -105,5 +110,88 @@ namespace XHWK.WKTool.DAL
105 110
             LogHelper.WriteErrLog(ErrMessage, ex);
106 111
             return false;
107 112
         }
113
+
114
+        /// <summary>
115
+        /// 上传视频
116
+        /// </summary>
117
+        /// <returns></returns>
118
+        public bool UploadVideo(string VideoGuid, out string ErrMessage)
119
+        {
120
+            ErrMessage = "";
121
+            try
122
+            {
123
+                Model_Video VideoInfo = APP.VideoList.Find(x => x.FileGuid == VideoGuid);
124
+                string UploadUrl = FileRequestAddress + "/chunkdb/upchunk";
125
+                if (VideoInfo.IsUpload)
126
+                {
127
+                    ErrMessage = "视频已上传";
128
+                    return false;
129
+                }
130
+                else
131
+                {
132
+                    if (string.IsNullOrWhiteSpace(VideoInfo.FileMD5))
133
+                    {
134
+                        VideoInfo.FileMD5 = AESHelper.AESEncrypt(FileToolsCommon.ReadBigFileStr(VideoInfo.VideoPath, 1024));
135
+                    }
136
+                    if (IsAllowUploaded(VideoInfo.FileMD5, out ErrMessage))
137
+                    {
138
+                        //视频长度
139
+                        long filelen = FileToolsCommon.GetFileSize(VideoInfo.VideoPath);
140
+                        //每片的长度
141
+                        double UploadSliceLenMB = double.Parse(FileToolsCommon.GetConfigValue("UploadSliceLen"));
142
+                        if (VideoInfo.SliceLen == 0)
143
+                        {
144
+                            VideoInfo.SliceLen = (long)(UploadSliceLenMB * 1024 * 1024);
145
+                            VideoInfo.Block = (int)(filelen / VideoInfo.SliceLen + (filelen % VideoInfo.SliceLen > 0 ? 1 : 0));
146
+                        }
147
+                        //已上传长度
148
+                        long len = VideoInfo.Uploaded * VideoInfo.SliceLen;
149
+                        string fileName = FileToolsCommon.GetFileName(VideoInfo.VideoPath);
150
+                        //分块
151
+                        for (; len + VideoInfo.SliceLen < filelen; VideoInfo.Uploaded++)
152
+                        {
153
+                            len = VideoInfo.Uploaded * VideoInfo.SliceLen;
154
+                            //取指定长度的流
155
+                            byte[] byteArray = FileToolsCommon.ReadBigFileSpecifyLength(VideoInfo.VideoPath, len, 102400);
156
+                            //参数
157
+                            NameValueCollection formFields = new NameValueCollection();
158
+                            formFields.Add("identifier", VideoInfo.FileGuid);
159
+                            formFields.Add("chunkNumber", (VideoInfo.Uploaded + 1).ToString());
160
+                            formFields.Add("filename", fileName);
161
+                            formFields.Add("totalchunk", VideoInfo.Block.ToString());
162
+                            formFields.Add("md5", VideoInfo.FileMD5);
163
+                            JObject jo = HttpHelper.UploadRequestflow(UploadUrl, byteArray, fileName, formFields);
164
+                            //0成功,1失败
165
+                            if (jo["code"].ToString() != "0")
166
+                            {
167
+                                ErrMessage = jo["msg"].ToString();
168
+                                return false;
169
+                            }
170
+                        }
171
+                        //合并文件
172
+                        bool isres = ReportFileMerge(APP.UserInfo.Schoolid.ToString() + "/resource", VideoInfo.FileGuid, out ErrMessage);
173
+                        if (isres)
174
+                        {
175
+                            return true;
176
+                        }
177
+                        else
178
+                        {
179
+                            return false;
180
+                        }
181
+                    }
182
+                    else
183
+                    {
184
+                        ErrMessage = "上传失败:" + ErrMessage;
185
+                        return false;
186
+                    }
187
+                }
188
+
189
+            }
190
+            catch (Exception ex)
191
+            {
192
+                LogHelper.WriteErrLog("【视频上传】(UploadVideo)视频上传失败:" + ex.Message, ex);
193
+            }
194
+            return false;
195
+        }
108 196
     }
109 197
 }

+ 2
- 1
XHWK.WKTool/FileDirectoryWindow.xaml.cs Vedi File

@@ -4,6 +4,7 @@ using System.Collections.ObjectModel;
4 4
 using System.Windows;
5 5
 using System.Windows.Input;
6 6
 using XHWK.Model;
7
+using XHWK.WKTool.DAL;
7 8
 
8 9
 namespace XHWK.WKTool
9 10
 {
@@ -52,7 +53,7 @@ namespace XHWK.WKTool
52 53
                 pageData.menuList.Add(new FileDirectoryModel()
53 54
                 {
54 55
                     SerialNumber = i,
55
-                    VideoName = Common.system.FileToolsCommon.GetIOFileName( videoinfo.VidePath),
56
+                    VideoName = Common.system.FileToolsCommon.GetIOFileName( videoinfo.VideoPath),
56 57
                     VideoDuration = 0,
57 58
                     VideoSize = videoinfo.VideoSize,
58 59
                     VideoTime = videoinfo.RSTime,

+ 2
- 2
XHWK.WKTool/ScreenRecordingToolbarWindow.xaml.cs Vedi File

@@ -186,7 +186,7 @@ namespace XHWK.WKTool
186 186
                             try
187 187
                             {
188 188
                                 FileToolsCommon.DeleteFile(VideoSavePathName);
189
-                                APP.VideoList.RemoveAll(x => x.VidePath == VideoSavePathName);
189
+                                APP.VideoList.RemoveAll(x => x.VideoPath == VideoSavePathName);
190 190
                             }
191 191
                             catch (Exception ex)
192 192
                             {
@@ -291,7 +291,7 @@ namespace XHWK.WKTool
291 291
                         FileToolsCommon.DeleteFile(ThumbnailPathName);
292 292
                         VideoInfo.VideoSize = FileToolsCommon.GetFileSizeByMB(VideoSavePathName).ToString() + " MB";
293 293
                         VideoInfo.RSTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
294
-                        VideoInfo.VidePath = VideoSavePathName;
294
+                        VideoInfo.VideoPath = VideoSavePathName;
295 295
                         VideoInfo.ThumbnailPath = ThumbnailPathName;
296 296
                         APP.FFmpeg.GenerateThumbnails(VideoSavePathName, ThumbnailPathName);
297 297
                         VideoInfo.FileGuid = Guid.NewGuid().ToString();

+ 1
- 1
XHWK.WKTool/XHMicroLessonSystemWindow.xaml Vedi File

@@ -8,7 +8,7 @@
8 8
         xmlns:local="clr-namespace:XHWK.WKTool"
9 9
         mc:Ignorable="d"
10 10
         Title="XHMicroLessonSystemWindow" Height="1040.8" Width="875" WindowStartupLocation="CenterScreen"
11
-    WindowStyle="None"    AllowsTransparency="True"  Background="#EFF1F8"
11
+    WindowStyle="None"    AllowsTransparency="True"  Background="#EFF1F8" ShowInTaskbar="True"
12 12
    >
13 13
     
14 14
     <Viewbox>

+ 3
- 48
XHWK.WKTool/XHMicroLessonSystemWindow.xaml.cs Vedi File

@@ -299,52 +299,6 @@ namespace XHWK.WKTool
299 299
             //}
300 300
             APP.fileDirectoryWindow = new FileDirectoryWindow();
301 301
             APP.fileDirectoryWindow.Show();
302
-
303
-            #region 测试上传
304
-            //string path = "E:/临时文件/test.txt";
305
-            //string newpath = "E:/临时文件/test1.txt";
306
-            //string identifier = Guid.NewGuid().ToString();
307
-            //FileToolsCommon.CreateFile(newpath);
308
-            //DAL_Upload DU = new DAL_Upload();
309
-            //string FileRequestAddress = FileToolsCommon.GetConfigValue("FileRequestAddress");
310
-            //string url = FileRequestAddress+"/chunkdb/upchunk";
311
-            ////是否可以上传
312
-            //if (DU.IsAllowUploaded("TestABC", out string ErrMessage))
313
-            //{
314
-            //    long len = 0;
315
-            //    long filelen = 0;
316
-            //    //文件总长度
317
-            //    using (FileStream stream = new FileStream(path, FileMode.Open))
318
-            //    {
319
-            //        filelen = stream.Length;
320
-            //    }
321
-            //    //分块
322
-            //    for (int i = 0; len + 102400 < filelen; i++)
323
-            //    {
324
-            //        len = i * 102400;
325
-            //        //取指定长度的流
326
-            //        byte[] byteArray = FileToolsCommon.ReadBigFileSpecifyLength(path, len, 102400);
327
-            //        //参数
328
-            //        NameValueCollection formFields = new NameValueCollection();
329
-            //        formFields.Add("identifier", identifier);
330
-            //        formFields.Add("chunkNumber", (i + 1).ToString());
331
-            //        formFields.Add("filename", "test.txt");
332
-            //        formFields.Add("totalchunk", "13");
333
-            //        formFields.Add("md5", "TestABC");
334
-            //        HttpHelper.UploadRequestflow(url, byteArray, "test.txt", formFields);
335
-            //    }
336
-            //    //
337
-            //    bool isres=DU.ReportFileMerge(APP.UserInfo.Schoolid.ToString() + "/resource", identifier, out string Message);
338
-            //    if(!isres)
339
-            //    {
340
-            //        System.Windows.MessageBox.Show(Message);
341
-            //    }
342
-            //}
343
-            //else
344
-            //{
345
-            //    System.Windows.MessageBox.Show(ErrMessage);
346
-            //}
347
-            #endregion
348 302
         }
349 303
         /// <summary>
350 304
         /// 关闭事件
@@ -1002,6 +956,7 @@ namespace XHWK.WKTool
1002 956
             long timestr = Convert.ToInt64(ts.TotalMilliseconds);
1003 957
             return timestr;
1004 958
         }
959
+
1005 960
         #region 录制窗口
1006 961
         #region 变量
1007 962
         /// <summary>
@@ -1129,7 +1084,7 @@ namespace XHWK.WKTool
1129 1084
                             try
1130 1085
                             {
1131 1086
                                 FileToolsCommon.DeleteFile(VideoSavePathName);
1132
-                                APP.VideoList.RemoveAll(x => x.VidePath == VideoSavePathName);
1087
+                                APP.VideoList.RemoveAll(x => x.VideoPath == VideoSavePathName);
1133 1088
                             }
1134 1089
                             catch (Exception ex)
1135 1090
                             {
@@ -1309,7 +1264,7 @@ namespace XHWK.WKTool
1309 1264
                         FileToolsCommon.DeleteFile(ThumbnailPathName);
1310 1265
                         VideoInfo.VideoSize = FileToolsCommon.GetFileSizeByMB(VideoSavePathName).ToString() + " MB";
1311 1266
                         VideoInfo.RSTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
1312
-                        VideoInfo.VidePath = VideoSavePathName;
1267
+                        VideoInfo.VideoPath = VideoSavePathName;
1313 1268
                         VideoInfo.ThumbnailPath = ThumbnailPathName;
1314 1269
                         APP.FFmpeg.GenerateThumbnails(VideoSavePathName, ThumbnailPathName);
1315 1270
                         VideoInfo.FileGuid = Guid.NewGuid().ToString();

Loading…
Annulla
Salva