lulzsun / replays Goto Github PK
View Code? Open in Web Editor NEWOpen-source game recording management software
License: GNU General Public License v3.0
Open-source game recording management software
License: GNU General Public License v3.0
RePlays is recoding the mic sounds only in left ear when using Scarlett Solo.
I know very little about the audio engineering (?). I found a video better explaining the situation that I'm experiencing https://youtu.be/CfGZyTAfd1c?t=352
Maybe Discord-like behavior is preferred by default https://twitter.com/discord/status/853281035341135877?lang=en
They auto downmix to mono.
Thanks!
Should make it possible to record EasyAntiCheat games with the game capture
I haven't looked into it further.
Currently, the way of tracking logs, exceptions, errors, etc. isn't working 100%. Problematic exceptions (the ones that tend to crash the program) are not always caught and logged but instead sometimes displayed to the user in your classic exception pop-up window.
Maybe look into something like NLog or Log4Net as they are the popular choices.
If the process to be recorded exits during setup RePlays will begin recording anyway in Display Capture mode
This visual or audio cue would be useful to let the user know that RePlays has started recording. Sometimes when I think it is recording, I come back afterwards and there is no video.
Something similar to what Medal has would be perfect.
Audio is still recorded from both microphone and system sounds no matter what the audio settings volume sliders are set to. Below example shows the audio is recorded despite those settings being selected:
Using nightly RePlays build v1.0.49
My audio setup is perhaps uncommon in that I output through Sonarworks SoundID Reference into a Universal Audio Apollo Solo USB audio interface, so this might be affecting something? Please let me know if you need any other information, it would be brilliant to have just game audio (no mic, no system sound) if it were possible, but muting the audio would be the next best thing.
The current bookmarks calculate their position by calculating (Time at keypress/total time) to retrieve the position in the player (percentage %). The current implementation might be off by 1-5 seconds, is there any way to improve this?
Given the amount of recording issues present in the Discord server's bug-report text channel, maintenance is needed on code related to the recording.
By maintenance, I mean a combination of refactoring and rewriting. There is a lot of stuff that is just messy, possibly bad approaches, and bad design.
This is a list of issues that need to be fixed or worth looking into:
A number of these issues could be resolved after some maintenance.
Solution: Do not place "cfg" folder in the same directory of running executable and place it in parent folder instead.
You will probably lose user configuration again for one last time once this is fixed.
Currently we are only targeting Windows systems, but RePlays has the potential for cross-platform capabilities. However, WebView2 is currently only supported by Windows, and the development on getting it ported to Linux and MacOS seem to be at a standstill.
The interest for getting RePlays to work on Linux is for it to work on the Steam Deck.
After some research, we could invest our time porting all of the user interface to Blazor/MAUI. But this does not seem ideal because we would not be able to reuse any parts of the React solution. The entire MVC may need to be redesigned and the interface would need to be rebuilt from the ground up. I do not think this is worth the trouble.
Instead, I am leaning towards using Photino, which will try to use the native browser solution for the targeted system. For example: if targeting Windows it will use WebView2, targeting Linux it will use WebKitGTK+ 2.
Instead of creating a black window, the application creates a new clip.
I'll include logs where I:
This creates two (?) clips while the "Recording Fifa 23" still counts up.
LOGS
logs.txt
At the beginning of the project, I settled to use CRA to setup React because I was relatively new to the React/web ecosystem.
Vite has a lot of performance benefits for development and build time.
Happened after I changed my video saved folder to my new SSD. Completely removed RePlays and reverted save location to default location on C drive. Still same issue.
It's not really possible for end users to add programs like Windows Terminal, which is installed installed via the Microsoft Store, to the do not record list.
Programs installed via the Microsoft Store end up in a (historically) non standard location that needs some technical know how to access. Without being able to access that location you can't provide a full executable path to RePlays.. and without that, the program can't be blocked.
A dropdown of running processes to pick from could be a more user friendly way in general.. from there we can use process info to get a full path.
For Windows Terminal the executable path ends up looking something like:
C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.14.1962.0_x64__8wekyb3d8bbwe\WindowsTerminal.exe
The dropdown route doesn't come without it's own problems though. As you can see from the Windows Terminal executable path... that path is only going to be good till the app gets an update and the version changes.
Maybe we implement some way to handle executables in C:\Program Files\WindowsApps\
a little differently.. and if the executable path contains
C:\Program Files\WindowsApps\
we just check if the executable name matches rather than checking against the whole path.
Implement localization for user interface.
Stay sane by using package lock.
I can do this one myself if you give me perms.
Relating to #34
We are currently storing bookmark data in localStorage instead of using the .metadata
that is created in the relative .thumbs
folder.
Currently, the .metadata
file is storing the duration of the video.
I usually get 180-220 fps while recording. The fps goes down to 100-130 after tabbing in.
Game: League of Legends but should be for all games.
Optionally:
It's a little ghetto to have to tell Windows that you trust the "unknown source" of the .exe file. Most people I know wouldn't even download it due to that, but I figured this is just a new open-source project. Please fix this soon!
Problem:
Expected outcome:
Notes:
There is an issue with capturing games that display a splash screen window at the initial launch of the executable.
The initial approach we take before recording is to immediately retrieve the window handle of the game process that has just launched. If we retrieve the handle quick enough, it may end up being the splash screen window (or some semi-initialized window) and not the actual game window size.
Therefore, the output recording capture will be set at the resolution of the splash screen and not the actual game. This is not intended behavior.
Below are the following conflicted window handle class names that were recorded displaying this issue:
"SplashScreenWindow" - Tekken 7
"CoD Splash Screen" - Call of Duty®: Modern Warfare® II
"SDL_app" - Marauders
"EACLauncherWnd" - Squad
The occurrence is also common with splash screens that use Easy Anti Cheat.
Some proposed solutions:
Needs investigation.. I noticed when trying out bookmarks if I made more than one, then deleted one.. all of them disappeared.
If I then go and add some more and delete one.. all of the new ones go away but it seems like some of the old ones show up again.
There are two issues that come up when trying to use the video player:
These issues do not affect production builds because in production we do not use SetVirtualHostNameToFolderMapping and instead use direct file URIs with file:///
. This is a workaround, but also because things load faster(?) when using file:///
.
This is a WebView2 issue, so it will not be fixed by us.
New install
Changed the Game Recordings Directory under Settings -> Upload -> Local Folder
Game Recordings Directory still shows the previous folder location.
After gameplay:
After restarting the software:
Expected Behavior:
The correct behavior is to automatically open RePlays after installing, or at least a prompt to let the user know installation is complete.
"Build should be successful if the file ~\obs-studio-build\build\win64\bin\64bit\obs.dll
exists"
I think the path needs to be changed to
~\obs-studio-build\obs-studio-release\bin\64bit
I don't know if it's a bug in RePlays or the task manager.
I've realized that task manager indicates that RePlays uses a lot of GPU usage.
HWMonitor shows otherwise and very low GPU usage (which I think is correct since the fans don't spin up).
My RePlays crashes on 1.2.0.
[2023-04-09 20:50:30][DetectionService.cs(305)]: Process [19804][valheim.exe]: Got MainWindow [Valheim]
[2023-04-09 20:50:30][DetectionService.cs(314)]: This process [19804] is a recordable game [valheim.exe], prepared to record
[2023-04-09 20:50:30][DetectionService.cs(318)]: Is allowed to record: True
[2023-04-09 20:50:30][RecordingService.cs(60)]: Is PreRecording False
[2023-04-09 20:50:30][RecordingService.cs(61)]: Is Recording False
[2023-04-09 20:50:30][LibObsRecorder.cs(190)]: Game capture window size: 2560x1440
[2023-04-09 20:50:30][LibObsRecorder.cs(70)]: warning: 1 views remain at shutdown
[2023-04-09 20:50:30][LibObsRecorder.cs(70)]: info: ---------------------------------
[2023-04-09 20:50:30][DetectionService.cs(300)]: Process [60044][UnityCrashHandler64.exe]: Got no MainWindow. Retrying... 1/40
[2023-04-09 20:50:30][LibObsRecorder.cs(70)]: info: video settings reset:
base resolution: 2560x1440
output resolution: 2560x1440
downscale filter: Bilinear
fps: 60/1
format: NV12
YUV mode: Rec. 709/Partial
[2023-04-09 20:50:30][LibObsRecorder.cs(70)]: info: NV12 texture support enabled
[2023-04-09 20:50:30][LibObsRecorder.cs(70)]: info: P010 texture support not available
[2023-04-09 20:50:30][LibObsRecorder.cs(194)]: Preparing to create libobs output [4897]...
[2023-04-09 20:50:30][LibObsRecorder.cs(70)]: info: [win-wasapi: 'output_Speakers (Logitech PRO X Wireless Gaming Headset)'] update settings:
device id: {0.0.0.00000000}.{dec55070-a2ee-4602-b3d5-041fb4dde286}
use device timing: 1
[2023-04-09 20:50:30][LibObsRecorder.cs(70)]: debug: source 'output_Speakers (Logitech PRO X Wireless Gaming Headset)' (wasapi_output_capture) created
[2023-04-09 20:50:30][LibObsRecorder.cs(70)]: debug: encoder 'aac0' (ffmpeg_aac) created
[2023-04-09 20:50:30][External Library(0)]: System.Collections.Generic.KeyNotFoundException: The given key 'aac5' was not present in the dictionary.
at System.Collections.Generic.Dictionary2.get_Item(TKey key)
at RePlays.Recorders.LibObsRecorder.StartRecording() in D:\Documents\GitHub\RePlays\Classes\Recorders\LibObsRecorder.cs:line 211
at RePlays.Services.RecordingService.StartRecording() in D:\Documents\GitHub\RePlays\Classes\Services\RecordingService.cs:line 66
at System.Threading.Tasks.Task.<>c.b__128_1(Object state)
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
[2023-04-09 20:50:30][LibObsRecorder.cs(70)]: info: WASAPI: Device 'Speakers (Logitech PRO X Wireless Gaming Headset)' [44100 Hz] initialized
"Crashes"
These are my audio settings
"inputDevicesCache": [
{
"deviceId": "default",
"deviceLabel": "Default Device",
"deviceVolume": 100
},
{
"deviceId": "communications",
"deviceLabel": "Default Communication Device",
"deviceVolume": 100
},
{
"deviceId": "{0.0.1.00000000}.{a1b17db2-83c6-4d38-a240-746a03c0a88d}",
"deviceLabel": "Microphone (3- Shure MV7)",
"deviceVolume": 100
},
{
"deviceId": "{0.0.1.00000000}.{15584581-e462-4aed-8546-e2f4175e9d04}",
"deviceLabel": "Microphone (Logitech PRO X Wireless Gaming Headset)",
"deviceVolume": 100
}
],
"inputDevices": [
{
"deviceId": "{0.0.1.00000000}.{a1b17db2-83c6-4d38-a240-746a03c0a88d}",
"deviceLabel": "Microphone (3- Shure MV7)",
"deviceVolume": 100
}
],
"outputDevicesCache": [
{
"deviceId": "default",
"deviceLabel": "Default Device",
"deviceVolume": 100
},
{
"deviceId": "communications",
"deviceLabel": "Default Communication Device",
"deviceVolume": 100
},
{
"deviceId": "{0.0.0.00000000}.{dec55070-a2ee-4602-b3d5-041fb4dde286}",
"deviceLabel": "Speakers (Logitech PRO X Wireless Gaming Headset)",
"deviceVolume": 100
},
{
"deviceId": "{0.0.0.00000000}.{069a511d-1917-45cf-b135-c978e3ef0fa0}",
"deviceLabel": "Speakers (Realtek(R) Audio)",
"deviceVolume": 100
}
],
"outputDevices": [
{
"deviceId": "{0.0.0.00000000}.{dec55070-a2ee-4602-b3d5-041fb4dde286}",
"deviceLabel": "Speakers (Logitech PRO X Wireless Gaming Headset)",
"deviceVolume": 100
}
]
Create a landing page with GitHub Pages
There is an issue where if userSettings are repeatedly changed, saved passwords for upload services are being lengthened(?) to the point where the userSettings.json file size increases drastically.
From my debugging, it ended up increasing to 100MB~ (default settings is around 4KB).
This probably explains why sometimes there is sometimes an upload authentication error, because the encrypted password becomes incorrect when this occurs.
This also causes extreme interface lag if the settings json is large, because it is being reloaded every time a setting is changed.
I see a notification saying "New version available!" but it's unclear if I can update through the UI. Am I missing something? Or do I need to fetch the latest package from GitHub?
I can only change the "Game Recordings Directory" not the "Temporary Video Directory.
Hey I really appreciate you for creating this. MedalTV is functional but I have a feeling their premium is going to drive it into the ground. They already made it so you can't download your uploaded clips without a watermark without paying. They also "temporarily" disabled embedding on discord, which is ridiculous.
Are there any plans to implement a clip feature that allows you to capture the last x seconds?
I see you are using OBS to perform the capturing, and what I am asking for may be extremely difficult because of this. I believe that the way this feature works is through recording all the time and deleting the recorded content that wasn't marked for capture with the chosen hotkey. I am unsure how this would be accomplished but it would truly make this platform a superior alternative to Medal.
I just encountered it after playing a game of PUBG.
Reproduce:
i have a laptop and would like to use the ipgu over my dedicated nvidia gpu, is there any way to do that?
Need to implement a secondary capture mode for games like Counter Strike: Global Offensive.
Best solution here would be for each game to have a recording method set for it. Default to game capture, otherwise allow the user to pick another method.
Despite what a lot of the internet says, display capture works and should be fairly performant as it's using the windows desktop duplication api. The downside to this is OBS's implementation captures the full display so game windows smaller than full screen would show desktop.
Window Capture works as long as the game is not in exclusive fullscreen.
Commit 7c8f627 allows for users to add .mkv video files to view in the video player.
However, this does not fully implement support for .mkv files.
Some of the following changes will need to be done in order for full .mkv support:
These two services are essentially doing the same thing. However, KeyboardHookService.cs
has better functionality so we should look into using that as the basis when merging the two.
There are a few tasks that need to be done with the current GitHub Workflow.
Bookmarks and clips in videos gets removed after a Plays update. This is probably because it's saved in LocalStorage.
Using version 1.0.52
when I try to create a "toggle recording keybind" it just goes blank after pressing the keyboard combination
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.