> I mashed F5 like a degenerate. I love the style of this blog-post, you can really tell that Luke has been deep down in the rabbit hole, encountered the Balrog and lived to tell the tale.
We replaced H.264 streaming with JPEG screenshots (and it worked better)
31–40 of 332 posts
Re: We replaced H.264 streaming with JPEG screenshots (and it worked better)
#32Good engineering: when you're not too proud to do the obvious, but sort of cheesy-sounding solution.
Re: We replaced H.264 streaming with JPEG screenshots (and it worked better)
#33> The constraint that ruined everything: It has to work on enterprise networks. > You know what enterprise networks love? HTTP. HTTPS. Port 443. That’s it. That’s the list. That's not enough. Corporate networks also love to MITM their own workstations and reinterpret http traffic. So, no WebSockets and no Server-Side Events either, because their corporate firewall is a piece of software no one in the world wants and…
Corporate IT needs to die.
If you wanna kill corporate IT, you have to kill capitalism first.
Re: We replaced H.264 streaming with JPEG screenshots (and it worked better)
#34Re: We replaced H.264 streaming with JPEG screenshots (and it worked better)
#35> closes tab
Eh, there are a few easy things one can try. Make sure to use a non-ancient kernel on the sender side (to get the necessary features), then enable BBR and NOTSENT_LOWAT (https://blog.cloudflare.com/http-2-prioritization-with-nginx...) to avoid buffering more than what's in-flight and then start dropping websocket frames when the socket says it's full.
Also, with tighter integration with the h264 encoder loop one could tell it which frames weren't sent and account for that in pframe generation. But I guess that wasn't available with that stack.
Re: We replaced H.264 streaming with JPEG screenshots (and it worked better)
#36Maybe because the basic frequency transform is 4x4 vs 8x8 for JPG?
Re: We replaced H.264 streaming with JPEG screenshots (and it worked better)
#37The LinkedIn slop tone, random bolding, miscopied Markdown tables makes me invoke: "please read the copy you worked on with AI" smaller thing: many, many, moons ago, I did a lot of work with H.264. "A single H.264 keyframe is 200-500KB." is fantastical. Can't prove it wrong because it will be correct given arbitrary dimensions and encoding settings, but, it's pretty hard to end up with. Just pulled a couple 1080p's o…
Re: We replaced H.264 streaming with JPEG screenshots (and it worked better)
#38You can run all WebRTC traffic over a single port. It’s a shame you spent so much time/were frustrated by ICE errors
That’s great you got something better and with less complexity! I do think people push ‘you need UDP and BWE’ a little too zealously. If you have a homogeneous set of clients stuff like RTMP/Websockets seems to serve people well
Re: We replaced H.264 streaming with JPEG screenshots (and it worked better)
#39Or is it intra-only H.264?
I mean, none of this is especially new. It's an interesting trick though!
Re: We replaced H.264 streaming with JPEG screenshots (and it worked better)
#40> When the network is bad, you get... fewer JPEGs. That’s it. The ones that arrive are perfect. You can have still have weird broken stallouts though. I dunno, this article has some good problem solving but the biggest and mostly untouched issue is that they set the minimum h.264 bandwidth too high. H.264 can do a lot better than JPEG with a lot less bandwidth. But if you lock it at 40Mbps of course it's flaky. Try 1…
From the article:
“Just lower the bitrate,” you say. Great idea. Now it’s 10Mbps of blocky garbage that’s still 30 seconds behind.