NXMP Nintendo Switch Media Player

nxmp-banner.jpg


NXMP is an open-source Nintendo Switch media player based on MPV and FFMPEG, supporting a wide range of media file formats and codecs.
NXMP is coded by @proconsule54 and @darkxex

It support HTTP,FTP,SFTP,Samba,NFS streaming and it also support Enigma2 decoders. Starting from 0.7.0 Version it features HW Decoding for H264,HEVC,VP9,VP8,MPEG2 up to 4K HDR@30fps

NXMP it's on early versions and active dev state so expect any kind of bugs, anyways it's fully functional and tested before every release

Project repository|Stable Build
Stable: v0.9.0



Features:
  • HW Decoding (since v0.7.0) for (H264,HEVC,VP9,VP8,MPEG2)
  • Extense support of media file formats and codecs, including audio too as well​
  • Touch and controller support, control the MP as you want​
  • Video deinterlace support
  • Advanced image settings, configure the brightness and color options, change aspect ratio and rotate the screen​
  • Custom subtitles, you can configure options like color, text size and position to your preferences​
  • Full sound EQ, allow adjust the sound equalizer to your preferences, you can define presets too​
  • Chapters navigator with titles support​
  • Selector of Video/Audio/Subtitle tracks during play​
  • Playlist queue, allow to enque desired files on a playlist for non-stop play​
  • Resume play, you can continue your videos where you previusly stop it​
  • Watch status, watched videos are marked as green on file explorer​
  • Shadermania, you can apply any shader compatible with MPV to NXMP​



Media sources supported:
  • Nintendo Switch SD Card
  • USB drive attached to dock or Switch with USB C adapter (FAT, NTFS and EXT4, up to 32 drives)
  • HTTP/S files through network
  • FTP and SFTP files
  • Samba (SMB) files shared throught network
  • NFS
  • Enigma2 (allow to view TV channel from satellite decoders compatible with this protocol)


Screenshoots:

2021110300034400.jpg2021110300031500.jpg2021110300032100.jpg2021110300023000.jpg



Post here any kind of bug/suggestions.
Enjoy!

Thanks to libusbhsfs https://github.com/DarkMatterCore/libusbhsfs for USB drives support
Thanks to @averne for HW Decoding FFMpeg! and for many many hints
Thanks to @bodyXY for the banner and the icons!
Thanks to @Godorowski for player UI design and releated icons
Thanks to @Chocola for beta testing a player guide
 
Last edited by proconsule54,

proconsule54

Well-Known Member
OP
Member
Joined
Nov 5, 2019
Messages
756
Trophies
1
Age
43
XP
2,728
Country
Italy
Dev update:
A screen is better than 100 words.....

OpenGL
test-opengl-4k.png


deko3d:
test-deko3d-4k.png


This is a 4K HDR 60 FPS.
The opengl drops frames (many) the deko3d is perfect it uses nearly 0 CPU (is just the UI and events) and all the decoding/display process is done on the GPU!

WOW this is great! this was made by myself? i am not that talented, we all have to thank @averne for this great achievement for the FFMpeg tx1 and the deko3d mpv backend he is working on.

Next release will have the current OpenGL port and maybe if all is stable and works well an experimental deko3d version!


Enjoy!
 

HisegiSan

Member
Newcomer
Joined
Nov 17, 2023
Messages
6
Trophies
0
Age
44
XP
95
Country
United States
Dev update:
A screen is better than 100 words.....

OpenGL
View attachment 404809

deko3d:View attachment 404810

This is a 4K HDR 60 FPS.
The opengl drops frames (many) the deko3d is perfect it uses nearly 0 CPU (is just the UI and events) and all the decoding/display process is done on the GPU!

WOW this is great! this was made by myself? i am not that talented, we all have to thank @averne for this great achievement for the FFMpeg tx1 and the deko3d mpv backend he is working on.

Next release will have the current OpenGL port and maybe if all is stable and works well an experimental deko3d version!


Enjoy!
That is... AWESOME!

Any chance you guys might take a crack at doing the same to moonlight? Hardware decoding was added to it recently and it was a huge jump but I think there's still performance left at the table by not using deko3d. I'm not a dev though so no idea what I'm talking about really.
 
  • Like
Reactions: proconsule54

averne

Well-Known Member
Member
Joined
Jan 21, 2020
Messages
193
Trophies
0
XP
2,000
Country
France
That is... AWESOME!

Any chance you guys might take a crack at doing the same to moonlight? Hardware decoding was added to it recently and it was a huge jump but I think there's still performance left at the table by not using deko3d. I'm not a dev though so no idea what I'm talking about really.
Moonlight doesn't use mpv but yeah this could be done.
 

proconsule54

Well-Known Member
OP
Member
Joined
Nov 5, 2019
Messages
756
Trophies
1
Age
43
XP
2,728
Country
Italy
Moonlight switch uses borealis and an ffmpeg instance to do audio/video. also the developer i know is very talented so for sure he can do it.
Since i use a windows toolchain i have problems to deal with borealis so i never used so far.
Post automatically merged:

A screen of the attempt to give a more native ui to NXMP

imgui-native-test.png
 
Last edited by proconsule54,

proconsule54

Well-Known Member
OP
Member
Joined
Nov 5, 2019
Messages
756
Trophies
1
Age
43
XP
2,728
Country
Italy
Ok making two backend "together" is just a matter of how many ifdef you have to put in.... a tons...
this sometimes break just a little thing hard to find out..twice the test and so on...
Is worth of? SURE!

So to find out bugs and so on an Open Beta can be useful.
Time to compile both and make a allaround test and we are ready.

And yes a double beta (both OpenGL and deko3d) to test out!

And here it is

NXMP 0.8.3 OpenBeta
https://mega.nz/file/np1znTaD#j-APhgWWFO68XuPgPkvEF7cfyfwJeeCWrZ5LFb4ULLM

edit the config.ini if needed

Try to test a video that is hard to decode with OpenGL with the deko3d version to see how much a full GPU decoding is worth of!
Give feedback on the new Theme (is more touch friendly?)
And Have fun!

A stable release will be done once all is rock solid!

Know issues:
Exit to Home instead of HB-Menu with deko3d backend, to have a clean exit.
The deko3d have some missing features (like shader deinterlace and shadermania)
I changed lot of things...forgive me if you encounter silly bugs...is a beta...
 
Last edited by proconsule54,

bambangtales

Member
Newcomer
Joined
Dec 17, 2022
Messages
8
Trophies
0
Age
30
XP
83
Country
Indonesia
Few bugs encountered during testing both beta versions:

- File browser doesn't show date.
- Swipe gestures to seek doesn't work.
- Software decoder freeze the app (neither switch automatically nor manual settings).
 

Attachments

  • 383248743.jpg
    383248743.jpg
    132.2 KB · Views: 16
  • Like
Reactions: proconsule54

proconsule54

Well-Known Member
OP
Member
Joined
Nov 5, 2019
Messages
756
Trophies
1
Age
43
XP
2,728
Country
Italy
Few bugs encountered during testing both beta versions:

- File browser doesn't show date.
- Swipe gestures to seek doesn't work.
- Software decoder freeze the app (neither switch automatically nor manual settings).
On SD card i can't get the file date (from usb and other source it works)
The gesture are disasbled, it will renenabled when ready.
What version the opengl or the deko3d
For all, reporting bug with also the version you are using it thanks :D
 

TotalJustice

Well-Known Member
Member
Joined
Jan 28, 2017
Messages
445
Trophies
0
Age
26
XP
2,636
Country
United Kingdom
On SD card i can't get the file date (from usb and other source it works)
The gesture are disasbled, it will renenabled when ready.
What version the opengl or the deko3d
For all, reporting bug with also the version you are using it thanks :D
the call you make to `
fsFsGetFileTimeStampRaw` needs to have the path buffer be of size `FS_MAX_PATH`. all paths passed to native fs behave that way btw. also, it needs to be a normal path, so "/switch/folder/file/", not "sdcard:/switch/folder/file", idk if thats what your paths are like but thought id mention it anyway

C++:
FsFileSystem sdmc;
fsOpenSdCardFileSystem(&sdmc);
char safe_buf[FS_MAX_PATH];
strcpy(safe_buf, _path.c_str());
fsFsGetFileTimeStampRaw(&sdmc, safe_buf, timestamp);
fsFsClose(&sdmc);

here's an easy wrapper for paths that i use in my own code:

C++:
struct FsPath {
    FsPath() = default;
    constexpr FsPath(const char* str) {
        if consteval {
            std::fill(std::begin(s), std::end(s), '\0');
            for (u32 i = 0; str[i] != '\0'; i++) { s[i] = str[i]; }
        } else {
            std::strcpy(s, str);
        }
    }
    constexpr FsPath(std::string_view str) {
        std::fill(std::begin(s), std::end(s), '\0');
        std::copy(str.cbegin(), str.cend(), std::begin(s));
    }

    operator const char*() const { return s; }
    operator char*() { return s; }
    auto& operator[](std::size_t idx) { return s[idx]; }
    const auto& operator[](std::size_t idx) const { return s[idx]; }

    char s[FS_MAX_PATH];
};

btw i messaged you on retronx discord ;)
 
Last edited by TotalJustice,
  • Like
Reactions: proconsule54

averne

Well-Known Member
Member
Joined
Jan 21, 2020
Messages
193
Trophies
0
XP
2,000
Country
France
I also wanted to report a bug.

Opening certain jpg. files still crashes the NXMP (Both versions). I can send examples if you want.
Could you please upload a few examples?
But I think it might be coming from the hardware decoding. Unfortunately the hardware is rather limited (some subsampling schemes don't work, progressive/arithmetic codes are unsupported).
 
Last edited by averne,

Beetlejuice90

Active Member
Newcomer
Joined
Jul 23, 2022
Messages
29
Trophies
0
Location
Berlin
XP
316
Country
Germany
Could you please upload a few examples?
But I think it might be coming from the hardware decoding. Unfortunately the hardware is rather limited (some subsampling schemes don't work, progressive/arithemic codes are unsupported)
I just send you examples. Please check your PM
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    Xdqwerty @ Xdqwerty: @SylverReZ