Improved: Delete legacy folders and left-over temporary files under GleamTechConfiguration.TemporaryFolder on startup.
Improved: Instead of mysterious BadImageFormatException when loading native DLLs, this explanatory
exception will be thrown until we support ARM architecture:
VideoUltimate requires "x64" or "x86" as process architecture. Current process architecture is "Arm64".
Changed: License keys are changed so please go to https://www.gleamtech.com/upgrade and acquire a new license
key if you want to use this version (or higher). If your one year maintenance has not ended, you will receive a
new free license key on the same page.
Changed: AssemblyVersion is changed so recompile your project against the new DLLs (drop in to bin folder will not work).
Improved: Stability and performance of video processing and video formats.
Changed: VideoFrameReader.CurrentFrameNumber from int to long.
The property now gets the number of frames returned from the decoder so far.
The counter is not incremented if encoding resulted in an error.
Note that if you seek the video, the counter will be reset.
Improved: Updated GleamTech.Common.
Improved: Updated GleamTech.Common.
Improved: Updated GleamTech.Common.
Improved: Used 9.0 to be able to inject module initializers.
For example CheckTargetFramework method will throw error like below (some users still reference wrong DLLs):
PlatformNotSupportedException: You currently referenced netstandard2.0 version of GleamTech.Common.dll which is
not targeted for current runtime: .NET Framework 4.8.9139.0.
Please reference net472 versions of GleamTech DLLs (found in folder Bin\net472) for .NET Framework 4.7.2+ projects.
Improved: Stability of AssemblyResolver.
Ensured old log files are cleared, e.g. AssemblyResolver-xx.log and GleamTech-xx.log files.
Changed: AssemblyVersion is changed so recompile your project against the new DLLs (drop in to bin folder will not work).
Improved: Updated GleamTech.Common.
Improved: Updated GleamTech.Common.
Improved: Updated GleamTech.Common.
Added: Implemented GleamTech.Drawing namespace to replace System.Drawing.
Starting with .NET 6, System.Drawing.Common is not supported on non-Windows platforms,
so dropped dependency to System.Drawing.Common package
for GleamTech.VideoUltimate and GleamTech.Common:
Implemented GleamTech.Drawing.Image class which
Can load and save file formats Jpg, Png, Gif, WebP, Bmp, Tga, Pbm, Tiff
Can handle multi-frame Tiff and Gif images
Can resize, crop, rotate, flip, clone, import/export pixel data, draw text, provide detailed image info
Can be explicitly cast from/to (via cast operator or via extension methods) other image libraries:
System.Drawing.Bitmap, System.Drawing.Image
SixLabors.ImageSharp.Image
SkiaSharp.SKBitmap, SkiaSharp.SKImage
Microsoft.Maui.Graphics.Platform.PlatformImage
Implemented GleamTech.Drawing.Color struct which
Can convert from/to html color codes #RRGGBB or #RRGGBBAA (or short codes #RGB or #RGBA)
Can convert from/to named colors
Can be implicitly (automatically) cast from/to other image libraries:
System.Drawing.Color
SixLabors.ImageSharp.Color, SixLabors.ImageSharp.PixelFormats
SkiaSharp.SKColor
Microsoft.Maui.Graphics.Color
Implemented GleamTech.Drawing.Font class which
Can be implicitly (automatically) cast from/to other image libraries:
System.Drawing.Font
SixLabors.Fonts.Font
SkiaSharp.SKFont
Microsoft.Maui.Graphics.Font
Also implemented GleamTech.Drawing.Rectangle and GleamTech.Drawing.Size structs.
Changed: Return type from System.Drawing.Bitmap to GleamTech.Drawing.Image
for VideoFrameReader.GetFrame and VideoThumbnailer.GetThumbnail methods.
No changes should be needed, for example IsBlank method is now part of GleamTech.Drawing.Image class.
You can also use the new extension method ToSystemDrawingBitmap on the frame but it's recommended that
you adjust your code for the new GleamTech.Drawing.Image class which is very similar.
Added: An Action parameter named "configure" to UseGleamTech. It's more neat to set GleamTech products
related configuration in callback and it has better timing for especially web configuration:
app.UseGleamTech(() =>
{
GleamTechConfiguration.Current.LogEnabled = true;
VideoUltimateConfiguration.Current.LicenseKey = "QQJDJLJP34...";
});
Improved: ExampleExplorer:
Added "show system information" button on the top-right corner to display system information in a message box.
Show error messages for server handler methods.
Refresh page automatically when session is expired.
Fixed: Windows Server 2008 R2 SP1 and Windows 7 SP1 support was broken due to kernel32 function GetSystemTimePreciseAsFileTime
which does not exist in older OS. Rebuilt native DLLs.
Changed: .NET Framework target is changed from net461 to net472.
So from now on, you need to have a .NET Framework 4.7.2 or above project to reference our .NET Framework DLL (not related to our .netstandard2.0 DLL).
Minimum supported development environment version is changed from Visual Studio 2012 to Visual Studio 2015 (first to support net472 targeting pack).
Minimum supported deployment server OS is still Windows Server 2008 R2 SP1 (first to support net472 runtime).
Minimum supported deployment client OS is still Windows 7 SP1 (first to support net472 runtime).
Changed: GleamTechConfiguration.LogEnabled property -> The default value is now true.
GleamTech.log can be found under the temporary folder specified by GleamTechConfiguration.TemporaryFolder.
Improved: Updated GleamTech.Common.
Improved: Stability and performance of video processing and video formats.
Improved: Stability and performance of video processing and video formats.
Added: Completed migration to new FileProvider API for VideoFrameReader and VideoThumbnailer classes.
Now it's easier and more compact to read a video file from a URL, DataUrl, Database, Stream, Memory, AzureBlob, AmazonS3 etc.
See Examples section here, to see full code for new ways to read a video file:
https://docs.gleamtech.com/videoultimate/html/T_GleamTech_VideoUltimate_VideoFrameReader.htm
Improved: Updated GleamTech.Common.
Improved: Made GleamTechConfiguration.EnsureAssemblies cached (run-once) and called it first in AddGleamTech
rather than in UseGleamTech to prevent "Could not load file or assembly" errors when there are plugins like Ocelot
which scan the assembly usually in ConfigureServices.
Fixed: Unicode file names support for net461 DLL added in v3.3.0 was broken when deployed runtime was below net47.
Improved: Stability and performance of video processing and video formats.
Improved: Unicode file names should now be supported by net461 DLL just like netstandard2.0 DLL.
Changed: .NET Framework target is changed from net40 to net461.
So from now on, you need to have a .NET Framework 4.6.1 or above project to reference our .NET Framework DLL (not related to our .netstandard2.0 DLL).
Minimum supported development environment version is changed from Visual Studio 2010 to Visual Studio 2012 (first to support net461 targeting pack).
Minimum supported deployment server OS is changed from Windows Server 2003 R2 to Windows Server 2008 R2 SP1 (first to support net461 runtime).
Minimum supported deployment client OS is changed from Windows Vista to Windows 7 SP1 (first to support net461 runtime).
Improved: Example projects:
Updated AspNetCoreCS project to net5.0 (Visual Studio 2019+).
Updated AspNetCoreOnNetFullCS project to net472 and ASP.NET Core 2.2.0 (Visual Studio 2017+).
Updated AspNetMvcCS and AspNetMvcVB projects to net461 and ASP.NET MVC 5.2.7 (Visual Studio 2012+).
Updated AspNetWebFormsCS and AspNetWebFormsVB projects to net461 (Visual Studio 2012+).
Fixed HintPath attributes of elements in project files with default path "..\packages" ("Solutiondir\packages")
as msbuild never updates HintPath even if it restores packages via packages.config (even if we provide a NuGet.config).
With default path, users can restore and compile the non-SDK-style projects seamlessly on their machine.
Applies to AspNetMvcCS, AspNetMvcVB, AspNetWebFormsCS, AspNetWebFormsVB projects.
Improved: Stability and performance of video processing and video formats.
Changed: License keys are changed so please go to https://www.gleamtech.com/upgrade and acquire a new license
key if you want to use this version (or higher). If your one year maintenance has not ended, you will receive a
new free license key on the same page.
Improved: Stability of video processing.
Fixed: "Reading video frames" example in AspNetWebFormsCS and AspNetWebFormsVB projects
was broken (showed HTTP 404 error) since v2.6.0.
Improved: Updated GleamTech.Common.
Improved: Stability of video processing.
Fixed: For ASP.NET Core projects, license was being checked even for localhost in some cases (for domain restricted Professional license).
Improved: Updated docs. Licensing page now includes all details on how to use the purchased license key.
In Getting Started pages, used .NET 5 (NET Core 3.0+) syntax and put config file (appsettings.json, Web.config)
option first for Core, MVC and WebForms.
Improved: Stability of video processing.
Improved: Updated GleamTech.Common.
Improved: Updated GleamTech.Common.
Improved: Updated GleamTech.Common.
Added: .NET 5.0 support:
AspNetCoreSession will use JsonConvert instead of BinaryFormatter.
BinaryFormatter serialization methods are obsolete and prohibited in ASP.NET Core 5.
Obfuscation caused problems in .NET 5 which seems more sensitive about reflection metadata.
For example, ASP.NET Core 5.0 throws MissingMethodException -> ReflectionTypeLoadException when Assembly.DefinedTypes
is called e.g. by endpoints.MapRazorPages() or endpoints.MapControllerRoute().
Fixed: Consecutive calls to VideoThumbnailer.GetThumbnail method was crashing for some files.
The frame buffer size was not calculated correctly which caused heap corruption.
Improved: Stability of video processing.
Improved: On "ASP.NET Core on Linux", the explanatory error "VideoUltimate is currently supported only on Windows platform."
will be thrown until it's supported.
Improved: Updated AssemblyResolver (4.1.0.0) for initial Linux support (no unnecessary extraction of Windows native DLLs).
Added: VideoUltimateConfiguration.CheckPlatformSupport method which is used to check if this library is supported on current OS platform.
Throws PlatformNotSupportedException if not.
Improved: Passing maxSize parameter as 0 in VideoThumbnailer.GenerateThumbnail will produce a thumbnail in original width and height of the video.
Changed fontSize parameter default value to 0. When fontSize is 0, font size will be automatically calculated according to height.
The duration overlay will render with better opacity and with minimum 12px font size.
Added: New method overloads:
VideoFrameReader.SetFrameSize(int maxSize)
VideoThumbnailer.GenerateThumbnail(int width, int height, bool overlayDuration = false, float fontSize = 0)
Improved: VideoFrameReader.SetFrameSize(int width, int height) will throw for invalid values (negative values, or width and height zero at the same time).
Improved: Stability of video processing.
Improved: Stability of video formats and processing.
Improved: Updated GleamTech.Common.
Improved: Updated GleamTech.Common.
Improved: Unicode file name support for netstandard2.0 DLL (not possible for net40 DLL due to pinvoke restriction, stream can be used instead).
Changed: LicenseKey property will now throw error also for null values (in addition to empty string (whitespace) values in v2.1.5).
TrialExtensionKey property will now throw for null and empty string (whitespace) values.
This is useful to prevent silently falling back to trial mode when you are not aware you are passing invalid values (e.g. setting values
retrieved from an external source).
Fixed: "Unable to load file or assembly 'VideoEngine ..." error after adding VideoUltimate to a non-web project (Windows Forms, Console).The same error also happened if you did not you call AddGleamTech and UseGleamTech methods in an ASP.NET Core project.
Improved: Stability of video processing.
Added: New GleamTechConfiguration.EnsureAssemblies method which ensures GleamTech's assemblies are loaded and initialized.You may need to call this method in entry point/startup of your application, if you receive "Could not load file or assembly ..." errors.
Some DLLs are embedded inside GleamTech's DLLs and they are resolved automatically when they are requested howeverinternal AssemblyResolver should be initialized first and internal AssemblyResolver of each GleamTech DLL can be initializedonly when a type inside that DLL is accessed first. So in some cases, even a GleamTech DLL is loaded, its AssemblyResolvermay not be initialized yet (because none of its types is accessed yet). You can observe this behaviour if your applicationcalls some methods which scans assemblies for reflection purpose (reflection-only type access does not trigger DLL's module initializer),for example ASP.NET Core's endpoints.MapControllers method and SimpleInjector's RegisterMvcControllers method.So to prevent errors on those methods, you can call this method before such methods.
Note that you should not need to call this method usually for web applications, because it is handled automaticallyas we can know when the application is started by hooking up (automatically in ASP.NET Classic and when you call AddGleamTech andUseGleamTech methods in ASP.NET Core).
Changed: In previous versions, invalid values for GleamTech related configuration keys (e.g in Web.config or appsettings.json) wassilently ignored (exceptions were swallowed). From now on, invalid property values in config files will throw exceptions just like whenthey are set in code. This is especially useful for "VideoUltimate:LicenseKey" property, i.e you should instantly know if you put an invalid licensekey (empty string for "VideoUltimate:LicenseKey" property will also throw) without silently falling back to trial mode.
Fixed: Updated nuget dependencies such as "System.Drawing.Common" package (packages part of Windows Compatibility Pack) to thelatest 4.7.0 for stability.
Improved: New product icon for nuget package and docs.
Changed: Renamed nuget package to "GleamTech.VideoUltimate".
From now on, same package names will be used for both get.gleamtech.com feed and nuget.org feed (no .NuGetOrg suffix).
Please uninstall all GleamTech packages with old names and install the ones with the new names.
In Visual Studio: Go to Tools -> NuGet Package Manager -> Package Manager Console and run these commands one by one in order:
Uninstall-Package VideoUltimate -RemoveDependencies
Uninstall-Package VideoUltimate.NuGetOrg -RemoveDependencies
Install-Package GleamTech.VideoUltimate
If you are using direct DLL references, note that the dependency assembly "GleamTech.Core" is renamed to "GleamTech.Common".
So in this case, first clean your project, remove references to old assembly, add references to new assembly and build your project.
Fixed: VideoFrameReader.Seek was not seeking correctly for some files due to not including start time which could be non-zero.
Added: VideoFrameReader.Seek overload which accepts a TimeSpan.
Fixed: After seeking past EOF once, VideoFrameReader.Read kept returning false and VideoFrameReader.GetFrame keptthrowing "end of file", even if you later seeked back to a valid position.
Improved: VideoFrameReader.Duration property will now reflect the duration of the video stream only (not container).VideoFrameReader.Seek(VideoFrameReader.Duration) should always seek to the last frame.
Improved: Stability of video processing.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Added: .NET Standard 2.0 DLL/nuget target is now available. This DLL can be used with ASP.NET Core 2.0+ web applicationsand .NET Core 2.0+ console/desktop applications. This means you can now use it with "ASP.NET Core on .NET Core" projects inaddition to "ASP.NET Core on .NET Framework" which was already supported.
Added: Example project AspNetCoreCS in addition to AspNetCoreOnNetFullCS.
Changed: License keys are changed so please go to https://www.gleamtech.com/upgrade and acquire a new license keyif you want to use this version (or higher). If your one year maintenance has not ended, you will receive a new freelicense key on the same page.
Fixed: First call to VideoFrameReader.Read failed for some files (it did not happen if called after VideoFrameReader.Seek)
Improved: NetCore/NetStandard DLL coming soon (probably next release).
Improved: Handling of temporary files:
New property GleamTechConfiguration.TemporaryFolder for being able to use a different folder than the default system temporaryfolder. All GleamTech products will use the same folder (removed FileUltimateConfiguration.TemporaryPath property).When you change this property, some default folders for products will change automatically if they are subfolders of TemporaryFolder.You can set this property to have more control on temporary folder (adjusting permissions, observing size etc.).For example for web apps, you can set it to "~/App_Data/Temporary" to observe it more easily.
Under temporary folder, there will be no more subfolders for the products but there will be subfolders for the feature:
"GleamTech.Core" -> "ResourceCache""FileUltimate\ImageCache" -> "ImageCache""FileUltimate\DocumentCache" -> "DocumentCache""FileUltimate" -> removed"DocumentUltimate" -> removed"ImageUltimate" -> removed
The old subfolders will be migrated automatically.
When accessing TemporaryFolder, detailed "Access Denied" error messages will be shown to troubleshoot insufficentpermission issues. The error message will include the safe display path and current windows identity (and impersonation level).
Improved: Preparation for NetCore/NetStandard DLL.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Support for adding GleamTech assemblies to GAC (Global Assembly Cache), for example using withSharePoint On Premise will be possible. In previous versions, the integrated AssemblyResolver failedwith "Could not load file or assembly 'GleamTech.AssemblyResolver, Version=2.0.0.0, Culture=neutral,PublicKeyToken=a05198837413a6d8'" error. This is because AppDomain.AssemblyResolve event is not fired by.NET Framework (fusion) when the requesting assembly is installed to GAC. Now with a workaround, the integratedAssemblyResolver will be successfully loaded and it will resolve other assemblies.
Improved: Updated GleamTech.Core.
Improved: Stability of video processing.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Fixed: Stability of video processing.
Fixed: "Input string was not in correct format" error when setting LicenseKey property when you have an invalid version string in AssemblyFileVersion attribute of your assembly. For example using asterisk (e.g. "1.0.184.*") is not valid for AssemblyFileVersion, it's only valid for AssemblyVersion (compiler only converts asterisk to number only for this attribute). Now even if you have invalid version (non-numeric) in AssemblyFileVersion attribute, the parsing error will be ignored.
Improved: Updated GleamTech.Core.
Improved: Documentation.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Fixed: Prevented some warning messages (in yellow color) in a Console Application.
Improved: Updated video engine.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Demo projects now include default example files as "Content", so when published (e.g. to Azure) they work out of the box (no "file not found" errors), not only when debugging in Visual Studio. Prevented restoring unnecessary Nuget packages (unrelated product packages).
Improved: Updated GleamTech.Core.
Fixed: DiskCache should not throw exception when the cache folder does not exist yet. Example projects were not working out of the box due to this issue (user needed to manually create cache folder).
Fixed: When VideoFrameReader or VideoThumbnailer classes were instantiated in multi threads, occasionally (on app start) a deadlock (infinite loop) could occur. This happened due to a race condition.
Fixed: When you referenced GleamTech DLLs and you populated all types in AppDomain like this:
var allTypes = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => t.IsPublic);
You would receive this error:
Method 'Clone' in type '_hB' from assembly 'Licensing, Version=1.3.0.0, Culture=neutral, PublicKeyToken=a6f3cafa178e6038' does not have an implementation.
Licensing.dll is fixed to prevent this error.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Fixed: Still happening issue, completely fixed now: When a license key was set and debugging in Visual Studio on Windows 10 Creators Update, the opened browser hanged on forever. The issue only happened on .NET 4.7 framework which came with Windows 10 Creators Update.
Improved: Updated GleamTech.Core.
Fixed: When a license key was set and debugging in Visual Studio on Windows 10 Creators Update, the opened browser hanged on forever. The issue only happened on .NET 4.7 framework which came with Windows 10 Creators Update.
Fixed: License domain check for 3 letter domains failed as they were mistakenly treated as TLDs. Possible "Request is not available in this context" on probably earlier .net 4.0 versions when license key is set.
Improved: Updated missing descriptions (red warnings) in docs and added code samples in main classes.
Improved: Updated GleamTech.Core.
Changed: Licensing model. From now on, the license types are Professional, Enterprise and Distribution. Your existing license type (Developer, Developer OEM, Site, Site OEM) will still be valid but license keys are changed so please go to https://www.gleamtech.com/upgrade and acquire a new license key if you want to use this version (or higher). If your one year maintenance has not ended, you will receive a new license key without a charge. After your maintenance has ended, you will be able to upgrade to only new license types.
Improved: Real version will be shown in "Description" field of Visual Studio reference property window. This is the FileVersion of the DLL, Visual Studio by design shows AssemblyVersion in "Version" field of that window which confused some developers. AssemblyVersion is changed only when there is a breaking API change which requires a recompile so it's not changed often, however FileVersion is changed for every release. This way, the developer can make sure exactly which DLL version is referenced from within Visual Studio (no need to go to Windows Explorer and check file properties).
Fixed: Setting VideoUltimateConfiguration.Current.TrialExtensionKey did not have effect immediately, it was delayed for about 20 minutes.
Fixed: Unrecoverable crash for some "no picture sound only" video files with a runtime error in the Visual C++ runtime library when trying to generate a thumbnail or calling any of the methods VideoFrameReader.SetFrameWidth, SetFrameHeight, SetFrameSize. This happened when the file had no "pixel format", now a regular catchable exception will be thrown for these corrupt files.
Improved: Updated GleamTech.Core.
Fixed: Setting LicenseKey via code, did not remove trial restrictions if application was not restarted, e.g. if the code is changed in .aspx or or .asax markup this would not cause the whole application recompile & restart. Setting LicenseKey via appSettings in web.config worked because this already forces application restart.
Fixed: Still in some cases, "Could not load file or assembly" errors (yellow screen of death) when the web app first starts
Improved: Accuracy of VideoFrameReader.Seek method and also changed timeInSeconds parameter from int to double and return type to bool (it will return false instead of throwing an exception when seeking fails).
Improved: Updated video engine.
Fixed: Still in some cases, "Could not load file or assembly" errors (yellow screen of death) when the web app first starts
Fixed: Possible "Could not load file or assembly ..." errors (yellow screen of death) when the web app first starts
Improved: Updated example projects Mvc.CS and Mvc.VB from ASP.NET MVC 3 to ASP.NET MVC 4 so that they can be properly edited (no Razor warnings) in Visual Studio 2015 while keeping compatibility back to Visual Studio 2010. Also added ASP.NET MVC 4 as Nuget references so that it can be restored automatically when project is ran in Visual Studio.
Improved: Merging of DLLs. We are now using an in-house built assembly merger and resolver. The new resolver is more performant (you should notice faster startup times), reduces the memory footprint, handles error better and provides detailed logging in the temporary folder and also in VS Debug Program Output Window when attached. Also the size of the product DLL files are slightly reduced due to better compression. We will offer this new assembly merger and resolver as a new product soon.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core.
Added: Example projects (Mvc.CS, Mvc.VB, WebForms.CS, WebForms.VB) to demonstrate main features.
Fixed: FrameRate property was read out as 0 for some video codecs (eg. Prores Codec). Also more accurate FPS will be provided for all video files.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core for allowing access via IP for domain restricted licenses.
Improved: Updated video engine.
Improved: Updated GleamTech.Core.
Improved: Updated GleamTech.Core for new configuration load and save feature.
Improved: Updated GleamTech.Core.
Improved: Updated video engine.
Fixed: Updated GleamTech.Core.
Fixed: Updated GleamTech.Core for fixing license domain issue, i.e. www prefix should be considered same as the parent (e.g. contoso.com and www.contoso.com should be treated the same).
Improved: Updated video engine.
Fixed: Updated GleamTech.Core for fixing a security vulnerability.
Improved: Updated video codecs.
Fixed: Updated GleamTech.Core for fixing some routing issues.
Fixed: The duration overlay text was not aligned exactly at center of the rectangle.
Fixed: Updated GleamTech.Core for fixing some possible Json serialization problems.
Fixed: "Could not load file or assembly Microsoft.Web.Infrastructure" error on some machines.
Initial release.