Giter Site home page Giter Site logo

lulzsun / replays Goto Github PK

View Code? Open in Web Editor NEW
123.0 5.0 16.0 23.72 MB

Open-source game recording management software

License: GNU General Public License v3.0

HTML 0.11% CSS 0.37% TypeScript 40.39% C# 58.36% JavaScript 0.10% Batchfile 0.68%
libobs obs video-editor dvr game-dvr recording-app recording-software game-recording-software

replays's People

Contributors

avi0n avatar benzon avatar callumcarmicheal avatar eiqnepm avatar icetoast avatar jkluch avatar lulzsun avatar mondanzo avatar r-nk avatar segergren avatar sonicv6 avatar sshcrack avatar swyknox avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

replays's Issues

Improve the logging of crashing exceptions

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.

Clicking on Change logs doesn't do anything

Problem:

  • clicking on the Change logs button doesn't seem to do anything.
    image

Expected Behaviour:

  • Either open the release page on github or show the changes in the app via a new page / popup.

Sound/visual cue when RePlays has started

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 settings volume levels not working

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:
image
image

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.

IMP: Bookmark hotkey accuracy.

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?

Maintenance of the recording backend

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:

  • #39
  • Recording session being split upon losing game focus (Alt-Tab)
    • fix: Unnecessary recording restarts upon focus switch
  • Recording the wrong screen (in specific multi-monitor setups)
    • fix: Get screen bounds of which the game window lies fdc14be
    • fix: Set display_capture's monitor of which the game window lies
  • General issues in game detection (notably VR titles such as VRChat)
    • fix: VRChat being in nonGamesDetection.json
    • feat: Multiple Improvements to window handle capturing
  • Recording sometimes not stopping after game process exit
    • fix: Use WMI as extra measure to stop recording 0d8eddf

A number of these issues could be resolved after some maintenance.

Video duration label

Goal:

  • Show the duration of the videos on the Sessions panel. See attached for a dank mockup.
    image

Purpose:

  • It's niceu to see video durations.

BUG: Updates not carrying over user configuration

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.

Cross-platform web user interface

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.

Application creates a new clip when tabbing out

Instead of creating a black window, the application creates a new clip.

I'll include logs where I:

  1. Start Fifa
  2. Wait 15 seconds
  3. Tabs out
  4. Wait 10 seconds
  5. Tabs in
  6. Wait 10 seconds
  7. Closes the game.

This creates two (?) clips while the "Recording Fifa 23" still counts up.

LOGS
logs.txt

Move from CRA to Vite

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.

Implement different method for adding non-game applications

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.

Store bookmark data in the video's .metadata file

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.

Use .NET 6

  • Upgrade from .NET 5 to .NET 6

Optionally:

  • Use .NET MAUI (part of .NET 6) to replace WebView2. This will require a complete rewrite of how the interface works.

Add a proper signed certificate

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!

Brotato recording with wrong resolution

Problem:

  • I ran into this issue by playing Brotato https://store.steampowered.com/app/1942280/Brotato/
  • The game application starts in a small window
  • It then immediately jumps to a full screen (I assume with increased resolution)
  • RePlays software only records the small portion of the screen starting from top left corner. See attached.
    image

Expected outcome:

  • RePlays should follow the changing screen resolution and record the whole screen of the game.

Notes:

  • In case this is a difficult bug, I'll gift the game to whoever wants to try to fix it! Just let me know here and ping me on discord.

Capturing in the incorrect resolutions

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:

  • Check the aspect ratio of the initial splash screen to see if it is a standard game resolution
  • Keep a dictionary/regex/string manipulation against conflicted window handle class names (partially implemented)
  • Check periodically if the window resolution has changed

BUG: weird bookmark behavior when deleting

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.

Video player does not work properly when in debug

There are two issues that come up when trying to use the video player:

  1. Long video load times due to WebView2's SetVirtualHostNameToFolderMapping(?) depending on how large the file size is
    (MicrosoftEdge/WebView2Feedback#1071)
  2. Cannot modify the currentTime of a video in HTML page displayed by SetVirtualHostNameToFolderMapping (MicrosoftEdge/WebView2Feedback#1386)

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.

Bug: Local recordings directory doesn't change consistently

  • New install

  • Changed the Game Recordings Directory under Settings -> Upload -> Local Folder
    image

  • Navigate to Settings -> Storage
    image

  • Game Recordings Directory still shows the previous folder location.

    • When clicking on the location text, it will popup a windows folder select window with the NEW location
    • When clicking on the Open Folder button, it will open the windows file explorer of the PREVIOUS location.

After gameplay:

  • The game was recorded to the old location (the location shown in Settings -> Storage not Settings -> Upload -> Local Folder)

After restarting the software:

  • UI still behaves the same way as before.
    • Game Recordings Directory under Upload -> Local Folder and Storage are different
    • Clicking on the location address under Storage navigates me popup to the location shown in Upload -> Local Folder
    • The game is still recorded to folder written in Storage

Expected Behavior:

  • Either
    1. The Game Recordings Directory should be consistent in both Upload -> Local Folder and Storage
    2. or they should be written differently and the functionality shouldn't bleed into one another.

Updates to Development Guide for Windows

"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

BUG: High GPU-usage while not recording

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).

f946c353b2f832bd8c445567cc26df7f.mp4

BUG: Crash when starting recording (caused by aac)

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
}
]

Issue with saving encrypted password to userSettings.json

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.

No way to update when choosing "Prompt"

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?

Instant replay / Replay buffer capturing

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.

RestoreLocalStorage overwrites metadata in some situations

I just encountered it after playing a game of PUBG.

Reproduce:

  1. Start RePlays and minimize it
  2. Start a game
  3. Press the bookmark hotkey
  4. Exit the game
  5. Start RePlays from Windows Search (In case the user (me) forgot that it was minimized and located in the bottom right)
  6. Done, your latest bookmarks are overwritten.

TODO: Games that don't allow process hooking can't be recorded with game-capture

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.

Support .mkv video format

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:

  • Change compressor to support .mkv files
  • Change uploaders to support .mkv files
  • Create a user setting to change output file format (.mp4, .mkv)

Improved League of Legends Interfacing

Implement LoL game stats to library menu, showing champion, game result, KDA and other stats.

This allows for much quicker reviewing times. See image attachment for an example.

leagueSnip

Improve GitHub Actions Workflow

There are a few tasks that need to be done with the current GitHub Workflow.

  • Properly generate change logs and source code attachment for Nightly release
    • Might be related to the nightly tag not updating with all the current commits on (pre)release
  • Automate and draft Stable releases
    • At the moment, I am manually building the next stable release on my own device and uploading the files as needed. It would be ideal to just generate it the same way the nightly releases are done, except set the release as a draft and have a contributor (me) publish it when the next stable release is ready.
  • Separate LibObs building
    • This way, builds don't take really long and waste computing time. Its not necessary to build LibObs everytime we make a small change
  • Use nvpatch to patch the executable
    • This will force the use of the dedicated gpu on the system (preventing recording issues)

Keybinding

Using version 1.0.52

when I try to create a "toggle recording keybind" it just goes blank after pressing the keyboard combination

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.