Search Unity

Next Gen Recorder - News & Support

Discussion in 'Assets and Asset Store' started by pmjo, Mar 6, 2020.

  1. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Hi,

    Next Gen Recorder beta has been out for some time. Even there hasn't been that many support request I wanted start a new thread for news, support and feature requests. Feel free to post! :)

    I also wanted to show a couple of demo recordings from cool games using Next Gen Recorder.

    First game is called Skate City and it is available for iOS, tvOS and macOS. Next Gen Recorder is used on all platforms. Find it on Apple Arcade and view the official trailer here.

    A couple of short in-game recordings from Skate City:




    The second game is called Drive Ahead. It was first out with Everyplay but when it got shut down Everyplay was replaced with Next Gen Recorder. Find it on the App Store and view the official trailer here.

    A couple of short in-game recording from Drive Ahead:




    That's all the videos this time. Recently I have been testing out the best way to integrate Next Gen Recorder in HDRP and URP projects. Probably posting about it here soon or doing an update.
     
  2. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Latest benchmark results with Unity 2019.3.2f1:

    iPhone 6 (updated 2020-03-27):


    iPhone 5s (updated 2020-03-27):


    I'm about to release a new version soon with a new Metal Screen Recorder that will enable Screen Recording for Metal by simply drag and dropping the component to a scene. It will also work with Scriptable Render Pipeline (SRP).
     
    Last edited: Mar 27, 2020
    PT-HKostic likes this.
  3. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,970
    Hey there @pmjo, any chance to get benchmarks with more recent iOS devices? As far as I can tell, the iPhone 7 is the most common model in the world. Besides, more recent models offer much better performance.
     
    ROBYER1 likes this.
  4. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    I have some plans of creating a new benchmark for newer devices. If I run the old device benchmark with new devices all get 60fps so that does not tell much :)
     
    Lanre likes this.
  5. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Awesome news! Next Gen Recorder 0.9.9.1 is out! Recording Scriptable Render Pipeline has never been easier. Just drag and drop the MetalScreenRecorder component to your scene. Also works with Built-In Render Pipeline.

    Here is a video how to enable recording in Unity Boat Attack demo:

     
  6. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    I have created a new benchmark for testing NGR performance on newer devices. It is a really heavy scene that runs stable 30 fps on iPhone XS Max without any recording system. HARDCORE EDIT: Added even more cpu load to the benchmark by adding additional 80000 calculations. Full 2688x1242 resolution is recorded on iPhone XS MAX so the test is quite hardcore. I had to use an ice brick under the phone to avoid fps loss due thermal throttling =D

    Here is a small clip of the benchmark. I have combined some of the Unity's free assets and added something of my own:

     
    Last edited: Mar 29, 2020
  7. Skjalg

    Skjalg

    Joined:
    May 25, 2009
    Posts:
    211
    This is some great work you are doing!
     
    Lanre and pmjo like this.
  8. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    And here are the results for the above benchmark on iPhone 8:
     
    Last edited: Mar 29, 2020
  9. petey

    petey

    Joined:
    May 20, 2009
    Posts:
    1,823
    Hi!,

    Just found this asset and it looks great! I was getting a little stuck though. I'm trying to record from a specific camera, so as to avoid some of my UI elements and what not. Also I'd like to record a square frame. Is that possible?
    I thought maybe the virtual camera might be what I'm looking for but I can't seem to get it to work. I might just be missing something simple, could you point me in the right direction?

    Thanks,
    Pete
     
  10. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Hi! It is possible. You cannot use Virtual Screen if you want it to be square but it would actually be a good idea to add a feature to Virtual Screen that you could record desired size instead of screen size. Meanwhile you must do a custom integration. Is your camera totally off-screen camera? (nothing from that camera goes to the screen)
     
  11. petey

    petey

    Joined:
    May 20, 2009
    Posts:
    1,823
    Yeah it’s off screen. I was thinking I might have needed to use a render texture, does that sound right?
     
  12. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Yes. Something like this. Just drop this on top of your off-screen camera.

    Code (CSharp):
    1. using UnityEngine;
    2. using UnityEngine;
    3. using UnityEngine.Rendering;
    4. using pmjo.NextGenRecorder;
    5.  
    6. [RequireComponent(typeof(Camera))]
    7. public class OffScreenCameraRecorder : Recorder.VideoRecorderBase
    8. {
    9.     public int videoWidth = 512;
    10.     public int videoHeight = 512;
    11.  
    12.     private RenderTexture m_RenderTexture;
    13.     private Camera m_Camera;
    14.     private CommandBuffer m_CommandBuffer;
    15.  
    16.     void Awake()
    17.     {
    18.         m_RenderTexture = new RenderTexture(videoWidth, videoHeight, 24, RenderTextureFormat.Default);
    19.         m_RenderTexture.Create();
    20.  
    21.         m_Camera = GetComponent<Camera>();
    22.         m_Camera.targetTexture = m_RenderTexture;
    23.  
    24.         if (!Recorder.IsSupported)
    25.         {
    26.             Debug.LogWarning("Next Gen Recorder not supported on this platform");
    27.             return;
    28.         }
    29.  
    30.         if (Recorder.IsReadyForRecording)
    31.         {
    32.             RecordingTexture = m_RenderTexture;
    33.  
    34.             m_CommandBuffer = new CommandBuffer();
    35.             CommandBufferBlitRecordingTexture(m_CommandBuffer);
    36.             m_Camera.AddCommandBuffer(CameraEvent.AfterEverything, m_CommandBuffer);
    37.         }
    38.     }
    39. }
    40.  
    You can easily try the recording by simply dropping SimpleRecoder prefab to your scene.
     
    Last edited: Mar 29, 2020
  13. petey

    petey

    Joined:
    May 20, 2009
    Posts:
    1,823
    Hey thanks so much!
    I dropped that into a scene with SimpleRecorder and it works great on desktop but on mobile it comes up with
    error code NothingToExport. I'll have a dig around and see if I can figure it out.
     
  14. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Fixed the example to work on mobile. EDIT: Forgot that plugin initialization goes a bit different on mobile. You can call IsReadyForRecording to make sure everything is initialized before setting the RecordingTexture. Calling IsSupported only checks if recording is supported but skips initialization.
     
    Last edited: Mar 29, 2020
  15. petey

    petey

    Joined:
    May 20, 2009
    Posts:
    1,823
    Hey that's great! It all works now :) Thanks so much for looking at that!
    I grabbed the full version too!
     
  16. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    You are welcome :) Good that you asked, now I have a good and simple example how to do a custom integration. Will actually push it to the documentation too.
     
  17. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    In 0.9.10.0 I added VerticalFlip support when using CaptureRenderTarget. I also forgot that MetalScreenRecoder and MetalCameraRecorder should use VerticalFlip true as default. For that reason you will see the video upside down when using these components. To fix it, add Recorder.VerticalFlip = true before calling starting the recording. I will push a new version (0.9.10.1) soon that will have Recorder.VerticalFlip = true, in both MetalScreenRecorder and MetalCameraRecorder. EDIT: 0.9.10.1 is now live! :)
     
    Last edited: Apr 6, 2020
    petey likes this.
  18. petey

    petey

    Joined:
    May 20, 2009
    Posts:
    1,823
    Hiya!
    Just wondering is there a way to adjust the encoding settings of the output movie file? Specifically I was trying to set the option to loop and auto play. I'm not entirely sure what they are to be honest :) but I can find out through apple support.
     
  19. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    I haven't heard that loop and auto play can be set to the video file. However there are differences between MP4 and QuickTime MOV. Currently NGR uses MP4 container but I could make it support MOV too. If you know that this can be done with some software it might be possible to add support for it. Let's investigate :)

    Currently the only encoding settings that you can change are frame rate, video bitrate and audio bitrate.

    EDIT: It seems "loop" meta data item exist, need to see if it can be added as custom metadata since I'm not sure if it directly supported by Apple
     
    Last edited: Apr 12, 2020
  20. Busymonkey

    Busymonkey

    Joined:
    Mar 7, 2019
    Posts:
    7
    Hi @pmjo, any news on Android support? :)
     
    Menion-Leah likes this.
  21. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Unfortunately no :(. I have many features in mind that I want to do for iOS before I could even continue Android. I have even been thinking about keeping this Apple devices only since on Android I could never be happy with the performance.
     
  22. Busymonkey

    Busymonkey

    Joined:
    Mar 7, 2019
    Posts:
    7
    Do let me know if you change your mind - we are looking for a solution for the Oculus Quest. :)
     
    pmjo likes this.
  23. petey

    petey

    Joined:
    May 20, 2009
    Posts:
    1,823
    Hi just wondering, can Next Get recorder capture and save a single frame? I have a section of my game where I was allowing the user to take a 'photo' of their character to share and I just realised that might be possible with Next Gen Recorder.
     
  24. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Hmm.. I actually implemented such feature in Everyplay but I don't have similar in NGR. I do have thumbnail feature which you could maybe use, record a second and export a thumbnail from the recording.

    Code (CSharp):
    1. void ExportRecordingSessionThumbnail(long sessionId, int maxSideWidth, ThumbnailType type)
    You could also use Unity's CaptureScreenshot if you don't mind about small lag and then use NGR's sharing functionality to share it.
     
    Last edited: May 6, 2020
    makaka-org likes this.
  25. petey

    petey

    Joined:
    May 20, 2009
    Posts:
    1,823
    Cool that might work, thanks!
     
  26. petey

    petey

    Joined:
    May 20, 2009
    Posts:
    1,823
    Hey the share sheet works great thanks!
    I got message after uploading a build,
    Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSCameraUsageDescription key...
    Is that triggered by your asset captain the screen? I could fill in the preference for that in Unity, but I thought I'd run it past incase you hadn't intended it.
     
  27. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    NGR does not use webcam/camera so it will not require NSCameraUsageDescription. Are you referencing/using Unity WebCamTexture or webcam utilities somewhere? Or have you maybe referenced NGR's WebCamTexture sample scene's scripts somewhere or added the scene build list? That sample scene uses Unity WebCamTexture so it would also require NSCameraUsageDescription. The actual product does not require it.
     
  28. petey

    petey

    Joined:
    May 20, 2009
    Posts:
    1,823
    This is all I'm using -
    Code (CSharp):
    1. pmjo.NextGenRecorder.Sharing.Sharing.ShowShareSheet(pathToImage, true);
    Just did another test and it seems that if I delete the example folder it's fine, none of those scenes where in the build so I'm not sure what's going on there.
     
  29. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Interesting, Unity thinks it needs something from there even it does not :) This is good to know.
     
  30. petey

    petey

    Joined:
    May 20, 2009
    Posts:
    1,823
    Glad I could help! :)
     
  31. JulioWabisabi

    JulioWabisabi

    Joined:
    Sep 14, 2018
    Posts:
    5
    Hi,
    Your plugin looks amazing and is something that i would love to include in my game but i can't make it work, i was hoping you can help me :).
    My game uses URP, the docs says that SRP only work with custom integration or with the MetalScreenRecorder.
    So i tried to implement a custom integration following the code example from the docs and the moded version from this thread and neither seems to be working i always get "error code NothingToExport." when trying to save/export the recorded video.
    The only way to get it working is by using the MetalScreenRecorder but that implementation record the whole screen including the UI and that's something i don't want currently i'm using replay kit and i'm looking for alternatives to record parts of the gameplay to be share on social media without UI.
    Thanks!
     
  32. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Hi! Thanks for reading the docs. Seems they still need some fixing :) No worries, we get it working for you. Without a permanent recording texture (RenderTexture) you cannot use CommandBufferBlitRecordingTexture or BlitRecordingTexture() but instead you should use either CommandBufferCaptureMetalRenderTarget or CaptureMetalRenderTarget().

    Basically you should put the CaptureMetalRenderTarget to the place in render pipeline where you would like to capture the video, before the UI.

    Usually NothingToExport happens when any of the above functions is not called at all or the recording source is already null when then command is actually run.

    I hope this helps! :) If not, feel free to contact me at support@pmjo.org so we can look into this more deeply :)
     
    Last edited: May 28, 2020
  33. JulioWabisabi

    JulioWabisabi

    Joined:
    Sep 14, 2018
    Posts:
    5
    Hi!!
    Thanks for the quick response, i tried with CommandBufferCaptureMetalRenderTarget by replacing the CommandBufferBlitRecordingTexture call in the example but doesn't seem be working perhaps i need to setup the command buffer in a different way?
    i'll try to setup a custom render pass perhaps i could call the CaptureMetalRenderTarget from there to avoid gettting the UI i'll let you know if it works :)
     
  34. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Just replacing the call and using a regular Built-In render pipeline way of doing things does not help. In SRP you have to put the call inside the render pipeline which basically means you have to custom Scriptable Render Pipeline. https://docs.unity3d.com/Manual/srp-custom-getting-started.html (Creating a custom version of URP or HDRP) The most easiest way is to just clone the URP version you are using to your project and the add the capture call to the correct place in the code.

    I think I was playing with custom render pass at some point, there was some problem.. could be that the post processing was partially incomplete or the ui was missing or it was somehow unfinished feature. But yeah, try that first since it does not require custom URP.
     
  35. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Did a quick test with custom render pass and now I remember the problem. For some reason the view gets over bright when render pass event is AfterRendering. But actually after I upgraded URP to 7.3.1 that issue was gone.

    I was able to record the Unity URP template project by adding a new custom render pass (RecordingPass.cs) and assign that to the forward renderer. Then I also needed to add a helper script to call the recording (UrpRecorder.cs) to some game object in the scene.

    RecordingPass.cs:
    Code (CSharp):
    1. using UnityEngine;
    2. using UnityEngine.Rendering;
    3. using UnityEngine.Rendering.Universal;
    4.  
    5. public class RecordingPass : ScriptableRendererFeature
    6. {
    7.     class CustomRenderPass : ScriptableRenderPass
    8.     {
    9.         private CommandBuffer m_CommandBuffer;
    10.  
    11.         public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
    12.         {
    13.             m_CommandBuffer = new CommandBuffer();
    14.  
    15.             if (UrpRecorder.Instance != null)
    16.             {
    17.                 UrpRecorder.Instance.Configure(m_CommandBuffer);
    18.             }
    19.         }
    20.  
    21.         public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
    22.         {
    23.             context.ExecuteCommandBuffer(m_CommandBuffer);
    24.         }
    25.  
    26.         public override void FrameCleanup(CommandBuffer cmd) { }
    27.     }
    28.  
    29.     CustomRenderPass m_ScriptablePass;
    30.  
    31.     public override void Create()
    32.     {
    33.         m_ScriptablePass = new CustomRenderPass();
    34.         m_ScriptablePass.renderPassEvent = RenderPassEvent.AfterRendering;
    35.     }
    36.  
    37.     public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    38.     {
    39.         renderer.EnqueuePass(m_ScriptablePass);
    40.     }
    41. }
    42.  
    UrpRecorder.cs:
    Code (CSharp):
    1. using UnityEngine;
    2. using UnityEngine.Rendering;
    3. using pmjo.NextGenRecorder;
    4.  
    5. [RequireComponent(typeof(Camera))]
    6. public class UrpRecorder : Recorder.VideoRecorderBase
    7. {
    8.     public static UrpRecorder Instance;
    9.  
    10.     void Awake()
    11.     {
    12.         Instance = this;
    13.  
    14.         Recorder.VerticalFlip = false;
    15. #if UNITY_EDITOR || UNITY_STANDALONE_OSX
    16.         Recorder.ColorSpace = ColorSpace.Linear;
    17. #endif
    18.     }
    19.  
    20.     public void Configure(CommandBuffer commandBuffer)
    21.     {
    22.         if (Application.isPlaying)
    23.         {
    24.             CommandBufferCaptureMetalRenderTarget(commandBuffer);
    25.         }
    26.     }
    27. }
    28.  
    I only tried this on editor so not sure if it works on device.

    EDIT: Seemed to work on iPhone but I needed to ifdef the colorspace to editor/osx only, for some reason the colors are already in gamma space on iPhone.
     
    Last edited: May 29, 2020
  36. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Btw. Please also remember to set recording/app framerate and downscale rules or use RecommendSettings.cs.

    Here is a video where I use the above snippets in URP template project:

     
  37. JulioWabisabi

    JulioWabisabi

    Joined:
    Sep 14, 2018
    Posts:
    5
    Wow!! Thank you so much i'll try it right away ;)
     
  38. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    The above example will work for single camera setups. If you have multiple Stacked cameras in URP you should change the scripts a bit and set the camera you want to record to the UrpRecorder component.

    RecordingPass.cs:
    Code (CSharp):
    1. using UnityEngine;
    2. using UnityEngine.Rendering;
    3. using UnityEngine.Rendering.Universal;
    4.  
    5. public class RecordingPass : ScriptableRendererFeature
    6. {
    7.     class CustomRenderPass : ScriptableRenderPass
    8.     {
    9.         private CommandBuffer m_CommandBuffer;
    10.  
    11.         public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
    12.         {
    13.         }
    14.  
    15.         public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
    16.         {
    17.             if (UrpRecorder.Instance != null && UrpRecorder.Instance.recordedCamera == renderingData.cameraData.camera)
    18.             {
    19.                 if (m_CommandBuffer == null)
    20.                 {
    21.                     m_CommandBuffer = new CommandBuffer();
    22.  
    23.                     UrpRecorder.Instance.Configure(m_CommandBuffer);
    24.                 }
    25.  
    26.                 context.ExecuteCommandBuffer(m_CommandBuffer);
    27.             }
    28.         }
    29.  
    30.         public override void FrameCleanup(CommandBuffer cmd) { }
    31.     }
    32.  
    33.     CustomRenderPass m_ScriptablePass;
    34.  
    35.     public override void Create()
    36.     {
    37.         m_ScriptablePass = new CustomRenderPass();
    38.         m_ScriptablePass.renderPassEvent = RenderPassEvent.AfterRendering;
    39.     }
    40.  
    41.     public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    42.     {
    43.         renderer.EnqueuePass(m_ScriptablePass);
    44.     }
    45. }
    46.  
    UrpRecorder.cs:
    Code (CSharp):
    1. using UnityEngine;
    2. using UnityEngine.Rendering;
    3. using pmjo.NextGenRecorder;
    4.  
    5. [RequireComponent(typeof(Camera))]
    6. public class UrpRecorder : Recorder.VideoRecorderBase
    7. {
    8.     public static UrpRecorder Instance;
    9.  
    10.     public Camera recordedCamera;
    11.  
    12.     void Awake()
    13.     {
    14.         Instance = this;
    15.  
    16.         Recorder.VerticalFlip = false;
    17. #if UNITY_EDITOR || UNITY_STANDALONE_OSX
    18.         Recorder.ColorSpace = ColorSpace.Linear;
    19. #endif
    20.     }
    21.  
    22.     public void Configure(CommandBuffer commandBuffer)
    23.     {
    24.         if (Application.isPlaying)
    25.         {
    26.             CommandBufferCaptureMetalRenderTarget(commandBuffer);
    27.         }
    28.     }
    29. }
    30.  
    Otherwise the capturing would be called to all stacked cameras and it could result flickering, unexpected results and slower performance.
     
  39. Smileys

    Smileys

    Joined:
    Feb 27, 2014
    Posts:
    81
    Hey - just downloaded the Recorder and tried it for the first time. Was working fine but without audio. So i looked up how to record audio too. Then i tried it again and now i get:
    "Failed to export recording, error code NothingToExport, session id 614272824413"

    Tried it with and without the audio script. I would like to buy your product if i can get it running again (with audio) ;).
     
  40. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Is your project using Unity audio? If you are not using Unity audio the above would be expected since then the audio recorder would not receive any data and would fail to save the video -> Failed to export. Could email me to support [at] pmjo.org and tell a bit more about your project, Unity version, Renderer (Built-In, SRP), how you integrated and especially if you are not using Unity audio engine. Thanks!
     
  41. Smileys

    Smileys

    Joined:
    Feb 27, 2014
    Posts:
    81
    Hey - sorry for the late reply. Problem was that i added a "AudioSourceRecorder" to one of the game objects in the scene while playing around with the features. But i forget about it and then the tool stops recording/exporting. Maybe if you find the time to update this, a warning or more detailed error message would be pretty nice. Esp. since we are not able to look into the code. Anyway - great tool and exactly what i needed (other recording solutions always feel like performance killers). Will buy the full version now.
     
  42. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Happy you found the reason. Thanks!
     
  43. abhi3188

    abhi3188

    Joined:
    Dec 13, 2015
    Posts:
    31
    Hey, this looks really great! Thanks for working on this. Couple of questions:

    1) Is there a way to exclude a certain layer? I don't want my UI layers to show up in the recording, I'm using screen space overlay. I am using some image effects on my main camera which I do want to record though.

    I tried CrossPlatform Replay Kit and it essentially records everything on the screen, so I can't exclude the UI.

    2) Any plans on an android version?

    3) I want to upload the video to a server (firebase) without the need of saving it locally? How can I access the generated video?
     
    Last edited: Jun 23, 2020
  44. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Hi!

    1) By default the integration happens automatically (for a single camera) and it does not record Screen Space Overlay. So it could be that it works for you without doing anything. Automatic integration works for most simple cases only. If it does not work for you, there are multiple ways to achieve what you want.

    There is no way to record a specific layer with single camera but you can achieve this by using multiple cameras. Make the first camera render the layers you want to record and use the second camera to render the layers that you don't want to record. If you only need Metal support you can drop the Metal Camera Recorder component on top of the first camera. If you need OpenGL support there are multiple ways to do the integration. Please see the Online Documentation.

    Many things affect how you integrate, for example: are you using Built-In renderer? or Scriptable Render Pipeline (URP/HDRP)? also if you need to support OpenGL? For Metal only the integration is more simple.

    2) Unfortunately I don't have time for Android version without winning in a lottery :) Having the same product (feature parity) on Android would take a lot more time and some parts are even impossible since Unity Android rendering pipeline does not offer same kind of graphic hooks than on iOS. Android also has a lot worse APIs and I could not make the Android version as fast as iOS version.

    3) To access the video you must first export the video with Recorder.ExportRecordingSession. After you have uploaded the video you can remove the local video to save space on the device. By default the video does not go to photos or anything so you don't need to worry about that. More about exporting in Online Documentation.
     
    abhi3188 likes this.
  45. makaka-org

    makaka-org

    Joined:
    Dec 1, 2013
    Posts:
    1,023
    Hi, Can I record game audio & device mic audio simultaneously with video?
     
  46. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Basically when you output the microphone through the speakers both will get recorded but that is mainly usable with headphones due the echo. There is no direct mixed audio recording support at the moment. I can try if I could somehow achieve mixed recording with some Unity audio mixer hacks next week.
     
  47. makaka-org

    makaka-org

    Joined:
    Dec 1, 2013
    Posts:
    1,023
    Now I used iOS Replay Kit (Unity Native Integration). With this tool I can achieve direct mixed audio recording.
    Works good, but it needs permission for every app session.

    As I understand your plugin doesn't need permission for every app session.
     
  48. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Yes, it does not require permission dialog. I need to investigate if there is some audio mixer hack way to do it. Otherwise I would need to write a lot of native code.
     
  49. makaka-org

    makaka-org

    Joined:
    Dec 1, 2013
    Posts:
    1,023
    If you will solve this task & also android version, this will be the best solution on the market if your fps comparing screenshot is true. By the way, add AVPro Movie Capture to comparing table.

    Sincerely wish you good luck with this deal.
     
    pmjo likes this.
  50. pmjo

    pmjo

    Unity Technologies

    Joined:
    Sep 17, 2013
    Posts:
    245
    Hi. I have cool news. Since so many have asked about the possibility of mixing game sounds and microphone together I spent one evening of prototyping a new cool feature, Audio Mixer Recorder. It allows you to record any Unity Audio Mixer bus that basically means you can totally control what sounds get to the video and what don't.

    Instead of just mixing the microphone and game audio you can also make the game audio duck so the microphone is always heard perfectly. Here is a screenshot of an audio mixer that will mix game audio and microphone and also duck the game audio volume when needed. The recorded video will have both, microphone and game audio but the speakers will only playback the game audio.



    If you think I should continue this feature, please like this post. Currently I have implemented it on macOS and iOS/tvOS will need some extra work.