[Release] Snickerstream - Revived! A proper release with lots of improvements and new features.

Discussion in '3DS - Homebrew Development and Emulators' started by RattletraPM, Nov 2, 2017.

  1. RattletraPM
    OP

    RattletraPM GBAtemp Regular

    Member
    205
    290
    Jan 18, 2017
    Italy
    Spagonia
    It's a problem caused by a limitation of AutoIt's sleep function that I only noticed after commiting the changes. Let me explain quickly:

    The tool locks its framerate in a pretty common fashion, aka by calculating the delta time (average milliseconds it should pass between frames minus time spent recieving and drawing a frame onscreen) and waiting that amount of time if it's greater than zero (if it's not then it means the program isn't keeping up with the framerate). Now, I knew that AutoIt's sleep function is kinda inaccurate - that's why I called this function experimental - but it would have worked just fine if its minimum sleep time wasn't limited to 10ms, which might seem like an incredibly small and irrelevant amount of time until you realize that sometimes the tool needs to sleep just a few milliseconds.

    Take into consideration this example: you set the framelock to 30 FPS which means that the average time between frames is 33.333... (repeating decimal) milliseconds and the tool takes 32ms to recieve and render the frame so the tool should wait a little bit more than 1.33ms before rendering the next frame, but since AutoIt's function can sleep for a minimum of 10ms it will end up sleeping around 7,5 times than the amount needed!

    This isn't an unsolvable issue, howerer - in the next commit I'll use timers instead of the sleep functions, which are much more accurate so they don't have this limitation.
     
    Last edited by RattletraPM, Nov 22, 2017
    astrals likes this.
  2. RattletraPM
    OP

    RattletraPM GBAtemp Regular

    Member
    205
    290
    Jan 18, 2017
    Italy
    Spagonia
    Welp, this was a pretty intense week for me irl and I almost didn't have any free time, but I've still managed to make a small update:

    - Changed the way framelocking works: the sleep function has been replaced by timers (more precise) so streaming should be much smoother and framelocking only affects the prioritized screen now
    - Screenshots will now hide the mouse cursor (partial fix for issue #6)

    It's an unstable update so, as usual, you can get it by cloning the GitHub repo.
     
  3. Heat1337

    Heat1337 Newbie

    Newcomer
    1
    0
    Nov 25, 2017
    United States
    I was just using this yesterday to record videos and it was working great. Now today I tried it and i can only get 3fps. Nothing changed for me. The only thing I can think of his that NTR crashed a few times on me and I had to reboot. Here is my log file.

    [15:23] Some packets have been dropped! Skipping current frame. (Check your connection!)
    [15:23] Packet recieved: frameID:161,isTop:1,packetNum:0
    [15:23] Packet recieved: frameID:161,isTop:1,packetNum:1
    [15:23] Packet recieved: frameID:161,isTop:1,packetNum:2
    [15:23] Packet recieved: frameID:161,isTop:1,packetNum:4
    [15:23] Some packets have been dropped! Skipping current frame. (Check your connection!)
    [15:23] Packet recieved: frameID:161,isTop:1,packetNum:5
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Packet recieved: frameID:162,isTop:1,packetNum:0
    [15:23] Packet recieved: frameID:162,isTop:1,packetNum:3
    [15:23] Some packets have been dropped! Skipping current frame. (Check your connection!)
    [15:23] Packet recieved: frameID:162,isTop:1,packetNum:4
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Packet recieved: frameID:162,isTop:1,packetNum:5
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Packet recieved: frameID:162,isTop:1,packetNum:7
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Packet recieved: frameID:163,isTop:1,packetNum:1
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Packet recieved: frameID:163,isTop:1,packetNum:2
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Packet recieved: frameID:163,isTop:1,packetNum:6
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Packet recieved: frameID:164,isTop:1,packetNum:0
    [15:23] Packet recieved: frameID:164,isTop:1,packetNum:3
    [15:23] Some packets have been dropped! Skipping current frame. (Check your connection!)
    [15:23] Packet recieved: frameID:164,isTop:1,packetNum:8
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Packet recieved: frameID:165,isTop:1,packetNum:0
    [15:23] Packet recieved: frameID:165,isTop:1,packetNum:4
    [15:23] Some packets have been dropped! Skipping current frame. (Check your connection!)
    [15:23] Packet recieved: frameID:165,isTop:1,packetNum:7
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Packet recieved: frameID:165,isTop:17,packetNum:9
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Packet recieved: frameID:166,isTop:1,packetNum:1
    [15:23] Invalid or incomplete packet recieved, skipping. This is OK if you've just started Snickerstream.
    [15:23] Quitting.
     
  4. Metalchilla

    Metalchilla Advanced Member

    Newcomer
    54
    1
    May 17, 2016
    United States
    Hi, I did a stream test on snickerstream. Everything was fine with a stable 35fps. I have a major problem though. When I am walking around in pokemon Ultra Moon the it's pixelated. (on balanced settings. Not sure about higher settings.) The quality is pretty low and pretty unwatchable for a 720p stream. Whenever i'm in a battle though, it's fine. It looks good and runs fine.
     
  5. astrals

    astrals Member

    Newcomer
    13
    0
    Jan 22, 2017
    France
    try to put your QOS value between 50-100 ( 100=use only if you have a good speed; nothing other on wifi ) or 101 ( if you read the faq you you know what +100 do )
    quality of 70 is good but if you can try 80+ ( depend on your material ) :)

    — Posts automatically merged - Please don't double post! —

    i have try to add an AVI player but not working ( i'm a beginner with auoit, i try to help, i need to fix my hook) :)
     
  6. Metalchilla

    Metalchilla Advanced Member

    Newcomer
    54
    1
    May 17, 2016
    United States
    what does 101 for QoS do? I don't see it on the wiki.
     
  7. RattletraPM
    OP

    RattletraPM GBAtemp Regular

    Member
    205
    290
    Jan 18, 2017
    Italy
    Spagonia
    Any value over 100 will disable the QoS feature. It might be useful in some specific cases.
     
  8. Metalchilla

    Metalchilla Advanced Member

    Newcomer
    54
    1
    May 17, 2016
    United States
    Ah okay. Is it also associated with the bottom screen? It seems pretty laggy regardless of the QoS value.
     
  9. RattletraPM
    OP

    RattletraPM GBAtemp Regular

    Member
    205
    290
    Jan 18, 2017
    Italy
    Spagonia
    No, if the bottom screen lags and you set the priority mode to top screen then you need to lower the priority value.
     
  10. avReal

    avReal Newbie

    Newcomer
    9
    0
    Nov 28, 2017
    Poland
    I'm about to get a hardware to use with Snickerstream, but first: will it run properly on New 2DS XL? Or should I buy New 3DS XL, which is a lot more expensive?
    Next question: what should I install on my console to run with Snickerstream? It's my first time modding hardware, so I'm pretty unsure what to do - could someone tell me?
     
  11. ImInsane

    ImInsane GBAtemp Regular

    Member
    100
    13
    Dec 20, 2014
    Brazil
    Im pretty sure u can run it in n2ds, u need to install ntr cfw, just it.
    Assuming u know how to install b9s.
     
  12. avReal

    avReal Newbie

    Newcomer
    9
    0
    Nov 28, 2017
    Poland
    Unfortunately, I don't know how to install b9s. I don't even know what it is. Like I said earlier, I'm new to modding 3DS/2DS...
     
  13. ImInsane

    ImInsane GBAtemp Regular

    Member
    100
    13
    Dec 20, 2014
    Brazil
    take a look in 3ds.guide to know how to install b9s.
    Its a Custom Firmware.
     
  14. sgkino

    sgkino Newbie

    Newcomer
    4
    1
    Sep 14, 2017
    Hong Kong
    Deeply appreciate your works & updates!!
    It keeps 30FPS or above most of the time, while I am playing Majora's Mask!!
    Thanks so much. Keep going!
     
  15. RattletraPM
    OP

    RattletraPM GBAtemp Regular

    Member
    205
    290
    Jan 18, 2017
    Italy
    Spagonia
    I've just made another small update to the GitHub source:

    - Snickerstream will now return to the connection window if the 3DS disconnects (aka a certain amount of time passes without any frames being recieved). The default amount of time is set to 6 seconds but it can be adjusted by adding/editing ReturnAfterMsec in settings.ini (setting it to 0 or a negative value will disable this feature). Thanks to /u/DaWoblefet on the 3dshacks subreddit for the suggestion!
    - Snickerstream is now set to be DPI aware (possible fix for issue #8)

    I was planning to add some more complex features to Snickerstream because I've passed two exams so I should have a bit more free time but I've been unlucky and yesterday I caught a fever... yeah, it sucks :glare: Still, I had this update halfway ready for a while now and it was very simple to code this stuff in so I decided to publish it now even if I should be getting some rest.

    Anyways I'm already feeling a bit better so it shouldn't pass a lot of time before I'll be a-ok again, so at least there's that!
     
    Bluespheal, Majickhat55 and Joel16 like this.
  16. Deathscreton

    Deathscreton Member

    Newcomer
    49
    8
    Oct 1, 2009
    United States
    Hey Rattle! I don't know if you remember me, but when you originally released Snickerstream, we connected via Steam so I could help with testing and the such. If you still need help or assistance, feel free to reach out to me regarding this. I'd be happy to lend a helping hand.
     
  17. RattletraPM
    OP

    RattletraPM GBAtemp Regular

    Member
    205
    290
    Jan 18, 2017
    Italy
    Spagonia
    Damn, it's been so long ago... Sorry if I forgot! :(
    Anyways, sure - I might publish unstable updates now because Snickerstream is a lot better and more usable than its PoC days but there are a few features that I want to code in which will require lots of testing, so I'll tell you when I need to test out some new stuff!
     
    Deathscreton likes this.
  18. Deathscreton

    Deathscreton Member

    Newcomer
    49
    8
    Oct 1, 2009
    United States
    Not at all man! I know how life can have you by the balls sometimes. I appreciate the work you put into your project, just wanted to see if there was any help we could provide! Considering my coding skills are mostly C++ based, and I don't have much (any actually) reverse engineering experience, just wanted to do what I could to help!
     
  19. avReal

    avReal Newbie

    Newcomer
    9
    0
    Nov 28, 2017
    Poland
    I'm about to install b9s. What should I do after that to run Snickerstream?

    //EDIT: cant install b9s - I dont have any other console with it, and dont have the flashcard. Soldering is not possible for me :P

    Is there any other option to run Snickerstream?
     
    Last edited by avReal, Dec 8, 2017 at 7:21 PM
  20. RattletraPM
    OP

    RattletraPM GBAtemp Regular

    Member
    205
    290
    Jan 18, 2017
    Italy
    Spagonia
    Install BootNTR Selector (it will make installing NTR much easier), then run NTR 3.6. If you need anything else, there's also a quick tutorial in the Readme.