using CefSharp.Wpf; using Container.Business; using Container.ChildWindows; using Container.Common; using Container.Model; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Transitionals.Controls; using Vlc.DotNet.Wpf; namespace Container.Win { /// /// ProgControl.xaml 的交互逻辑 /// public partial class ProgControl : UserControl { string outLinePath; App app = ((App)System.Windows.Application.Current); DirectoryInfo vlcLibDirectory; backgroundMaterialInfo backgroundMaterial; string backgroundColor; List components; private Thread th1;//播放屏保的线程 bool isStop = false; BrushConverter converter = new BrushConverter(); List tasks = new List(); List marqueeControlNews = new List(); List clockControls = new List(); List weatherControls = new List(); List imageControls = new List(); List mediaControls = new List(); List chromiumWebBrowsers = new List(); List mediaElements = new List(); List canvasWebBrowsers = new List(); List cancellationTokens = new List(); string[] options; public ProgControl() { InitializeComponent(); var currentAssembly = Assembly.GetEntryAssembly(); var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName; // Default installation path of VideoLAN.LibVLC.Windows //vlcLibDirectory = new DirectoryInfo(currentDirectory); ////初始化配置,指定引用库 //vlcControl1.SourceProvider.CreatePlayer(vlcLibDirectory); ////初始化配置,指定引用库 //vlcControl2.SourceProvider.CreatePlayer(vlcLibDirectory); // Default installation path of VideoLAN.LibVLC.Windows vlcLibDirectory = new DirectoryInfo(currentDirectory); //初始化配置,指定引用库 //vlcControl1.SourceProvider.CreatePlayer(vlcLibDirectory); // options = new string[]{ // "-I", //"dummy", //"--ignore-config", //"--extraintf=logger", //"--verbose=2", //"--fullscreen", //"--network-caching=300", //"--live-caching=300", //"--sout-mux-caching=300", //"--file-caching=300", //"--codec=mediacodec,iomx,all", //"--quiet-synchro", //" --clock-synchro=300", //"--network-synchronisation", //"--cr-average=10000" // }; //options = new string[] { "-I", "dummy", "--network-caching=<300", ":sout=#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100" }; //canvas.Children.Add(vlcControl1); //canvas.Children.Add(vlcControl2); } public void LoadProg(double width, double height, backgroundMaterialInfo backgroundmaterial, string backgroundcolor, List componentList) { Canvas canvas = new Canvas(); Class_Log log = new Class_Log(); canvas.Visibility = Visibility.Hidden; backgroundMaterial = backgroundmaterial; backgroundColor = backgroundcolor; components = componentList; this.Width = width; this.Height = height; canvas.Width = width; canvas.Height = height; DisposeNew(); try { outLinePath = AppDomain.CurrentDomain.BaseDirectory + "/OutlineFiles"; if (backgroundMaterial != null) { string fileExtension = string.Empty; if (backgroundMaterial.filePath.Contains("?")) { fileExtension = backgroundMaterial.filePath.Substring(backgroundMaterial.filePath.LastIndexOf("."), backgroundMaterial.filePath.LastIndexOf("?") - backgroundMaterial.filePath.LastIndexOf(".")).ToLower(); } else { fileExtension = backgroundMaterial.filePath.Substring(backgroundMaterial.filePath.LastIndexOf(".")).ToLower(); } string url = outLinePath + "/Main/" + backgroundMaterial.fileHash + fileExtension; if (File.Exists(url)) { Image image = new Image();//新建图片对象 image.Source = new BitmapImage(new Uri(url));//读取图片 ImageBrush ib = new ImageBrush();//新建图片对象 ib.ImageSource = image.Source;//赋值为背景图片 canvas.Background = ib;//将图片对象赋值给Canvas的Background } } else if (!string.IsNullOrEmpty(backgroundColor)) { Color color = (Color)ColorConverter.ConvertFromString(backgroundColor); canvas.Background = new SolidColorBrush(color); } int vlcCount = 0; isStop = false; foreach (var item in components) { if ((item.materials == null || item.materials.Count == 0) && (item.typeCode == "text" || item.typeCode == "image" || item.typeCode == "video"||item.typeCode== "audio" || item.typeCode == "html" || item.typeCode == "url")) { continue; } if (item.typeCode == "image") { Image image = new Image(); image.Width = item.width; image.Height = item.height; imageControls.Add(image); canvas.Children.Add(image); Canvas.SetLeft(image, item.offsetX); Canvas.SetZIndex(image, item.zIndex); Canvas.SetTop(image, item.offsetY); image.Stretch = Stretch.Fill; PlayImage(image, item.materials, item.config); } if (item.typeCode == "video"&& item.materials.Count>0) { //if (item.materials.Count > 1) //{ // //TransitionElement element = new TransitionElement(); // //MediaElement media = new MediaElement(); // //media.LoadedBehavior = MediaState.Manual; // Canvas canvasM = new Canvas(); // canvasM.Width = item.width; // canvasM.Height = item.height; // canvasM.Background = Brushes.Black; // //media.Width = item.width; // //media.Height = item.height; // //media.Stretch = Stretch.Fill; // //element.Width = item.width; // //element.Height = item.height; // //element.Content = media; // //canvasM.Children.Add(element); // Canvas.SetLeft(canvasM, item.offsetX); // Canvas.SetZIndex(canvasM, item.zIndex); // Canvas.SetTop(canvasM, item.offsetY); // canvas.Children.Add(canvasM); // canvasWebBrowsers.Add(canvasM); // //mediaElements.Add(media); // PlayVideo(canvasM, item.materials, item.config, 1); // //media.Volume = 1; //} if (item.materials.Count > 1) { int curIndex = 1; string fileExtension = string.Empty; string url = string.Empty; if (item.materials[curIndex].fileUrl.Contains("?")) { fileExtension = item.materials[curIndex-1].fileUrl.Substring(item.materials[curIndex-1].fileUrl.LastIndexOf("."), item.materials[curIndex-1].fileUrl.LastIndexOf("?") - item.materials[curIndex-1].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = item.materials[curIndex-1].fileUrl.Substring(item.materials[curIndex-1].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + item.materials[curIndex-1].fileHash + fileExtension; Canvas canvasM = new Canvas(); canvasM.Width = item.width; canvasM.Height = item.height; canvasM.Background = Brushes.Transparent; string fileExtension1 = string.Empty; string url1 = string.Empty; if (item.materials[curIndex].fileUrl.Contains("?")) { fileExtension1 = item.materials[curIndex].fileUrl.Substring(item.materials[curIndex].fileUrl.LastIndexOf("."), item.materials[curIndex].fileUrl.LastIndexOf("?") - item.materials[curIndex].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension1 = item.materials[curIndex].fileUrl.Substring(item.materials[curIndex].fileUrl.LastIndexOf(".")).ToLower(); } url1 = outLinePath + "/Main/" + item.materials[curIndex].fileHash + fileExtension1; MediaElement media = new MediaElement(); MediaElement media1 = new MediaElement(); media.MediaEnded += new RoutedEventHandler((send, e) => { string fileExtensionCur = string.Empty; string urlCur = string.Empty; List hashList = item.materials.Select(i => i.fileHash).ToList(); string curUrl = media.Source.ToString(); string curHash = curUrl.Substring(curUrl.LastIndexOf("/")+1, curUrl.LastIndexOf(".") - curUrl.LastIndexOf("/")-1); curIndex= hashList.ToList().IndexOf(curHash); if (curIndex + 2 >= item.materials.Count) { curIndex = curIndex + 2 - item.materials.Count; } else { curIndex = curIndex + 2; } //if (curIndex >= item.materials.Count) //{ // curIndex = 0; //} if (item.materials[curIndex].fileUrl.Contains("?")) { fileExtensionCur = item.materials[curIndex].fileUrl.Substring(item.materials[curIndex].fileUrl.LastIndexOf("."), item.materials[curIndex].fileUrl.LastIndexOf("?") - item.materials[curIndex].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtensionCur = item.materials[curIndex].fileUrl.Substring(item.materials[curIndex].fileUrl.LastIndexOf(".")).ToLower(); } urlCur = outLinePath + "/Main/" + item.materials[curIndex].fileHash + fileExtension; media1.Play(); Thread.Sleep(500); Canvas.SetZIndex(media1, 2); Canvas.SetZIndex(media, 0); Canvas.SetZIndex(media1, 1); media.Source = new Uri(urlCur); media.Play(); //media.Position = new TimeSpan(0, 0, 0, 0, 100); media.Pause(); // media.Position = new TimeSpan(0, 0, 0, 0, 100); //curIndex++; }); media1.MediaEnded += new RoutedEventHandler((send, e) => { string fileExtensionCur = string.Empty; string urlCur = string.Empty; List hashList = item.materials.Select(i => i.fileHash).ToList(); string curUrl = media1.Source.ToString(); string curHash = curUrl.Substring(curUrl.LastIndexOf("/") + 1, curUrl.LastIndexOf(".") - curUrl.LastIndexOf("/") - 1); curIndex = hashList.ToList().IndexOf(curHash); if (curIndex + 2 >= item.materials.Count) { curIndex = curIndex + 2 - item.materials.Count; } else { curIndex = curIndex + 2; } //if (curIndex >= item.materials.Count) //{ // curIndex = 0; //} if (item.materials[curIndex].fileUrl.Contains("?")) { fileExtensionCur = item.materials[curIndex].fileUrl.Substring(item.materials[curIndex].fileUrl.LastIndexOf("."), item.materials[curIndex].fileUrl.LastIndexOf("?") - item.materials[curIndex].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtensionCur = item.materials[curIndex].fileUrl.Substring(item.materials[curIndex].fileUrl.LastIndexOf(".")).ToLower(); } urlCur = outLinePath + "/Main/" + item.materials[curIndex].fileHash + fileExtension; media.Play(); Thread.Sleep(500); Canvas.SetZIndex(media, 2); Canvas.SetZIndex(media1, 0); Canvas.SetZIndex(media, 1); media1.Source = new Uri(urlCur); media1.Play(); //media.Position = new TimeSpan(0, 0, 0, 0, 100); media1.Pause(); // media.Position = new TimeSpan(0, 0, 0, 0, 100); //curIndex++; }); media.LoadedBehavior = MediaState.Manual; media.Stretch = Stretch.Fill; media.Width = item.width; media.Height = item.height; media.Source = new Uri(url); media1.LoadedBehavior = MediaState.Manual; media1.Stretch = Stretch.Fill; media1.Width = item.width; media1.Height = item.height; media1.Source = new Uri(url1); media1.Play(); media1.Pause(); canvasM.Children.Add(media); canvasM.Children.Add(media1); Canvas.SetZIndex(media, 1); Canvas.SetZIndex(media1, 0); Canvas.SetLeft(canvasM, item.offsetX); Canvas.SetZIndex(canvasM, item.zIndex); Canvas.SetTop(canvasM, item.offsetY); canvas.Children.Add(canvasM); canvasWebBrowsers.Add(canvasM); mediaElements.Add(media); media.Play(); curIndex=2; //PlayVideo(media, item.materials, item.config, 1); } else if (item.materials.Count == 1) { string fileExtension = string.Empty; string url = string.Empty; if (item.materials[0].fileUrl.Contains("?")) { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf("."), item.materials[0].fileUrl.LastIndexOf("?") - item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + item.materials[0].fileHash + fileExtension; MediaElement media = new MediaElement(); media.MediaEnded += new RoutedEventHandler((send, e) => { media.Position = new TimeSpan(0,0,0,0,100); }); media.LoadedBehavior = MediaState.Manual; media.Stretch = Stretch.Fill; media.Source = new Uri(url); Canvas canvasM = new Canvas(); canvasM.Width = item.width; canvasM.Height = item.height; canvasM.Background = Brushes.Transparent; media.Width = item.width; media.Height = item.height; canvasM.Children.Add(media); Canvas.SetLeft(canvasM, item.offsetX); Canvas.SetZIndex(canvasM, item.zIndex); Canvas.SetTop(canvasM, item.offsetY); canvas.Children.Add(canvasM); canvasWebBrowsers.Add(canvasM); mediaElements.Add(media); media.Play(); //PlayVideo(media, item.materials, item.config, 1); media.Volume = 1; } //else if (item.materials.Count == 1) //{ // string fileExtension = string.Empty; // string url = string.Empty; // if (item.materials[0].fileUrl.Contains("?")) // { // fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf("."), item.materials[0].fileUrl.LastIndexOf("?") - item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); // } // else // { // fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); // } // url = outLinePath + "/Main/" + item.materials[0].fileHash + fileExtension; // MediaElement media = new MediaElement(); // media.LoadedBehavior = MediaState.Manual; // media.Volume = 1; // EventTrigger eventTrigger = new EventTrigger(); // eventTrigger.RoutedEvent = MediaElement.LoadedEvent; // eventTrigger.SourceName = media.Name; // BeginStoryboard begin = new BeginStoryboard(); // Storyboard storyboard = new Storyboard(); // MediaTimeline timeline = new MediaTimeline(); // //timeline.FillBehavior = FillBehavior.Stop; // timeline.Source = new Uri(url); // timeline.RepeatBehavior = RepeatBehavior.Forever; // Storyboard.SetTarget(timeline, media); // storyboard.Children.Add(timeline); // begin.Storyboard = storyboard; // eventTrigger.Actions.Add(begin); // media.Triggers.Add(eventTrigger); // Canvas canvasM = new Canvas(); // canvasM.Width = item.width; // canvasM.Height = item.height; // canvasM.Background = Brushes.Transparent; // media.Width = item.width; // media.Height = item.height; // canvasM.Children.Add(media); // Canvas.SetLeft(canvasM, item.offsetX); // Canvas.SetZIndex(canvasM, item.zIndex); // Canvas.SetTop(canvasM, item.offsetY); // canvas.Children.Add(canvasM); // canvasWebBrowsers.Add(canvasM); // mediaElements.Add(media); //} //vlcCount++; //if (vlcCount == 1) //{ // canvasM1.Width= item.width; // canvasM1.Height = item.height; // media1.Width = item.width; // media1.Height = item.height; // Canvas.SetLeft(canvasM1, item.offsetX); // Canvas.SetZIndex(canvasM1, item.zIndex); // Canvas.SetTop(canvasM1, item.offsetY); // PlayVideo(media1, item.materials, item.config, 1); //} //else //{ // canvasM2.Width = item.width; // canvasM2.Height = item.height; // media2.Width = item.width; // media2.Height = item.height; // Canvas.SetLeft(canvasM2, item.offsetX); // Canvas.SetZIndex(canvasM2, item.zIndex); // Canvas.SetTop(canvasM2, item.offsetY); // PlayVideo(media2, item.materials, item.config, 2); //} } if (item.typeCode == "text" && item.materials != null && item.materials.Count > 0) { var textBackgroundColor = item.config.Value("backgroundColor"); var textBackgroundOpacity = item.config.Value("backgroundOpacity"); var textFontColor = item.config.Value("fontColor"); var textFontSize = item.config.Value("fontSize"); var textFontStyle = item.config.Value("fontStyle"); var textAnimationSpeed = item.config.Value("animationSpeed"); string fileExtension = string.Empty; string url = string.Empty; if (item.materials[0].fileUrl.Contains("?")) { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf("."), item.materials[0].fileUrl.LastIndexOf("?") - item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + item.materials[0].fileHash + fileExtension; string textContent = DownLoadMethod.ReadContext(url); textContent = textContent.Replace("\r\n", " "); MarqueeControlNew marqueeControlNew = new MarqueeControlNew(); marqueeControlNew.Load(textContent, item.width, item.height, textFontSize, textBackgroundColor, textBackgroundOpacity, textFontColor, textFontStyle, textAnimationSpeed); canvas.Children.Add(marqueeControlNew); marqueeControlNews.Add(marqueeControlNew); Canvas.SetLeft(marqueeControlNew, item.offsetX); Canvas.SetZIndex(marqueeControlNew, item.zIndex); Canvas.SetTop(marqueeControlNew, item.offsetY); } if (item.typeCode == "clock") { var backgroundColor = item.config.Value("backgroundColor"); var fontColor = item.config.Value("fontColor"); var style = item.config.Value("style"); ClockControl clock = new ClockControl(); clock.BindClock(style.Value, item.width, item.height, backgroundColor, fontColor); canvas.Children.Add(clock); clockControls.Add(clock); Canvas.SetLeft(clock, item.offsetX); Canvas.SetZIndex(clock, item.zIndex); Canvas.SetTop(clock, item.offsetY); } if (item.typeCode == "weather") { var backgroundColor = item.config.Value("backgroundColor"); var fontColor = item.config.Value("fontColor"); var style = item.config.Value("style"); var city = item.config.Value("cityName"); if (string.IsNullOrEmpty(city)) { city = app.defaultCity; } if (!string.IsNullOrEmpty(city)) { WeatherControl weather = new WeatherControl(); weather.LoadWeather(city, style.Value, item.width, item.height, backgroundColor, fontColor); canvas.Children.Add(weather); weatherControls.Add(weather); Canvas.SetLeft(weather, item.offsetX); Canvas.SetZIndex(weather, item.zIndex); Canvas.SetTop(weather, item.offsetY); } } if (item.typeCode == "audio" && item.materials != null && item.materials.Count > 0) { MediaPlayer media = new MediaPlayer(); string fileExtension = string.Empty; string url = string.Empty; if (item.materials[0].fileUrl.Contains("?")) { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf("."), item.materials[0].fileUrl.LastIndexOf("?") - item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + item.materials[0].fileHash + fileExtension; media.Open(new Uri(url, UriKind.Relative)); media.MediaEnded += (sender, e) => {//播放结束后 又重新播放 media.Position = new TimeSpan(0); }; media.Play(); mediaControls.Add(media); } if (item.typeCode == "html" && item.materials != null && item.materials.Count > 0) { string fileExtension = string.Empty; string url = string.Empty; if (item.materials[0].fileUrl.Contains("?")) { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf("."), item.materials[0].fileUrl.LastIndexOf("?") - item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + item.materials[0].fileHash + fileExtension; ChromiumWebBrowser webBrowser = new ChromiumWebBrowser(); webBrowser.Width = item.width; webBrowser.Height = item.height; webBrowser.Address = url.Replace(@"/", @"\").Replace(@"\\",@"\") ; //webBrowser.GetBrowser().Reload(); //webBrowser.Address = "file:///D:/360MoveData/Users/jiaxl/Desktop/Websocket.html"; webBrowser.Background = Brushes.Black; Canvas canvas1 = new Canvas(); canvas1.Width = item.width; canvas1.Height = item.height; canvas1.Background = Brushes.White; canvas1.Children.Add(webBrowser); //webBrowser.Load(url); canvas.Children.Add(canvas1); canvasWebBrowsers.Add(canvas1); chromiumWebBrowsers.Add(webBrowser); Canvas.SetLeft(canvas1, item.offsetX); Canvas.SetZIndex(canvas1, item.zIndex); Canvas.SetTop(canvas1, item.offsetY); } if (item.typeCode == "url" && item.materials != null && item.materials.Count > 0 && item.materials[0].mediaInfo != null && !string.IsNullOrEmpty(item.materials[0].mediaInfo.url)) { ChromiumWebBrowser webBrowser = new ChromiumWebBrowser(); webBrowser.Width = item.width; webBrowser.Height = item.height; webBrowser.Address = item.materials[0].mediaInfo.url; webBrowser.Background = Brushes.Black; Canvas canvas1 = new Canvas(); canvas1.Width = item.width; canvas1.Height = item.height; canvas1.Background = Brushes.White; canvas1.Children.Add(webBrowser); //webBrowser.Load(url); canvas.Children.Add(canvas1); canvasWebBrowsers.Add(canvas1); chromiumWebBrowsers.Add(webBrowser); Canvas.SetLeft(canvas1, item.offsetX); Canvas.SetZIndex(canvas1, item.zIndex); Canvas.SetTop(canvas1, item.offsetY); } } } catch (Exception ex) { Class_Log _Log = new Class_Log(); _Log.WriteLogFile(ex.ToString()); } canvasMain.Children.Add(canvas); canvas.Visibility = Visibility.Visible; if (canvasMain.Children.Count > 1) { canvasMain.Children[0].Visibility = Visibility.Hidden; } } //private void PlayImage(Image image, List materials, JObject config) //{ // CancellationTokenSource source1 = new CancellationTokenSource(); // cancellationTokens.Add(source1); // CancellationToken token = source1.Token; // TaskFactory factory = new TaskFactory(token); // Task tsk1 = factory.StartNew(() => // { // var curPlayIndex = 0; // var transitionPeriod = config.Value("transitionPeriod"); // var transition = config.Value("transition"); // string fileExtension = string.Empty; // string url = string.Empty; // DateTime? curDate = null; // while (!isStop) // { // if (token.IsCancellationRequested) // { // //isStop = true; // // 释放资源操作等等... // break; // } // if (!curDate.HasValue||curDate.Value.AddMilliseconds(transitionPeriod * 1000) <= DateTime.Now) // { // if (materials[curPlayIndex].fileUrl.Contains("?")) // { // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf("."), materials[curPlayIndex].fileUrl.LastIndexOf("?") - materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // } // else // { // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // } // curDate = DateTime.Now; // url = outLinePath + "/Main/" + materials[curPlayIndex].fileHash + fileExtension; // BindImage(image, url, transition); // curPlayIndex++; // if (curPlayIndex >= materials.Count) // { // curPlayIndex = 0; // } // } // else // { // Thread.Sleep(1); // } // } // }); // //var thImage = new Thread(new ThreadStart(async () => // //{ // // var curPlayIndex = 0; // // var transitionPeriod = config.Value("transitionPeriod"); // // var transition = config.Value("transition"); // // string fileExtension = string.Empty; // // string url = string.Empty; // // while (!isStop) // // { // // if (materials[curPlayIndex].fileUrl.Contains("?")) // // { // // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf("."), materials[curPlayIndex].fileUrl.LastIndexOf("?") - materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // // } // // else // // { // // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // // } // // url = outLinePath + "/Main/" + materials[curPlayIndex].fileHash + fileExtension; // // BindImage(image, url, transition); // // curPlayIndex++; // // if (curPlayIndex >= materials.Count) // // { // // curPlayIndex = 0; // // } // // var taskProg = Task.Delay(transitionPeriod * 1000); // // tasks.Add(taskProg); // // await taskProg; // // if (taskProg != null && taskProg.Status != TaskStatus.Canceled) // // { // // taskProg.Dispose(); // // tasks.Remove(taskProg); // // } // // } // //})); // //thImage.IsBackground = true; // //thImage.Start(); //} private void PlayImage(Image image, List materials, JObject config) { CancellationTokenSource source1 = new CancellationTokenSource(); cancellationTokens.Add(source1); CancellationToken token = source1.Token; TaskFactory factory = new TaskFactory(token); Task tsk1 = factory.StartNew(async () => { var curPlayIndex = 0; var transitionPeriod = config.Value("transitionPeriod"); var transition = config.Value("transition"); string fileExtension = string.Empty; string url = string.Empty; DateTime? curDate = null; while (!isStop) { if (token.IsCancellationRequested) { //isStop = true; // 释放资源操作等等... break; } //if (!curDate.HasValue || curDate.Value.AddMilliseconds(transitionPeriod * 1000) <= DateTime.Now) //{ if (materials[curPlayIndex].fileUrl.Contains("?")) { fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf("."), materials[curPlayIndex].fileUrl.LastIndexOf("?") - materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); } curDate = DateTime.Now; url = outLinePath + "/Main/" + materials[curPlayIndex].fileHash + fileExtension; BindImage(image, url, transition); curPlayIndex++; if (curPlayIndex >= materials.Count) { curPlayIndex = 0; } if (token.IsCancellationRequested) { //isStop = true; // 释放资源操作等等... break; } else { await Task.Delay(transitionPeriod * 1000, token); } //} //else //{ // Thread.Sleep(1); //} } }); } private void BindImage(Image image, string img, string transition) { Action action = new Action(()=> { image.Dispatcher.Invoke(new Action(() => { if (img.ToLower().EndsWith(".gif")) { //FileStream stream = new FileStream(img, FileMode.Open, FileAccess.Read); //XamlAnimatedGif.AnimationBehavior.SetSourceStream(image, stream); //FileStream s = new FileStream(outLinePath + "/Main/" + ucList[app.currentIndex].sourceId + fileExtension, FileMode.Open, FileAccess.Read); XamlAnimatedGif.AnimationBehavior.SetSourceUri(image, new Uri(img)); XamlAnimatedGif.AnimationBehavior.SetRepeatBehavior(image, RepeatBehavior.Forever); XamlAnimatedGif.AnimationBehavior.SetAutoStart(image, true); } else { image.Source = new BitmapImage(new Uri(img)); } })); }); action.BeginInvoke(null,null); } private void PlayVideo(Canvas canvasM, List materials, JObject config,int type) { Action action = new Action(async delegate { try { Class_Log log = new Class_Log(); //if (th1 == null) //{ CancellationTokenSource source1 = new CancellationTokenSource(); cancellationTokens.Add(source1); CancellationToken token = source1.Token; TaskFactory factory = new TaskFactory(token); Task tsk1 = factory.StartNew(async () => { var curPlayIndex = 0; string fileExtension = string.Empty; string url = string.Empty; var curDate = DateTime.Now; var duration = 0; while (!isStop) { if (token.IsCancellationRequested) { //isStop = true; // 释放资源操作等等... break; } //log.WriteLogFile("-----curDate" + curDate.ToString("yyyy-MM-dd HH:mm:ss") + " url=" + url + " duration=" + duration); //if (curDate.AddMilliseconds(duration) <= DateTime.Now) //{ if (materials[curPlayIndex].fileUrl.Contains("?")) { fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf("."), materials[curPlayIndex].fileUrl.LastIndexOf("?") - materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + materials[curPlayIndex].fileHash + fileExtension; duration = materials[curPlayIndex].duration; //log.WriteLogFile("curDate" + curDate.ToString("yyyy-MM-dd HH:mm:ss") + " url=" + url + " duration=" + duration); curDate = DateTime.Now; //StopVideo(media); log.WriteLogFile("播放","sssss"); StartVideo(canvasM, url); curPlayIndex++; if (curPlayIndex >= materials.Count) { curPlayIndex = 0; } //var taskProg = Task.Delay(duration); //tasks.Add(taskProg); //await taskProg; //if (taskProg != null && taskProg.Status != TaskStatus.Canceled) //{ // taskProg.Dispose(); // tasks.Remove(taskProg); //} //if (token.IsCancellationRequested) //{ // //isStop = true; // // 释放资源操作等等... // break; //} //else //{ await Task.Delay(duration - 5000, token); // } //} //else //{ // Thread.Sleep(1); //} //Thread.Sleep(duration); } }); //var thVideo = new Thread(new ThreadStart(async () => // { // var curPlayIndex = 0; // string fileExtension = string.Empty; // string url = string.Empty; // while (!isStop) // { // if (materials[curPlayIndex].fileUrl.Contains("?")) // { // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf("."), materials[curPlayIndex].fileUrl.LastIndexOf("?") - materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // } // else // { // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // } // url = outLinePath + "/Main/" + materials[curPlayIndex].fileHash + fileExtension; // int duration = materials[curPlayIndex].duration; // StartVideo(vlcControl, url); // curPlayIndex++; // if (curPlayIndex >= materials.Count) // { // curPlayIndex = 0; // } // var taskProg = Task.Delay(duration); // tasks.Add(taskProg); // await taskProg; // if (taskProg != null && taskProg.Status != TaskStatus.Canceled) // { // taskProg.Dispose(); // tasks.Remove(taskProg); // } // //Thread.Sleep(duration); // } // })); //thVideo.IsBackground = true; //thVideo.Start(); //} } catch (Exception ex) { Class_Log log = new Class_Log(); log.WriteLogFile(ex.ToString(), "WindowViewErrorlog"); } }); action.BeginInvoke(null, null); } private void StartVideo(Canvas canvasM, string videoPath) { try { Class_Log log = new Class_Log(); //media1.Position = new TimeSpan(0, 0, 0, 100); //Thread.Sleep(100); canvasM.Dispatcher.Invoke(new Action(() => { MediaElement media1 = new MediaElement(); media1.LoadedBehavior = MediaState.Manual; media1.Width = canvasM.Width; media1.Height = canvasM.Height; media1.Stretch = Stretch.Fill; //bool isStart = false; media1.Visibility = Visibility.Hidden; media1.Source = new Uri(videoPath); media1.Play(); canvasM.Children.Add(media1); Canvas.SetLeft(media1, 0); Canvas.SetTop(media1, 0); //Action action = new Action(()=> { if (canvasM.Children.Count > 1) { Thread.Sleep(5000); //media1.Position = new TimeSpan(0, 0, 0, 0, 1000); } media1.Visibility = Visibility.Visible; if (canvasM.Children.Count > 1) { Thread.Sleep(5000); int mediaCount = canvasM.Children.Count; if (mediaCount > 2) { canvasM.Children.RemoveRange(0, mediaCount - 2); } if (canvasM.Children.Count > 1) { ((MediaElement)canvasM.Children[0]).Stop(); } } //}); //action.BeginInvoke(null,null); //element.Content = media1; //media.Stop(); //media.Close(); })); //vlcControl.SourceProvider.MediaPlayer.Play(new Uri(videoPath)); } catch (Exception ex) { // MessageBox.Show(ex.Message); } } private void StopVideo(MediaElement media) { try { media.Dispatcher.Invoke(new Action(() => { media.Stop(); })); //if (vlcControl.SourceProvider.MediaPlayer.IsPlaying()) //{ // vlcControl.SourceProvider.MediaPlayer.Pause(); //} } catch (Exception e) { // MessageBox.Show(e.Message); } } private async void UserControl_Loaded(object sender, RoutedEventArgs e) { } public void DisposeNew() { try { isStop = true; foreach (var item in tasks) { if (item != null && (item.IsCanceled || item.IsCompleted || item.IsFaulted)) { item.Dispose(); } } tasks.Clear(); foreach (var item in marqueeControlNews) { item.Dispose(); } marqueeControlNews.Clear(); foreach (var item in clockControls) { item.Dispose(); } clockControls.Clear(); foreach (var item in weatherControls) { item.Dispose(); } weatherControls.Clear(); foreach (var item in cancellationTokens) { item.Cancel(); } cancellationTokens.Clear(); foreach (var item in mediaElements) { item.Stop(); } mediaElements.Clear(); foreach (var item in mediaControls) { item.Stop(); item.Close(); } mediaControls.Clear(); foreach (var item in chromiumWebBrowsers) { item.Dispose(); } chromiumWebBrowsers.Clear(); } catch (Exception e) { Class_Log _Log = new Class_Log(); _Log.WriteLogFile(e.ToString(), "prog"); } } public void Dispose() { //try //{ // isStop = true; // foreach (var item in tasks) // { // if (item != null && (item.IsCanceled || item.IsCompleted || item.IsFaulted)) // { // item.Dispose(); // } // } // tasks.Clear(); // foreach (var item in marqueeControlNews) // { // item.Dispose(); // canvas.Children.Remove(item); // } // marqueeControlNews.Clear(); // foreach (var item in clockControls) // { // item.Dispose(); // canvas.Children.Remove(item); // } // clockControls.Clear(); // foreach (var item in weatherControls) // { // item.Dispose(); // canvas.Children.Remove(item); // } // weatherControls.Clear(); // foreach (var item in cancellationTokens) // { // item.Cancel(); // } // cancellationTokens.Clear(); // foreach (var item in mediaElements) // { // item.Stop(); // } // mediaElements.Clear(); // foreach (var item in imageControls) // { // canvas.Children.Remove(item); // } // imageControls.Clear(); // foreach (var item in mediaControls) // { // item.Stop(); // item.Close(); // } // mediaControls.Clear(); // foreach (var item in chromiumWebBrowsers) // { // item.Dispose(); // canvas.Children.Remove(item); // } // chromiumWebBrowsers.Clear(); // foreach (var item in canvasWebBrowsers) // { // canvas.Children.Remove(item); // } // canvasWebBrowsers.Clear(); //} //catch (Exception e) //{ // Class_Log _Log = new Class_Log(); // _Log.WriteLogFile(e.ToString(), "prog"); //} } } }