- Fixed crash when creating a
WEBMRecorder
with audio on WebGL (#18). - Removed
JPGRecorder
class. UseJPEGRecorder
class instead.
- Added
CameraInput.cameras
property for inspecting recording cameras. - Fixed
ScreenInput
causing washed out colors when recording in app that uses linear rendering. - Fixed creating recorder in
MonoBehaviour.Awake
method raising exception about invalid session token. - Deprecated
CameraInput.HDR
property as it is no longer necessary to explicitly specify HDR rendering.
- Improved native error handling to prevent hard crashes.
- Fixed crash when accessing
WAVRecorder.frameSize
property on iOS and macOS. - Fixed crash when committing audio to
MP4Recorder
with free plan on iOS and macOS. - Removed
mute
flag fromAudioInput
constructor. - Moved
CropTextureInput
over to VideoKit. - Moved
WatermarkTextureInput
over to VideoKit.
- Fixed bug where invalid access key was set in the Editor after building from Unity.
- Fixed bug where builds from the Windows Editor would cause "invalid session token" errors at runtime.
- Fixed crash after importing and running NatCorder without setting a NatML access key in the Windows Editor.
- NatCorder can now be tried without an active NatML MediaKit subscription! See the docs for more details.
- Fixed
ObjectDisposedException
when committing frames inJPGRecorder
. - Refactored
JPGRecorder
toJPEGRecorder
for correctness. - NatCorder now requires iOS 14+.
- Added
WEBMRecorder
support on Android. - Added
CropTextureInput
support on WebGL. - Added
WatermarkTextureInput
support on WebGL. - Added
TextureInput.CreateDefault
static method for creating the platform-default texture input for a recorder. - Added
TextureInput.UseGLESTextureInput
static field for specifying whether to allowGLESTextureInput
inCreateDefault
. - Removed
ITextureInput
interface. UseTextureInput
class instead. - Removed
CameraInput.UseGLESTextureInput
static field. UseTextureInput.UseGLESTextureInput
instead. - Removed
CropTextureInput.letterbox
field. Aspect filling will always be performed. - Removed
CropTextureInput.background
field.
- Significantly improved recording performance on Android when using
GLESTextureInput
. - Fixed freezing for first 1-2 seconds in MP4 video recorded with audio on Android.
- Greatly improved recording performance on Windows by leveraging SIMD vectorization.
- Added full support for linear rendering.
- Added support for recording animated GIF images with transparency in
GIFRecorder
. - Added support for
WAVRecorder
on WebGL. - Fixed application hanging when finishing ultra high-resolution recording with
GLESTextureInput
on Android. - Fixed failed recording returning
null
path instead of raising exception.
- Improved general recording performance on Android.
- Fixed sporadic crash when using
GLESTextureInput
on Android.
- Added
GIFRecorder
support on WebGL. - Improved
GIFRecorder
performance on Android. - Improved
GLESTextureInput
performance on Android. - Fixed sporadic
MP4Recorder
recording failure when recording with audio on Android. - Fixed sporadic application hanging when stopping recording with OpenGL ES3 on Android.
- Refactored
CameraInput.UseAndroidGLESTextureInput
toUseGLESTextureInput
.
- Added
GLESTextureInput
texture input for accelerated video recording on Android with OpenGL ES3. - Added
CameraInput.UseAndroidGLESTextureInput
field to automatically useGLESTextureInput
to improve recording performance on Android with OpenGL ES3. - Improved native error handling to further mitigate hard crashes on Android.
- Rewrote Android implementation from scratch in C++ to improve performance and significantly reduce fatal crashes from recording errors.
- Added WebGL support with
WEBMRecorder
that records videos to the.webm
container format. - Added
ScreenInput
recorder input for recording the screen. This will typically have better performance thanCameraInput
, and can also record overlay UI canvases. - Added
IMediaRecorder.CommitFrame
overload that accepts aNativeArray<T>
. - Added
IMediaRecorder.CommitSamples
overload that accepts aNativeArray<float>
. - Added
CropTextureInput
texture input for recording a cropped video. - Added
WatermarkTextureInput
texture input for recording video with a watermark. - Fixed
AndroidJNI
compiler error inAudioInput
on Unity 2021+. - Fixed
WAVRecorder.CommitSamples
allocating memory on every call. - Refactored top-level namespace from
NatSuite.Recorders
toNatML.Recorders
.
- Improved
GIFRecorder
quality on iOS and macOS by switching to local color tables. - Added more descriptive error logging when recording fails on iOS and macOS.
- Added
CameraInput.HDR
boolean field to allow for recording post-processing effects. - Fixed native error when finishing
GIFRecorder
on iOS 15. - Fixed crash when
FinishWriting
is called without committing frames on Windows. - Reduced
JPGRecorder
memory footprint and made it thread-safe. - NatCorder now requires Unity 2020.3+.
- Added
CameraInput
constructor overloads that accept anITextureInput
in place of anIMediaRecorder
. - Added exception propagation if native recorder cannot be created, preventing hard crashes.
- Fixed AR trackable jittering in video recordings from ARFoundation.
- Removed
textureInput
property fromCameraInput
class. - Rebuilt
NatCorder.framework
in Release mode to avoid build issues when using Unity as a library. - Removed code signing on
NatCorder.framework
. Developers must code sign when building. - Removed code signing on
NatCorder.bundle
to avoid Apple Store validation errors.
- Improved recording performance on Android. NatCorder will no longer issue native GPU draw calls when encoding.
- Improved
CameraInput
memory footprint and performance. - Improved
WAVRecorder
memory footprint. - Added support for Apple Silicon on macOS.
- Added
TextureInput
andAsyncTextureInput
classes for recording video frames from textures. - Added the ability to specify the audio output bit rate on the
MP4Recorder
andHEVCRecorder
. - Added
IMediaRecorder.CommitSamples
overload which takes a pointer to a sample buffer in native memory. - Added anti-aliasing in
CameraInput
. It will use the setting defined in the project's Quality Settings. - Added Karaoke example that demonstrates recording audio to waveform files.
- Added
AudioInput
constructor overload that does not take a clock, for recorders that do not need timestamps. - Added
CameraInput
constructor overload that does not take a clock, for recorders that do not need timestamps. - Fixed crash when recorders are created on a background thread on Android.
- Fixed rare bug where recording crashes when device is running low on memory on iOS.
- Fixed rare
IllegalStateException
crash caused by video encoder on Android. - Updated
IMediaRecorder.CommitFrame
native buffer overload to use unsafevoid*
pointer instead ofIntPtr
. - Removed
FixedIntervalClock
constructor overload which accepted a timestamp interval, as it was ambiguous. - NatCorder now requires Android API level 24+.
- NatCorder now requires iOS 13+.
- NatCorder now requires macOS 10.15+.
- Improved
JPGRecorder
performance characteristics. - Fixed bug where videos recorded with audio on Android devices do not playback in Chrome.
- Moved documentation online.
- Fixed bug in
WAVRecorder
that produced corrupted recordings. - Deprecated
WebCamTextureInput
class.
- Updated top-level namespace to
NatSuite.Recorders
for parity with other NatSuite API's. - Fixed crash due to JNI local reference table overflow on Android.
- Implemented
async
pattern for recording callback usingIMediaRecorder.FinishWriting
method, greatly simplifying recording code. - Significantly improved memory consumption when recording MP4 and HEVC on Android.
- The WebGL backend has been removed. We have placed it in an independent and open-source project called WebSuite API.
- Added
WAVRecorder
for recording to waveform audio files. - Added
WebCamTextureInputAttachment
for recording video frames from aWebCamTexture
. - Added exception generation to
IMediaRecorder.FinishWriting
so that developers can handle recording failure in code. - Deprecated
IMediaRecorder.Dispose
method. - Refactored
IClock.Timestamp
toIClock.timestamp
. - Refactored
FixedIntervalClock.Interval
toFixedIntervalClock.interval
.
- Added Vulkan support on Android. Using Vulkan is strongly recommended over OpenGL ES as it offers much better recording performance.
- Added
IMediaRecorder.frameSize
tuple property. - Improved recording performance on Android.
- Improved memory consumption on Android.
- Fixed rare crash when recording is stopped on Android.
- Deprecated
IMediaRecorder.pixelWidth
andIMediaRecorder.pixelHeight
properties.
- Improved recording performance when using a
CameraInput
on Android. - Fixed first frame of recording being black on iOS and macOS.
- Fixed microphone audio being silent in ReplayCam example.
- Added
JPGRecorder
for recording to ajpg
image sequence on macOS and Windows. - Fixed sporadic crash when
CameraInput.Dispose
is called. - Fixed sporadic encoding failure when using
CameraInput
to record MP4 on iOS.
- Deprecated
RenderTextureInput
. - Fixed iOS recording colors being inverted building with Unity 2019+.
- Changed
RenderTextureInput
to take timestamp with committed frame instead of anIClock
in constructor. - Added auto-ticking to
FixedIntervalClock
. - Fixed editor hanging after recording then restarting game in Editor.
- Fixed sporadic crash when recording with a
CameraInput
orRenderTextureInput
is stopped on Android. - Fixed recording colors being inverted on some macOS builds.
- Fixed crash on Google Pixel family devices when recording with audio.
- Significantly improved recording performance on iOS and Android.
- Added
IMediaRecorder.CommitFrame (IntPtr, long)
that takes a pointer to a buffer in native memory. - Added
RenderTextureInput
helper for committing video frames fromRenderTexture
s. - Added support for
HEVCRecorder
on Android. This recorder will only work on Android 24+. - Fixed
NoSuchMethodError
exception when recording on certain Android devices. - Fixed
RealtimeClock
pausing causing recording to fail.
- Added experimental support for HEVC with the
HEVCRecorder
. This is currently supported on iOS, macOS, and Windows. - The
IMediaRecorder.CommitFrame
method now accepts a pixel buffer instead of aRenderTexture
. This means you can commit abyte[]
,Color32[]
, or any other pixel buffer array. - The
IMediaRecorder.AcquireFrame
method has been removed. - All
IMediaRecorder
implementations are now completely thread safe. As a result you can now record in a background thread, hence improving general performance. - Greatly improved recording performance and memory stability (no more GC!).
- Added
pixelWidth
andpixelHeight
getter properties to instances ofIMediaRecorder
. - Added WebCam example that demonstrates recording a
WebCamTexture
to a video. - Prevent crash when recording is stopped without committing frames. Instead, the recording callback will not be invoked.
- Refactored
RealtimeClock.IsPaused
getter property toRealtimeClock.Paused
read-write property. - Refactored
FixedIntervalClock.Advance
method toFixedIntervalClock.Tick
. - Deprecated
RealtimeClock.Pause
andRealtimeClock.Resume
methods. - Deprecated
FixedIntervalClock.AutoAdvance
property. You must now manuallyTick
the clock. - Deprecated GreyWorld example.
- NatCorder now requires iOS 11+.
- NatCorder now requires Windows 10 64-bit.
- NatCorder now requires Metal in macOS Standalone builds and in the macOS Editor (enable this in Player Settings).
- Reduced minimum Android requirement to API level 21.
- Add support for multiple game cameras in
CameraInput
. - Fixed memory leak when recording on Windows.
- Refactored
CameraInput
to use instance constructor instead of static factory method. - Refactored
AudioInput
to use instance constructor instead of static factory method.
- Completely overhauled front-end API to provide a more recorder-oriented approach. Check out the README.md for more info.
- Added support for running multiple recording sessions simultaneously on devices that support this.
- Fixed crash when recording was stopped on some Android devices.
- Refactored NatCorder namespace from
NatCorderU.Core
toNatCorder
. - Refactored recorder input namespace from
NatCorderU.Core.Recorders
toNatCorder.Inputs
. - Refactored recording clock namespace from
NatCorderU.Core.Clocks
toNatCorder.Clocks
. - Refactored
CameraRecorder
toCameraInput
. - Refactored
AudioRecorder
toAudioInput
. - Refactored
IClock.CurrentTimestamp
toIClock.Timestamp
. - Deprecated
NatCorder
class. - Deprecated
RecordingCallback
delegate type. - Deprecated
Container
enum. - Deprecated
VideoFormat
struct. - Deprecated
AudioFormat
struct. - Deprecated
IRecorder
struct.
- Greatly improved memory stability on iOS.
- Fixed crash when GIF recording is stopped on iOS.
- Fixed crash when recording MP4 with audio on Android.
- Greatly improved recording stability and performance on Android. As a result, NatCorder now requires a minimum of API level 23.
- Greatly improved recording stability and performance on iOS Metal. As a result, NatCorder now requires a minimum of iOS 8.
- Greatly improved GIF visual quality on Android.
- Dropped support for OpenGL ES on iOS. NatCorder will only use Metal on iOS.
- Added support for the new Lightweight Render Pipeline (LWRP) and High Definition Render Pipeline (HDRP) with
CameraRecorder
. - Update iOS and macOS backend to generate
.mp4
instead of.mov
file when recording MP4. - Added
FixedIntervalClock
for generating timestamps to maintain a constant framerate in recorded videos. - Added aspect fitting in
CameraRecorder
. This will ensure that videos will not appear stretched in the case of app autorotation or uneven recording sizes. - Added support for linear rendering on macOS and Windows.
- Added a dedicated GIF recording example called Giffy.
- Fixed
BufferOverflowException
when recording with audio on some Android devices. - Fixed
DllNotFoundException
when running on macOS. - Deprecated
VideoFormat.Screen
property. Manually create a video format with your intended resolution. - Deprecated
CameraRecorder.recordingMaterial
property. Use Image Effects instead. - Removed GIF recording from ReplayCam.
- Added
IClock
interface andRealtimeClock
class. Clocks are lightweight objects that generate extremely accurate timestamps for recording. They allow for audio to be perfectly synchronized with video when recording with audio. - Added full support for pausing and resuming recording with
Recorder
classes with the newClock
infrastructure. - Changed
NatCorder.CommitFrame
to take in aRenderTexture
with a corresponding timestamp. - Fixed duplicate key error when
NatCorder.CommitFrame
is called on iOS. - Fixed
CameraRecorder
destroying recording material once recording is finished. - Fixed unallocated buffer exception being raised when recording with audio on iOS 12.
- Fixed rare
NullPointerException
crash when recording MP4 on Android. - Deprecated
AudioRecorder.Create
overload that took in both anAudioSource
andAudioListener
. - Deprecated
Frame
class.
- Added GIF recording on iOS, Android, macOS, and Windows!
- Added
Recorders
namespace,VideoRecorder
component, andAudioRecorder
component for quickly recording different gameobjects like cameras and audio sources. - Added proper support for offline recording, where a set of pre-rendered frames are all committed to NatCorder in one loop.
- Added
Container
enumeration for specifying container format for recording (MP4 or GIF). - Added
VideoFormat
andAudioFormat
structs for configuring recording. - Fixed crash on macOS and iOS when very short video (less than 1 second) is recorded.
- Ensure that
IsRecording
properly changes immediately afterStartRecording
andStopRecording
. - Improved speed of
RecordingCallback
being invoked on WebGL. - Refactored
VideoCallback
toRecordingCallback
. - Deprecated
Replay
API. - Deprecated
IAudioSource
interface. - Deprecated
Configuration
struct.
- Improved recording stability on iOS.
- File paths on iOS and macOS are no more prepended with the
file://
protocol. - Fixed tearing in recorded video on iOS Metal.
- Fixed audio being slightly behind of video on iOS and macOS.
- Fixed crash on Android when very short video (less than 1 second) is recorded.
- Fixed null reference exception when recording is stopped on OSX, Windows, and WebGL.
- We have significantly improved recording performance in iOS apps, especially in apps using the Metal API.
- The Windows backend is no more experimental! It is now fully supported.
- When recording with the
Replay
API, aspect fitting will be applied to prevent stretching in the video. - We have deprecated the Sharing API because we introduced a dedicated sharing API, NatShare.
- Fixed audio stuttering in recorded videos on Windows.
- Fixed tearing in recorded video when using OpenGL ES on iOS.
- Fixed rare crash when recording in app that uses Metal API on iOS.
- Fixed tearing and distortion in recorded video on macOS.
- Fixed microphone audio recording from an older time in ReplayCam example.
- Fixed crash when user tries to save video to camera roll from sharing dialog on iOS.
- Deprecated
Microphone
API. UseUnityEngine.Microphone
instead. - Deprecated
NatCorder.Verbose
flag.
- We have added a native macOS backend! The NatCorder recording API is now fully supported on macOS.
- We have also added a native Windows backend! This backend is still experimental so it should not be used in production builds.
- The Standalone backend (using FFmpeg) has been deprecated because we have added native Windows and macOS implementations.
- We have significantly improved recording stability on Android especially for GPU-bound games.
- Added support for different Unity audio DSP latency modes.
- Added
sampleCount
property inIAudioSource
interface. - Fixed crash when
StartRecording
is called on iOS running OpenGL ES2 or ES3. - Fixed rare crash on Android when recording with audio.
- Fixed audio-video timing discrepancies on Android.
- Fixed video tearing on Android when app does not use multithreaded rendering.
- Fixed
FileUriExposedException
whenSharing.Share
is called on Android 24 or newer. - Fixed
Sharing.GetThumbnail
not working on iOS. - Fixed
Sharing.SaveToCameraRoll
failing when permission is requested and approved on iOS. - Fixed
Sharing.SaveToCameraRoll
not working on Android. - Fixed rare crash on Android when a very short video (less than 1 second) is recorded.
- Fixed build failing due to missing symbols for Sharing library on iOS.
- Improved on microphone audio stuttering in ReplayCam example by adding minimal
Microphone
API inNatCorderU.Extensions
namespace. - Refactored
Configuration.Default
toConfiguration.Screen
.
- First release.