public byte[] GetThumbnail( string originalPath, string ffmpegFolder, MediaClassification mediaClassification, long originalLastChanged, out bool foundInCache) { Log.Logger.Debug($"Getting thumbnail: {originalPath}"); byte[] result = _databaseService.GetThumbnailFromCache(originalPath, originalLastChanged); if (result != null) { Log.Logger.Verbose("Found thumbnail in cache"); foundInCache = true; return(result); } try { result = GenerateThumbnail(originalPath, ffmpegFolder, mediaClassification); if (result != null) { _databaseService.AddThumbnailToCache(originalPath, originalLastChanged, result); } } catch (Exception ex) { Log.Logger.Error(ex, $"Could not get a thumbnail for {originalPath}"); result = _standardUnknownThumbnail.Value; } foundInCache = false; return(result); }
public Task Play(Uri mediaPath, MediaClassification mediaClassification) { _currentMediaClassification = mediaClassification; if (_currentMediaClassification == MediaClassification.Audio) { if (!IsPaused) { _audioPlayer.Value.Open(mediaPath); } IsPaused = false; _audioPlayer.Value.Play(); } else { IsPaused = false; if (_mediaElement.Source != mediaPath) { _mediaElement.Source = mediaPath; } _mediaElement.Play(); } _timer.Start(); return(Task.CompletedTask); }
private byte[] GenerateThumbnail( string originalPath, string ffmpegFolder, MediaClassification mediaClassification) { Log.Logger.Debug("Generating thumbnail"); switch (mediaClassification) { case MediaClassification.Image: return(GraphicsUtils.CreateThumbnailOfImage(originalPath, MaxPixelDimension, ImageFormat.Jpeg)); case MediaClassification.Video: var tempFile = GraphicsUtils.CreateThumbnailForVideo( originalPath, ffmpegFolder, _optionsService.Options.EmbeddedThumbnails); if (string.IsNullOrEmpty(tempFile)) { return(null); } return(File.ReadAllBytes(tempFile)); case MediaClassification.Audio: return(_standardAudioThumbnail.Value); case MediaClassification.Slideshow: return(GetSlideshowThumbnail(originalPath)); default: return(null); } }
public MediaMetaData GetMetaData(string mediaItemFilePath, MediaClassification mediaType) { MediaMetaData result = null; try { using (var tf = TagLib.File.Create(mediaItemFilePath)) { tf.Mode = TagLib.File.AccessMode.Read; result = new MediaMetaData { Title = StripNewLines(tf.Tag?.Title), Duration = tf.Properties.Duration }; } } catch (System.IO.IOException) { Log.Logger.Error($"Could not get metadata from file: {mediaItemFilePath} (in use)"); } catch (Exception ex) { Log.Logger.Error(ex, $"Could not get metadata from file: {mediaItemFilePath}"); } return(result); }
private MediaEventArgs CreateMediaEventArgs(Guid id, MediaClassification mediaClassification, MediaChange change) { if (id == Guid.Empty) { return(null); } return(new MediaEventArgs { MediaItemId = id, Classification = mediaClassification, Change = change }); }
private void UnplaceImage( Guid mediaItemId, MediaClassification mediaClassification, ImageFadeType fadeType, Action <Guid, MediaClassification> stopping, Action <Guid, MediaClassification> stopped) { var fadeTime = _optionsService.Options.ImageFadeSpeed.GetFadeSpeedSeconds(); stopping?.Invoke(mediaItemId, mediaClassification); if (_image1MediaItemId == mediaItemId) { if ((int)_image1.GetValue(Panel.ZIndexProperty) == 1) { HideImageInControl( _image1, fadeType, fadeTime, () => { stopped?.Invoke(mediaItemId, mediaClassification); _image1MediaItemId = Guid.Empty; _mediaClassification1 = MediaClassification.Unknown; }); } } if (_image2MediaItemId == mediaItemId) { if ((int)_image2.GetValue(Panel.ZIndexProperty) == 1) { HideImageInControl( _image2, fadeType, fadeTime, () => { stopped?.Invoke(mediaItemId, mediaClassification); _image2MediaItemId = Guid.Empty; _mediaClassification2 = MediaClassification.Unknown; }); } } }
public async Task ShowVideoOrPlayAudio( string mediaItemFilePath, ScreenPosition screenPosition, Guid mediaItemId, MediaClassification mediaClassification, TimeSpan startOffset, bool startFromPaused) { _mediaItemId = mediaItemId; _mediaItemFilePath = mediaItemFilePath; Log.Debug($"ShowVideoOrPlayAudio - Media Id = {_mediaItemId}"); _mediaClassification = mediaClassification; _startPosition = startOffset; _lastPosition = TimeSpan.Zero; ScreenPositionHelper.SetScreenPosition(_mediaElement.FrameworkElement, screenPosition); ScreenPositionHelper.SetSubtitleBlockScreenPosition(_subtitleBlock, screenPosition); _mediaElement.MediaItemId = mediaItemId; if (startFromPaused) { _mediaElement.Position = _startPosition; await _mediaElement.Play(new Uri(mediaItemFilePath), _mediaClassification); OnMediaChangeEvent(CreateMediaEventArgs(_mediaItemId, MediaChange.Started)); await CreateSubtitleProvider(mediaItemFilePath, startOffset); } else { Log.Debug($"Firing Started - Media Id = {_mediaItemId}"); await CreateSubtitleFile(mediaItemFilePath); await _mediaElement.Play(new Uri(mediaItemFilePath), _mediaClassification).ConfigureAwait(true); OnMediaChangeEvent(CreateMediaEventArgs(_mediaItemId, MediaChange.Starting)); } }
public MediaElementMediaFoundation( MediaElement mediaElement, IOptionsService optionsService) { _currentMediaClassification = MediaClassification.Unknown; _optionsService = optionsService; _audioPlayer = new Lazy <MediaPlayer>(MediaPlayerFactory); _mediaElement = mediaElement; _mediaElement.Volume = 1.0; _mediaElement.ScrubbingEnabled = optionsService.AllowVideoScrubbing; _mediaElement.MediaOpened += HandleMediaOpened; _mediaElement.MediaEnded += HandleMediaEnded; _mediaElement.MediaFailed += HandleMediaFailed; _timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(60) }; _timer.Tick += TimerFire; }
public void Add(Guid mediaItemId, MediaClassification classification) { _currentMedia[mediaItemId] = classification; }
private void PlaceImage( Guid mediaItemId, MediaClassification mediaClassification, string imageFilePath, bool isBlankScreenImage, ImageFadeType fadeType, Action <Guid, MediaClassification> onStarting, Action <Guid, MediaClassification> onStopping, Action <Guid, MediaClassification> onStopped, Action <Guid, MediaClassification> onStarted) { var fadeTime = _optionsService.Options.ImageFadeSpeed.GetFadeSpeedSeconds(); onStarting?.Invoke(mediaItemId, mediaClassification); if (!Image1Populated) { onStopping?.Invoke(_image2MediaItemId, _mediaClassification2); ShowImageInternal( isBlankScreenImage, _optionsService.Options.ImageScreenPosition, imageFilePath, _image1, _image2, fadeType, fadeTime, () => { onStopped?.Invoke(_image2MediaItemId, _mediaClassification2); _image2MediaItemId = Guid.Empty; _mediaClassification2 = MediaClassification.Unknown; }, () => { _image1MediaItemId = mediaItemId; _mediaClassification1 = mediaClassification; onStarted?.Invoke(_image1MediaItemId, _mediaClassification1); }); } else if (!Image2Populated) { onStopping?.Invoke(_image1MediaItemId, _mediaClassification1); ShowImageInternal( isBlankScreenImage, _optionsService.Options.ImageScreenPosition, imageFilePath, _image2, _image1, fadeType, fadeTime, () => { onStopped?.Invoke(_image1MediaItemId, _mediaClassification1); _image1MediaItemId = Guid.Empty; _mediaClassification1 = MediaClassification.Unknown; }, () => { _image2MediaItemId = mediaItemId; _mediaClassification2 = mediaClassification; onStarted?.Invoke(_image2MediaItemId, _mediaClassification2); }); } }