Homebrew Snickerstream - Unified NTR and HzMod streaming client for the 3DS

RattletraPM

Well-Known Member
OP
Member
Joined
Jan 18, 2017
Messages
897
Trophies
1
XP
8,341
Country
Italy
Thank you so much for the help, but I'm a newbie here so I got to ask... How I do that Clock+L2 thing? What is HzMod and how would improve snickerstream if you add support to it?

Again, thank you for the software. It is indeed unstable, but a great alternative to buy a $500 capture card.
  • In order to enable Clock+L2 you must shut down your 3DS, then boot it up again while holding Select. This will bring you to the Luma3DS configuration menu, which enables you to change different options as well as the one you're looking for.
  • HzMod is another streaming app made by MarcusD which uses a less hacky method to work on a 3DS, as well as having other pros over NTR. Its cons are that it's a bit less supported than NTR because it's newer (so less supported) and, as far as I know, both the app and the offficial streaming client are both closed-source (NTR itself has been closed source for a long time too, but some parts of it, such as NTRViewer, weren't). Still, I think it's really underrated and deserves more attention, so I think I'll give it a shot in the future to add support for it.
If you're asking why the Clock+L2 setting might be problematic, it's because all but N3DS Enhanced/Exclusive games out there were programmed with the Old 3DS CPU in mind, which is why Nintendo limited the CPU's clock speed and cache in these games.

Anyways, thank you for using Snickerstream! As I said, its stability depends on a lot of factors including NTR,which I don't really have a lot of control over, but I think I did my best with it so far.
 

foxtochop

Well-Known Member
Newcomer
Joined
Mar 29, 2018
Messages
46
Trophies
0
Age
30
XP
168
Country
Spain
  • In order to enable Clock+L2 you must shut down your 3DS, then boot it up again while holding Select. This will bring you to the Luma3DS configuration menu, which enables you to change different options as well as the one you're looking for.
  • HzMod is another streaming app made by MarcusD which uses a less hacky method to work on a 3DS, as well as having other pros over NTR. Its cons are that it's a bit less supported than NTR because it's newer (so less supported) and, as far as I know, both the app and the offficial streaming client are both closed-source (NTR itself has been closed source for a long time too, but some parts of it, such as NTRViewer, weren't). Still, I think it's really underrated and deserves more attention, so I think I'll give it a shot in the future to add support for it.
If you're asking why the Clock+L2 setting might be problematic, it's because all but N3DS Enhanced/Exclusive games out there were programmed with the Old 3DS CPU in mind, which is why Nintendo limited the CPU's clock speed and cache in these games.

Anyways, thank you for using Snickerstream! As I said, its stability depends on a lot of factors including NTR,which I don't really have a lot of control over, but I think I did my best with it so far.
You did it well so far!!! I hope to find some stability in it to record some games at least @30fps which imho is great for a WiFi video stream app.

Can be the Clock+L2 setting dangerous in anyway to the system? I'm using a N2DSXL. Apart from draining the battery faster, I guess.
 

RattletraPM

Well-Known Member
OP
Member
Joined
Jan 18, 2017
Messages
897
Trophies
1
XP
8,341
Country
Italy
You did it well so far!!! I hope to find some stability in it to record some games at least @30fps which imho is great for a WiFi video stream app.

Can be the Clock+L2 setting dangerous in anyway to the system? I'm using a N2DSXL. Apart from draining the battery faster, I guess.
No, not dangerous. It might make certain games freak out or crash, but that's about it.
 

JustinP

New Member
Newbie
Joined
Apr 4, 2018
Messages
4
Trophies
0
Age
41
XP
41
Country
United States
Very new around here. Just started using Snickerstream, and it is really easy to use and set up, thanks for all the effort on this.

I'm having an issue with the program from time to time, and it seems very odd and inconsistent. Usually, the quality settings seem to work as expected for me, but every once in a while, when I start the capture up, it runs at a fairly high and constant framerate, but with a very lossy picture. What makes it strange is that when this is going on, none of the quality options seem to do anything; I can use the quality presets, or I can set the Priority Factor, Image Quality, and QoS Values to 0, or I can set them all to 100, and I get the same high framerate and lossy images no matter what I do. I check the settings file and my changes are reflected in there, but they don't seem to do anything.

Any help or suggestions would be greatly appreciated.
 
Last edited by JustinP,

foxtochop

Well-Known Member
Newcomer
Joined
Mar 29, 2018
Messages
46
Trophies
0
Age
30
XP
168
Country
Spain
Very new around here. Just started using Snickerstream, and it is really easy to use and set up, thanks for all the effort on this.

I'm have an issue with the program from time to time, and it seems very odd and inconsistent. Usually, the quality settings seem to work as expected for me, but every once in a while, when I start the capture up, it runs at a fairly high and constant framerate, but with a very lossy picture. What makes it strange is that when this is going on, none of the quality options seem to do anything; I can use the quality presets, or I can set the Priority Factor, Image Quality, and QoS Values to 0, or I can set them all to 100, and I get the same high framerate and lossy images no matter what I do. I check the settings file and my changes are reflected in there, but they don't seem to do anything.

Any help or suggestions would be greatly appreciated.
This happens to me too. I would like to know if there's a way to define a consistent quality value.
 

RattletraPM

Well-Known Member
OP
Member
Joined
Jan 18, 2017
Messages
897
Trophies
1
XP
8,341
Country
Italy
Very new around here. Just started using Snickerstream, and it is really easy to use and set up, thanks for all the effort on this.

I'm having an issue with the program from time to time, and it seems very odd and inconsistent. Usually, the quality settings seem to work as expected for me, but every once in a while, when I start the capture up, it runs at a fairly high and constant framerate, but with a very lossy picture. What makes it strange is that when this is going on, none of the quality options seem to do anything; I can use the quality presets, or I can set the Priority Factor, Image Quality, and QoS Values to 0, or I can set them all to 100, and I get the same high framerate and lossy images no matter what I do. I check the settings file and my changes are reflected in there, but they don't seem to do anything.

Any help or suggestions would be greatly appreciated.
This happens to me too. I would like to know if there's a way to define a consistent quality value.
Could you set loglevel to 2 or 3 (add Loglevel=2 or Loglevel=3 to the end of settings.ini) and double check in the log.txt that your quality setting is the same over there too? Also, I doubt it'll do much in your case, but try to check if the same happens when running Snickerstream as admin.
 

JustinP

New Member
Newbie
Joined
Apr 4, 2018
Messages
4
Trophies
0
Age
41
XP
41
Country
United States
Could you set loglevel to 2 or 3 (add Loglevel=2 or Loglevel=3 to the end of settings.ini) and double check in the log.txt that your quality setting is the same over there too? Also, I doubt it'll do much in your case, but try to check if the same happens when running Snickerstream as admin.

Thanks for taking the time to help with this. The changes in the settings are reflected the level 2 log file, but they don't seem to actually be changing much. I set QOS and Image Quality to 1 and still get the same 35-ish FPS picture that looks the same as using the actual provided defaults. Running as an administrator doesn't seem to change anything.

The log file is showing a lot of messages saying that invalid or incomplete packets are being received. If the issues with the changes in settings not being reflected is some kind of a connectivity issue, I'm not sure that there's much I can do about that... I'm on gigabit fiber with a modem that is equipped to handle it, and I'm about 5 feet from the router.
 

RattletraPM

Well-Known Member
OP
Member
Joined
Jan 18, 2017
Messages
897
Trophies
1
XP
8,341
Country
Italy
I set QOS and Image Quality to 1
This is your issue then - the quality value must be higher than 10. It's actually a mistake on my side as I meant to code in a check there, but honestly... I forgot :glare:. Anyways, yeah - for the time being, if you set the quality value to anything less than 10 it will just revert to NTR's internal defaults.

The log file is showing a lot of messages saying that invalid or incomplete packets are being received. If the issues with the changes in settings not being reflected is some kind of a connectivity issue, I'm not sure that there's much I can do about that... I'm on gigabit fiber with a modem that is equipped to handle it, and I'm about 5 feet from the router.
Here comes the wall of text!

Keep in mind that dropping packets right after opening Snickerstream is to be expected (unless you're extremely lucky, the client needs to catch up a bit before it can start displaying the frames, so some packets get intentionally dropped until Snickerstream the first packet in a stream for a given frame). Not to mention, dropping a few packets here and there is completely normal and doesn't have anything to do with your connection's speed (unless you've specified an external IP address for your 3DS and you're streaming over the internet, which you shouldn't be doing for a long list of reasons, all the networking operations are happening on your WLAN which is independent from your internet speed and usually very fast). What usually causes the packet drops is the 3DS's hardware, which is already underpowered as it is, so screen streaming is only making matters worse.

Still, you should also keep in mind that the log might make you think you're dropping a hell of a lot more packets than you might be! Keep in mind that a single frame is split into 120+ UDP packets when being sent to your PC at a quality of around 40-45, and this number will only get higher if you increase the quality. And if you take into account that you're receiving anywhere from 30 to 45 of these frames per second, well, you'll quickly realize how many packets each second your PC has to receive from your console. Of course you want to try and drop as less as you can (which is why it's not a good idea to crank the quality setting all the way to 100) but even a high drop rate of 1 or 2 packets per second isn't going to affect your stream by a whole lot (and Snickerstream's log will also let you know that every other packet received for that frame are going to be ignored too, which is useful for debugging purposes but might scare you if you're only giving the log a quick glimpse!)
 

foxtochop

Well-Known Member
Newcomer
Joined
Mar 29, 2018
Messages
46
Trophies
0
Age
30
XP
168
Country
Spain
This is your issue then - the quality value must be higher than 10. It's actually a mistake on my side as I meant to code in a check there, but honestly... I forgot :glare:. Anyways, yeah - for the time being, if you set the quality value to anything less than 10 it will just revert to NTR's internal defaults.


Here comes the wall of text!

Keep in mind that dropping packets right after opening Snickerstream is to be expected (unless you're extremely lucky, the client needs to catch up a bit before it can start displaying the frames, so some packets get intentionally dropped until Snickerstream the first packet in a stream for a given frame). Not to mention, dropping a few packets here and there is completely normal and doesn't have anything to do with your connection's speed (unless you've specified an external IP address for your 3DS and you're streaming over the internet, which you shouldn't be doing for a long list of reasons, all the networking operations are happening on your WLAN which is independent from your internet speed and usually very fast). What usually causes the packet drops is the 3DS's hardware, which is already underpowered as it is, so screen streaming is only making matters worse.

Still, you should also keep in mind that the log might make you think you're dropping a hell of a lot more packets than you might be! Keep in mind that a single frame is split into 120+ UDP packets when being sent to your PC at a quality of around 40-45, and this number will only get higher if you increase the quality. And if you take into account that you're receiving anywhere from 30 to 45 of these frames per second, well, you'll quickly realize how many packets each second your PC has to receive from your console. Of course you want to try and drop as less as you can (which is why it's not a good idea to crank the quality setting all the way to 100) but even a high drop rate of 1 or 2 packets per second isn't going to affect your stream by a whole lot (and Snickerstream's log will also let you know that every other packet received for that frame are going to be ignored too, which is useful for debugging purposes but might scare you if you're only giving the log a quick glimpse!)
Wow.

As I'm studying networking and administration (TCP, UDP protocols, etc) this helped me to understand how Snickerstream works. This will help me to find a sweet spot in settings.


Also, would you recommend getting a wifi hotspot usb for using Snickerstream? Which one?
 

JustinP

New Member
Newbie
Joined
Apr 4, 2018
Messages
4
Trophies
0
Age
41
XP
41
Country
United States
This is your issue then - the quality value must be higher than 10. It's actually a mistake on my side as I meant to code in a check there, but honestly... I forgot :glare:. Anyways, yeah - for the time being, if you set the quality value to anything less than 10 it will just revert to NTR's internal defaults.

Thanks again. That makes sense, I was just trying to pick some absurdly bad values figuring I would either get an error or some obvious change in quality. I'm still not really seeing any noticeable difference between the pre-configured 'Best Quality' and 'Best Framerate settings though, so it still feels like there's something strange going on.

Keep in mind that dropping packets right after opening Snickerstream is to be expected (unless you're extremely lucky, the client needs to catch up a bit before it can start displaying the frames, so some packets get intentionally dropped until Snickerstream the first packet in a stream for a given frame). Not to mention, dropping a few packets here and there is completely normal and doesn't have anything to do with your connection's speed (unless you've specified an external IP address for your 3DS and you're streaming over the internet, which you shouldn't be doing for a long list of reasons, all the networking operations are happening on your WLAN which is independent from your internet speed and usually very fast). What usually causes the packet drops is the 3DS's hardware, which is already underpowered as it is, so screen streaming is only making matters worse.

Still, you should also keep in mind that the log might make you think you're dropping a hell of a lot more packets than you might be! Keep in mind that a single frame is split into 120+ UDP packets when being sent to your PC at a quality of around 40-45, and this number will only get higher if you increase the quality. And if you take into account that you're receiving anywhere from 30 to 45 of these frames per second, well, you'll quickly realize how many packets each second your PC has to receive from your console. Of course you want to try and drop as less as you can (which is why it's not a good idea to crank the quality setting all the way to 100) but even a high drop rate of 1 or 2 packets per second isn't going to affect your stream by a whole lot (and Snickerstream's log will also let you know that every other packet received for that frame are going to be ignored too, which is useful for debugging purposes but might scare you if you're only giving the log a quick glimpse!)

Yeah, I expect that the stream is going to take some time to get up to speed once I turn it on, and I'm not really expecting miracles from a 3DS. I'm just trying to figure out what's up with these intermittent issues I'm running into. Sometimes everything runs fine, and sometimes I start running into weird quality issues and just give up and try streaming another day.

In the meantime, I tried to check how many packets I'm dropping (just to see if it's some absurdly high number), but now I'm running into an issue where turning log level 2 on causes Snickerstream to receive no frames for 8000 ms, so it just dies.
 

RattletraPM

Well-Known Member
OP
Member
Joined
Jan 18, 2017
Messages
897
Trophies
1
XP
8,341
Country
Italy
Thanks again. That makes sense, I was just trying to pick some absurdly bad values figuring I would either get an error or some obvious change in quality. I'm still not really seeing any noticeable difference between the pre-configured 'Best Quality' and 'Best Framerate settings though, so it still feels like there's something strange going on.
I don't know if that's what you're trying to do now, but keep in mind that all the remoteplay settings are server(aka 3DS)-side and, once sent, you need to reboot your console if you want to change them. Every other setting is client-side and can be changed without a reboot (most will require you to reconnect tho).

Wow.

As I'm studying networking and administration (TCP, UDP protocols, etc) this helped me to understand how Snickerstream works. This will help me to find a sweet spot in settings.

Also, would you recommend getting a wifi hotspot usb for using Snickerstream? Which one?
A shameless plug, I know, but if you want to learn even more in-depth stuff on how Snickerstream and NTR works then you might want to check out ntr.au3 in Snickerstream's source. It's the beating heart of my streaming client and I originally intended it to be an UDF that you could just pick up and use in any AutoIt script so I made sure to comment and document absolutely everything!

About Wi-Fi USB hotspots: they can help a bit with packet drops but the difference isn't going to be too big, so I wouldn't go out and buy one just for Snickerstream unless you're having some serious streaming issues. Also, considering that the 3DS only supports WiFi b/g (source: Nintendo, MITSUMI DWMW028 WiFi Module User Manual aka the WiFi module used in your 3DS), this limits its throughput to a mere 54Mbps (!!!). This means that basically any WiFi adapter you can find on eBay or Amazon is going to provide more bandwidth than your 3DS will ever use! So, taking that in mind, I'd just look for something that can cover a big area instead of focusing on bandwidth - possibly with one (or more) external antennas. For example, something like the TP-Link TL-WN722N seems more than capable for this job.

One last heads-up: you might already know this, but your hosted network needs internet acces in order for it to work with your 3DS! This is due to a rather stupid choice made by Nintendo: when connected to any network, your 3DS pings one of Nintendo's servers and if it doesn't get any response, then the 3DS disconnects (which is the reason why it won't work with public WiFi hotspot that require you to log in before you can surf the web). So, if you want to use a hosted network, you need a second network interface that can share its internet connection with it!...Or use FakeProxy, I forgot to mention it because I'm dumb.
 
Last edited by RattletraPM,

DarkSynopsis

Well-Known Member
Member
Joined
Oct 15, 2014
Messages
483
Trophies
0
Age
33
Location
New Zealand
Website
ninjasfate.com
XP
2,596
Country
New Zealand
One last heads-up: you might already know this, but your hosted network needs internet acces in order for it to work with your 3DS! This is due to a rather stupid choice made by Nintendo: when connected to any network, your 3DS pings one of Nintendo's servers and if it doesn't get any response, then the 3DS disconnects (which is the reason why it won't work with public WiFi hotspot that require you to log in before you can surf the web). So, if you want to use a hosted network, you need a second network interface that can share its internet connection with it!

I believe the GitHub for NTR Viewer stated you could use "FakeProxy" so the 3DS could stay connected without a internet connection, been awhile since I used it though.
 
  • Like
Reactions: RattletraPM

foxtochop

Well-Known Member
Newcomer
Joined
Mar 29, 2018
Messages
46
Trophies
0
Age
30
XP
168
Country
Spain
I don't know if that's what you're trying to do now, but keep in mind that all the remoteplay settings are server(aka 3DS)-side and, once sent, you need to reboot your console if you want to change them. Every other setting is client-side and can be changed without a reboot (most will require you to reconnect tho).


A shameless plug, I know, but if you want to learn even more in-depth stuff on how Snickerstream and NTR works then you might want to check out ntr.au3 in Snickerstream's source. It's the beating heart of my streaming client and I originally intended it to be an UDF that you could just pick up and use in any AutoIt script so I made sure to comment and document absolutely everything!

About Wi-Fi USB hotspots: they can help a bit with packet drops but the difference isn't going to be too big, so I wouldn't go out and buy one just for Snickerstream unless you're having some serious streaming issues. Also, considering that the 3DS only supports WiFi b/g (source: Nintendo, MITSUMI DWMW028 WiFi Module User Manual aka the WiFi module used in your 3DS), this limits its throughput to a mere 54Mbps (!!!). This means that basically any WiFi adapter you can find on eBay or Amazon is going to provide more bandwidth than your 3DS will ever use! So, taking that in mind, I'd just look for something that can cover a big area instead of focusing on bandwidth - possibly with one (or more) external antennas. For example, something like the TP-Link TL-WN722N seems more than capable for this job.

One last heads-up: you might already know this, but your hosted network needs internet acces in order for it to work with your 3DS! This is due to a rather stupid choice made by Nintendo: when connected to any network, your 3DS pings one of Nintendo's servers and if it doesn't get any response, then the 3DS disconnects (which is the reason why it won't work with public WiFi hotspot that require you to log in before you can surf the web). So, if you want to use a hosted network, you need a second network interface that can share its internet connection with it!...Or use FakeProxy, I forgot to mention it because I'm dumb.
I'm now watching a tutorial of fakeproxy with snickerstream. So can I use the TP Link you said (or any wifi usb) as a hotspot with fakeproxy? Or fakeproxy will just work with a dedicated router? Which piece of software will I need to make use of a wifi usb as a hotspot? (I'm a bit lost in this...)

I mean: will a snickerstream, wifi usb and fakeproxy setup work better than a raw "I just connect it to my wifi"?
 
Last edited by foxtochop,

JustinP

New Member
Newbie
Joined
Apr 4, 2018
Messages
4
Trophies
0
Age
41
XP
41
Country
United States
I don't know if that's what you're trying to do now, but keep in mind that all the remoteplay settings are server(aka 3DS)-side and, once sent, you need to reboot your console if you want to change them. Every other setting is client-side and can be changed without a reboot (most will require you to reconnect tho).

I didn't know that, and I'm sure that's a lot of my problem. I'll give it another go after work. Not sure why turning on the log was killing things, but if I can just get things working decently well then I'll be fine with that. Thanks again.
 

RattletraPM

Well-Known Member
OP
Member
Joined
Jan 18, 2017
Messages
897
Trophies
1
XP
8,341
Country
Italy
I mean: will a snickerstream, wifi usb and fakeproxy setup work better than a raw "I just connect it to my wifi"?
It only makes a noticeable difference if you're far away from your router or if you're suffering from heavy packet drops. In every other case the difference will be so small that I wouldn't really go through all the effort to do it.

I'm now watching a tutorial of fakeproxy with snickerstream. So can I use the TP Link you said (or any wifi usb) as a hotspot with fakeproxy? Or fakeproxy will just work with a dedicated router? Which piece of software will I need to make use of a wifi usb as a hotspot? (I'm a bit lost in this...)
If you want to go through with it, you can find Fakeproxy in the NTR starter kit. Once it's open, set the proxy on the 3DS' connection setting to your PC's IP, port 3000. Fakeproxy is a Windows app, so it will work fine with any WiFi card on your PC. For setting up the hotspot, Windows 10 has already a built-in feature for that - there's also something similiar for Windows 7, but it's a bit more involved and requires some fiddling around with the command line.

Not sure why turning on the log was killing things, but if I can just get things working decently well then I'll be fine with that. Thanks again.
It could be because Snickerstream is taking some time to write to the logfile and it's also trying to write a lot of stuff to it. AutoIt doesn't have multithreading support, so the script has to wait until it has finished writing to the file before proceding with everything else, which might be your issue. Try to see if the same happens with loglevel 1 (which logs significantly less events that 2 or 3).
 

foxtochop

Well-Known Member
Newcomer
Joined
Mar 29, 2018
Messages
46
Trophies
0
Age
30
XP
168
Country
Spain
It only makes a noticeable difference if you're far away from your router or if you're suffering from heavy packet drops. In every other case the difference will be so small that I wouldn't really go through all the effort to do it.

The thing is sometimes works okay, I mean it just works the way it should, 30-35 fps, all okay. But some other times it just doesn't connect to the console. My router is 3 rooms away from the console (same floor).
 

foxtochop

Well-Known Member
Newcomer
Joined
Mar 29, 2018
Messages
46
Trophies
0
Age
30
XP
168
Country
Spain
I'd give it a shot then.
Yeah, it's 15-20€ for a wifi usb, it's not an expensive thing at all and maybe I can use it for other things. All I got to remember is the 54 mbps thing so I can get one for cheap.

Thank you again for all the help and for a great piece of software. Looking forward to any improvements!
 
  • Like
Reactions: RattletraPM

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    Xdqwerty @ Xdqwerty: i think im a bad person