Python Web Proxy Convinces Sonos To Stream YouTube

[Maurice-Michel Didelot] owns a Sonos smart speaker, and was lamenting the devices inability (or plain unwillingness) to stream music from online sources without using a subscription service. YouTube Music will work, but being a subscription product there is a monthly fee, which sucks since you can listen to plenty of content on YouTube for free. [Maurice] decided that the way forward was to dig into how the Sonos firmware accesses ‘web radio’ sources, and see if that could be leveraged to stream audio from YouTube via some kind of on-the-fly stream conversion process.

What? No MP4 support for web radio? Curses!

So let’s dig in to how [Maurice] chose to approach this. The smart speaker can be configured to add various streaming audio sources, and allows you add custom sources for those. The Sonos firmware supports a variety of audio codecs, besides MP3, but YouTube uses the MP4 format. Sonos won’t handle that from a web radio source, so what was there to do, but make a custom converter?

After a little digging, it was determined that Sonos supports AAC encoding (which is how MP4 encodes audio) but needs it wrapped in an ADTS (Audio Data Transport Stream) container. By building a reverse web-proxy application, in python using Flask, it was straightforward enough to grab the YouTube video ID from the web radio request, forward a request to YouTube using a modified version of pytube tweaked to not download the video, but stream it. Pytube enabled [Maurice] to extract the AAC audio ‘atoms’ from the MP4 container, and then wrap them up with ADTS and forward them onto the Sonos device, which happily thinks it’s just a plain old MP3 radio stream, even if it isn’t.

Sonos doesn’t have the best reputation, let’s say, but you can’t deny that there’s some pretty slick tech going on inside. Here’s a neat hack we covered last year, adding Sonos support to an old school speaker, and a nice teardown of a IKEA Sonos-compatible unit, which uses some neat design hacks.

Thanks [mip] for the tip!

Featured image by Charles Deluvio on Unsplash.

Getting Back That YouTube Dislike Button

Ah, Google. Very few companies have mastered the art of creating amazing technology and products, and then so effectively abandoning and mishandling them. Case in point, YouTube. Citing “dislike attacks”, which are coordinated down-voting of particular videos, YouTube opted to hide the dislike counter on all videos. It could be pointed out that dislikes still impact the recommendation algorithm the same way they always have, and that creators still see their dislike counts on their own dashboard.

There might be something to the idea that YouTube doesn’t like the notoriety of their Rewind videos leading the dislike count, with 2018 at nearly 20 million. There may even be validity in the theory that corporate partners don’t like visible dislike numbers on their videos. Regardless, YouTube made the change, and people hate it. Their platform, so nothing you can do about it, right?

“Life, uh, uh, finds a way,” to quote my favorite fictional mathematician. Yes, a hacker, one of us, has figured out a workaround. [Dmitrii Selivanov] has put together the “Return YouTube Dislike” browser extension, which does a couple of things. First, it is pulling archived data about videos, taking advantage of the gap in time between the official announcement, and the removal of the dislike API.

But for new videos? That’s where things are harder. If you install the extension, your video likes and dislikes are tracked, and the combined user data is used to extrapolate an estimated dislike count on any given video. [Dimitrii] is also working on a way to allow individual channels to share their stats with the project, to give more official numbers for their videos.

The extension is open source, and the Chrome web store shows over a million users. Linus Tech Tips, along with a bunch of other channels, have covered this, so check out their videos for more.

Continue reading “Getting Back That YouTube Dislike Button”

This Week In Security: The Apache Fix Miss, Github (Malicious) Actions, And Shooting The Messenger

Apache 2.4.50 included a fix for CVE-2021-41773. It has since been discovered that this fix was incomplete, and this version is vulnerable to a permutation of the same vulnerability. 2.4.51 is now available, and should properly fix the vulnerability.

The original exploit used .%2e/ as the magic payload, which is using URL encoding to sneak the extra dot symbol through as part of the path. The new workaround uses .%%32%65/. This looks a bit weird, but makes sense when you decode it. URL encoding uses UTF-8, and so %32 decodes to 2, and %65 to e. Familiar? Yep, it’s just the original vulnerability with a second layer of URL encoding. This has the same requirements as the first iteration, cgi-bin has to be enabled for code execution, and require all denied has to be disabled in the configuration files. Continue reading “This Week In Security: The Apache Fix Miss, Github (Malicious) Actions, And Shooting The Messenger”

Dedicated box to play new videos from a handful of content creators.

Dedicated Box Makes YouTube More TV-Like

[Exposed Wire] is a huge fan of YouTube and consumes a lot of content. If that sounds familiar, maybe you should build a dedicated YouTube box, too. You get to push buttons, there’s LEDs, and you can take a break from other screens to look at this one for a while. [Exposed Wire] wanted to make it easier to watch the latest videos from their favorite creators, but we would argue that this is more fun, too.

The Rasberry Pi 4 inside checks every five minutes for new videos by keeping track of the creator’s total number of videos in a text file and doing a comparison. If one of the channels has a new video, then the corresponding LED lights up and the new video’s URL is linked to the button. Press the button and the Raspi opens the browser, goes the the URL, maximizes the video, turns off the LED, and updates the video count in the text file.

We like the construction job here. The 1/4″ MDF walls are connected by 3D-printed L-brackets in PETG. At first, [Exposed Wire] mounted the LEDs and buttons to a PCB, but that was really fiddly so they printed panels instead. Combined with the bracket around the screen, the finished build looks good. Check out the build montage after the break.

Regular old YouTube videos not doing it for you anymore? Try watching them at low resolution on an LED matrix.

Continue reading “Dedicated Box Makes YouTube More TV-Like”

Engineering The Less Boring Way

We have to admire a YouTube channel with the name [Less Boring Lectures]. After all, he isn’t promising they won’t be boring, just less boring. Actually though, we found quite a few of the videos pretty interesting and not boring at all. The channel features videos about mechanical engineering and related subjects like statics and math. While your typical electronics project doesn’t always need that kind of knowledge, some of them do and the mental exercise is good for you regardless. A case in point: spend seven minutes and learn about 2D and 3D vectors in two short videos (see below). Or spend 11 minutes and do the whole vector video in one gulp.

These reminded us of Kahn Academy videos, although the topics are pretty hardcore. For example, if you want to know about axial loading, shear strain, or free body diagrams, this is a good place to look.

Continue reading “Engineering The Less Boring Way”

Playing Youtube Videos At Incredibly Low Resolution On LEDs

Since the high-definition era, screens with many millions of pixels have become commonplace. Resolutions have soared into the stratosphere, and media has never looked clearer or crisper. However, [gatoninja236] decided to go the other way with this build – an LED matrix capable of playing Youtube videos.

The execution is simple. A Raspberry Pi 3, with the help of a Python script, downloads a Youtube video. It then runs this through OpenCV, which parses the video frames, downconverting them to suit a 64×64 pixel display. Then, it’s a simple matter of clocking out the data to the 64×64 RGB LED matrix attached to the Raspberry Pi’s IO pins, where the video is displayed in all its low-resolution glory.

Is it a particularly useful project? No. That doesn’t mean it’s not without value however; it teaches useful skills in both working with LED displays and video data scraped from the Internet. If you simply must have more pixels, though, this ping pong video wall might be more to your liking. Video after the break.

Continue reading “Playing Youtube Videos At Incredibly Low Resolution On LEDs”

Community Rallies Behind Youtube-dl After DMCA Takedown

At this point, you’ve likely heard that the GitHub repository for youtube-dl was recently removed in response to a DMCA takedown notice filed by the Recording Industry Association of America (RIAA). As the name implies, this popular Python program allowed users to produce local copies of audio and video that had been uploaded to YouTube and other content hosting sites. It’s a critical tool for digital archivists, people with slow or unreliable Internet connections, and more than a few Hackaday writers.

It will probably come as no surprise to hear that the DMCA takedown and subsequent removal of the youtube-dl repository has utterly failed to contain the spread of the program. In fact, you could easily argue that it’s done the opposite. The developers could never have afforded the amount of publicity the project is currently enjoying, and as the code is licensed as public domain, users are free to share it however they see fit. This is one genie that absolutely won’t be going back into its bottle.

In true hacker spirit, we’ve started to see some rather inventive ways of spreading the outlawed tool. A Twitter user by the name of [GalacticFurball] came up with a way to convert the program into a pair of densely packed rainbow images that can be shared online. After downloading the PNG files, a command-line ImageMagick incantation turns the images into a compressed tarball of the source code. A similar trick was one of the ways used to distribute the DeCSS DVD decryption code back in 2000; though unfortunately, we doubt anyone is going to get the ~14,000 lines of Python code that makes up youtube-dl printed up on any t-shirts.

Screenshot of the Tweet sharing YouTube-dl repository as two images

It’s worth noting that GitHub has officially distanced themselves from the RIAA’s position. The company was forced to remove the repo when they received the DMCA takedown notice, but CEO Nat Friedman dropped into the project’s IRC channel with a promise that efforts were being made to rectify the situation as quickly as possible. In a recent interview with TorrentFreak, Friedman said the removal of youtube-dl from GitHub was at odds with the company’s own internal archival efforts and financial support for the Internet Archive.

But as it turns out, some changes will be necessary before the repository can be brought back online. While there’s certainly some debate to be had about the overall validity of the RIAA’s claim, it isn’t completely without merit. As pointed out in the DMCA notice, the project made use of several automated tests that ran the code against copyrighted works from artists such as Taylor Swift and Justin Timberlake. While these were admittedly very poor choices to use as official test cases, the RIAA’s assertion that the entire project exists solely to download copyrighted music has no basis in reality.

[Ed Note: This is only about GitHub. You can still get the code directly from the source.]