Hacker News .hnnew | past | comments | ask | show | jobs | submit | moonlighter's commentslogin

Unifi cams don't stream RTSP, they stream FLV v1 (FlashVideo) on 3 streams over plain TCP on port 7550, one per quality channel. And yes, they stream that TO the NVR who adopted them only... then the NVR recodes and sends RTSP (configurable).

For the adoption stage, UniFi cameras broadcast on UDP port 10001 using a proprietary TLV (Type-Length-Value) protocol. The Protect console listens on this port and picks up new cameras immediately. 4 bytes `\x01\x00\x00\x00` sent as UDP broadcast to `255.255.255.255:10001`

The response then contains these fields:

  | Hex Code | Field | Data |
  |----------|-------|------|
  | `0x01` | MAC Address | 6-byte hardware address |
  | `0x02` | MAC + IP | Combined MAC and IPv4 address |
  | `0x03` | Firmware Version | String |
  | `0x0B` | Hostname | String |
  | `0x0C` | Platform (Short Model) | String |
  | `0x0A` | Uptime | 64-bit integer |
  | `0x13` | Serial | String |
  | `0x14` | Model (Full) | String |
  | `0x17` | Is Default | Boolean (adopted vs unmanaged) |
After discovery, the Protect console: 1. Connects to the camera via SSH (default credentials) 2. Configures the Inform URL (TCP 8080) 3. Camera registers with the controller

So conceivably at step 2 you could use your own modified URL to point to your own NVR and then grab the FLV streams from there.


Thanks!

> 1. Connects to the camera via SSH (default credentials) 2. Configures the Inform URL (TCP 8080)

Not what I expected but okay. Looks like there's a `set-inform` command. It looks like it opens a TLS connection, doesn't check the certificate, and tries to opens a websocket:

    GET /camera/1.0/ws HTTP/1.1
    Pragma: no-cache
    Cache-Control: no-cache
    Host: ...
    Origin: http://ws_camera_proto_secure_transfer
    Upgrade: websocket
    Connection: close, Upgrade
    Sec-WebSocket-Key: ...
    Sec-WebSocket-Protocol: secure_transfer
    Sec-WebSocket-Version: 13
    Camera-MAC: ...
    Camera-IP: ...
    Camera-Model: 0xa601
    Camera-Firmware: 5.0.83
    Device-ID: ...
    Adopted: false
    x-guid: be9d8e45-62a8-ae84-8b23-71723c7decaf
I might try accepting the websocket but I have a feeling I'll get stuck about there without knowing what the server is supposed to send over it. I'm debating if I'm willing to buy a Unifi Protect device or not.

...then again I did a search for a couple strings and ran across https://github.com/keshavdv/unifi-cam-proxy . It's the opposite direction of what I want (makes a standard camera work with Unifi Protect) but maybe contains the protocol details I'm looking for...


> ...then again I did a search for a couple strings and ran across https://github.com/keshavdv/unifi-cam-proxy . It's the opposite direction of what I want (makes a standard camera work with Unifi Protect) but maybe contains the protocol details I'm looking for...

Actually, yes. I got lazy and just asked Claude Code to write a server, using that as a reference...and it worked. It was able to change the password and have it start streaming flv video. Not exactly a production-quality implementation but as a proof-of-concept it's quite successful.


There you go! I wrote a proxy server to deal with Unifi cameras and also dewarp their 360 camera streams... and used Claude Code to reverse-engineer most of what's going on. Sniff the entire network traffic between their NVRs and cams via Wireshark/TShark, grabbing the NVR's web socket streams, and also had it write a custom METAL shader pipeline native to Apple silicon to replace ffmpeg which was way too slow to deal with 5K 360 streams and dewarp them. All in a matter of hours. Amazing times ;)

I actually just registered here to comment the first time after lurking for years ;) I had the displeasure to upgrade from a broken g3 flex to a g5 flex, and then finding out they cut out the rtsp stream functionality for unknown (probably business) reasons. I dont plan to buy a protect appliance, and frigate should still handle my nvr stuff, so this comment thread comes really handy right now. Is there any possibility for you to publish this proxy to github or similar?

If I'm understanding correctly moonlighter's proxy speaks Ubiquiti's protocol on both ends, "just" altering the video stream along the way. Which is pretty cool but not what you're looking for.

I'd like to make a production-quality version of what you're looking for: acts as an RTSP server, adopts Ubiquiti cameras. As a single-binary thing that you could run anywhere, maybe even on the camera itself. (self-adoption? emancipation, as in "emancipated minor"?) But it'll take me a bit. My RTSP library right now is client-only, so it needs a bit of expansion to do this. Server support is in my TODO list along with several other changes. https://github.com/scottlamb/retina/issues/89


Does Alphabet/Google have any other significant alternative revenue streams though besides their ad revenue? And won't that decrease significantly the more people use AI tools for research than firing up a google web search? I find myself using Claude more and more doing web research and comparing products/reviews...without getting a single ad served up from Google.


I tried to find pricing for it (the top "contact sales" is a no-starter; too much initial friction. Just tell me how much it costs?! At the footer is a pricing calculator... I asked for pricing for 10 top-level pages and 5 sub-level pages (they explain the difference)... came out to a whopping $16,500 (you're reading that right... SIXTEEN THOUSAND). No thanks.


Hahaha are you the one who submitted the form with the email address "FUCK_YOU@DUMB.COM"?

That calculator is for agency services. LiftKit itself is free.


Bless you for responding to all these comments. The realness is amazing.

Good luck! I always wanted something like this, too.


this seems to be for custom design services. IANAL but the libraries and design language seems to be open source and free to use.



Next.js without Tailwind ... why not just make it a fuckin tailwind plugin lol


Because I didn't/don't know tailwind super well.

There is a community plugin, though. https://github.com/jellydeck/liftkit-tailwind


Indeed; if you look at the top nav this is a site that's an agency first and a design system second.

This design system really deserves its own site.


Agreed. New docs are under construction and they'll be posted on a separate website. The agency came first and then liftkit came after, which is why it's hosted on there now. But I'm shutting down agency operations and so the whole thing will be liftkit eventually.


That seems super useful, as my dock is overflowing with too many apps, which I all use, just at different times for very different scenarios... like for example when producing and working on videos I use FinalCutPro, Motion and Compressor, but these three take up space when I'm in a totally different context like coding. But I don't want to remove them from the dock when not used; because if I do, I seem to forget that I have them or would need to add them back later. So this solves that perfectly!


Exactly I had the same problem with coding in different programming languages and with different clients. Glad you liked it Let me know if something is missing in the app or if there are any feature requests. Thanks for the support


Former W.R. Grace employee: Molecular Sieve Desiccant Beads (also manufactured by W.R.Grace) are even more absorbent than regular silica gel. It's found in most double-pane windows inside the metal track between both panes; slowly absorbing any moisture over many years to keep them from fogging/going 'blind'.

You can use MS to dry flowers in record time... and use it to quickly heat up baby food in a pinch if needed... just put a smaller container of food in a bigger pod filled with MS and pour water of the MS... it's ultra-rapid absorption of water creates heat as a byproduct.


I'd just learned of (and shared a link to) a related technology, "getters", which similarly hold tight vacuums in various applications for years if necessary:

<https://hackernews.hn/item?id=43498489>

Those are used in vacuum-sealed windows and glazings (the topic of the post I was commenting to).

There are also moisture scavengers put into cooling applications (refrigerators and A/C) to remove any incidental water from refrigerant, which I suspect operate more like your MSDBs.


Getters can hold tight vacuums for several decades, even! I have many vacuum fluorescent displays from the 70s still working perfectly. As long as the getter spot is shiny and not white, it is holding vacuum fine.


Ahhh. This explains why my glass panes go "bad" after 20-30 years in the harsh Montana conditions we have.


Clearly, you can just put the window in the microwave for a few seconds to refresh it ;-)


Another nuisance which really gets on my nerves is when sites specifically prevent me from pasting, typically fields where you need to put a bank account or routing number. Copy and pasting that info is WAY more accurate and error-proof than glancing at one screen and re-typing it in another. I then temporarily disable Javascript in the developer menu and re-enabled it afterwards, but that still sometimes causes issues down the line, as now the site "thinks" there isn't a value in the field because they didn't notice any typing events, etc..


It's easier to ctrl-shift-c to pick the element in the inspector, then paste into the value="" HTML in the developer tools.

Also useful on treasurydirect.gov which has a ridiculous password entry field. They make an on-screen "keyboard" with a bunch of JS buttons, you have to click those buttons to enter your password. You can't type into the password field or paste into it.


When I saw that treasury login form with the onscreen keyboard you had to click, I was absolutely flabbergasted. Thankfully they've now done away with it.


usually it isn't necessary to disable all JS, but right-click and inspect will show the text input has an attribute like `onPaste="() => return false"` which can just be changed to true instead. or just remove the attribute. I'm on my phone so the syntax may be slightly wrong but that's the gist.


>It's easier to ctrl-shift-c to pick the element in the inspector, then paste into the value="" HTML in the developer tools.

I use "Happy Right-Click" firefox addon for this. Just click the addon icon located on the address bar and voila.


In France a lot of bank websites have this on screen keyboard.

I assumed it's against keyloggers.


While I don’t agree with the implementation, I think this is usually done on forms that ask you to confirm the value a second time. The goal is not to prevent you from pasting from an accurate source; instead they are trying to prevent users from copying an incorrectly manually typed value from one field to the other. The end result just also blocks our use case…


sometimes websites forget to disable selection dragging, so you can paste in the first field and drag to the second field.


Install Don't Fuck with Paste. Thankfully I don't have to use it that often anymore so it stays hidden in the overflow section most of the time, but it's so useful when I need it.


Exactly that! Compare the simplicity from the original Dropbox app to the behemoth of what it is now...


The original Dropbox wasn't just simple to use, it was also simple to understand: you knew what it was doing and how it worked, well enough to have correct expectations about how it would behave in circumstances like having a slow or broken internet connection. I guess they now consider those circumstances to be so exceptionally rare that they can be ignored.


This was the final straw which prompted me to move off Dropbox. Initially, dropbox was wonderful, super simple and did ONE thing amazingly well. Then... the thing morphed into a monster with all sorts of "corporate america" features which I never cared for. Fine, they need to make money, I get it. Besides storing and syncing files, the dropbox app on iOS was amazing to take quick scans of receipts on the phone and sync them to the Mac and auto-process them there (via the receipts.app; great 3rd party app). Anyway, in 2023, iCloud Drive with the native Files.app on iOS does the same thing for me. Just as good, just as reliable. For free, without the bulky corporate app stuff.


But … icloud benefits from being part of the OS. Dropbox is probably technically unable to build a service that works as smoothly as icloud. It seems unfair to ding dropbox for that situation.

Having said that, I use icloud as well, together with syncthing.


If you talk to HR employees and ask them whether they feel like an employee or rather as "the employer"... based on my own findings most will tell you that they feel like the employer; even though they're just employees too.


In the US you can start an LLC "a" and later on a Holding LLC "b" and make "b" the owner of "a", so that "b" is the parent (and holding company) of "a". It's really just about how ownership is structured, and it can be done later on.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: