示例#1
0
        private void FixContainer(VideoListItem item)
        {
            SetStatus(item, VideoListItemStatusEnum.Converting);
            string SrcFile = Settings.NaturalGroundingFolder + item.FileName;

            if (item.FileName != null && File.Exists(SrcFile))
            {
                FFmpegProcess FileInfo = MediaInfo.GetFileInfo(SrcFile);
                string        Ext1     = Path.GetExtension(item.FileName).ToLower();
                string        Ext2     = DownloadBusiness.GetFinalExtension(FileInfo.VideoStream?.Format, FileInfo.AudioStream?.Format);
                if ((Ext2 == ".mp4" || Ext2 == ".webm") && Ext1 != Ext2)
                {
                    string DstFile = item.FileName.Substring(0, item.FileName.Length - Ext1.Length) + Ext2;
                    if (MediaMuxer.Muxe(SrcFile, SrcFile, Settings.NaturalGroundingFolder + DstFile) == CompletionStatus.Success)
                    {
                        FileOperationAPIWrapper.MoveToRecycleBin(SrcFile);
                        // Change database binding.
                        EditVideoBusiness Business     = new EditVideoBusiness();
                        Media             ExistingData = Business.GetVideoById(item.MediaId.Value);
                        if (ExistingData != null)
                        {
                            // Edit video info.
                            ExistingData.FileName = DstFile;
                            Business.Save();
                            SetStatus(item, VideoListItemStatusEnum.Done);
                            return;
                        }
                    }
                }
            }
            SetStatus(item, VideoListItemStatusEnum.Failed);
        }
示例#2
0
 public async Task StartScan(List <VideoListItem> selection, CancellationToken cancel)
 {
     await selection.ForEachAsync(5, cancel, async item => {
         Media VideoData = PlayerAccess.GetVideoById(item.MediaId.Value);
         if (VideoData != null && !item.IsBusy)
         {
             try {
                 // Query the server for media info.
                 SetStatus(item, VideoListItemStatusEnum.DownloadingInfo);
                 VideoInfo VInfo = await DownloadManager.GetDownloadInfoAsync(VideoData.DownloadUrl);
                 if (VInfo != null)
                 {
                     // Get the highest resolution format.
                     BestFormatInfo VideoFormat = DownloadBusiness.SelectBestFormat(VInfo.Streams);
                     if (VideoFormat == null || VideoFormat.BestVideo == null)
                     {
                         SetStatus(item, VideoListItemStatusEnum.Failed);
                     }
                     else
                     {
                         SetStatus(item, await IsHigherQualityAvailable(VideoFormat, Settings.NaturalGroundingFolder + VideoData.FileName));
                     }
                     if (VideoFormat != null && !string.IsNullOrEmpty(VideoFormat.StatusText))
                     {
                         SetStatus(item, item.Status, item.StatusText + string.Format(" ({0})", VideoFormat.StatusText));
                     }
                 }
                 else
                 {
                     SetStatus(item, VideoListItemStatusEnum.InvalidUrl);
                 }
             }
             catch {
                 SetStatus(item, VideoListItemStatusEnum.Failed);
             }
         }
     });
 }