As of 3-30-2020, if you want the “paste-one-line-it-just-works” go to:

http://blog.vpetkov.net/2020/03/30/raspberry-pi-netflix-one-line-easy-install-along-with-hulu-amazon-prime-disney-plus-hbo-spotify-pandora-and-many-others/

^^^ PLEASE USE POST USING ABOVE LINK FOR MY “ONE-LINE IT JUST WORKS” ^^^
(IGNORE EVERYTHING BELLOW THIS AS IT’S THE ORIGINAL DEVELOPMENT WORK)
===================================================================

Everything from this point down is out of date as of: 3-30-2020

This was my initial “netflix on the raspberry pi 4 development” blog post. Leaving it on here due to the comments, initial work, info for those interested, but I highly recommend using the easy method above (linked).

Last libwidevine extract: 3-29-2020 – v.4.10.1610.6 of libwidevine – EVERYTHING CONFIRMED WORKING


Chromium has made substantial changes the way libwidevine (and a few major things around DRM) are loaded/used/etc. They have also made changes to the setting and reading of the user-agent propagation. For some time (~2 months or so) — the combination of this badly broke Netflix. It seems they have undone the lib loading in the last couple of versions, and user @Spartacuss discovered the user-agent fix.

The instructions here (as of 3-29-2020) work for: Netflix, Hulu, HBO, Disney+, Amazon Prime, Spotify, Pandora, and many others.

The Raspberry Pi 4 model with 4GB of RAM is the first cheap hardware that can provide a real “desktop-like” experience when browsing the web/watching Netflix/etc. However, if you have tried to run Netflix on the Pi, you have quickly entered the disgusting mess that exists around DRM, WideVine (Netflix being one example of something that needs it), and Chromium.

After hours and hours of effort, I finally discovered a quick and elegant solution that lets you use the latest default provided Chromium browser, without having to recompile anything in order to watch any WideVine/DRM (Netflix, Spotify, etc) content.

Background and the DRM Problem

If you are not familiar with this, the short version is that Netflix (and many others, ex: Spotify) use the WideVine “Content Protection System” – aka DRM, and if you want to watch Netflix or something else that uses it, you need to have a WideVine plugin+browse supported integration. Chrome, Firefox, and Safari make it available for x86/amd64 systems, but not for ARM since technically they don’t have ARM builds.

Chromium, the project Chrome is based on, does have an ARM build, but it does not include any DRM support, and technically it does not include widevine support by default (*caveat here, which helps us later)
So long story short, the question becomes “how do you enable DRM/WideVine support in Chromium?”.

It seems there are two main solutions out there: use an old (v51, 55, 56, 60) version of Chromium which has been “patched” with widevine support (kusti8’s version seems to be the most popular one – except since the new Netflix changes, that also does not work), which requires uninstalling the latest Chromium available, installing the old/patched one, and dropping in older widevine plugins; the second option is to use Vivaldi – a proprietary fork of Opera which also has been “sort of patched”, but it still needs a valid libwidevinecdm plugin (see bellow) and it has it’s own issues (and also…it’s Opera…in 2019…who uses Opera?)

After a lot of research and trial and error, I discovered a much more elegant solution – use the extracted ChromeOS (armv7l – yay) binaries and insert them into Chromium + make everything think it’s ChromeOS (user agent)

Netflix/Hulu/Spotify with the Default Raspberry Pi Chromium Browser

Enough theory – let’s do this in 2 quick steps!
0.) If you have tried Netflix/etc already, open Chromium and clear your browser history + cookies. Otherwise it will cache the “failed” DRM components.

1.) Download the latest extracted ChromeOS libwidevine binary and extract it:

NOTE: Credit and thanks to @Spartacuss for discovering user-agent method with .desktop file!

NOTE: You can verify that these are the *official* versions from ChromeOS:
https://dl.google.com/dl/edgedl/chromeos/recovery/chromeos_12739.105.0_elm_recovery_stable-channel_mp-v2.bin.zip

NOTE: UPDATED (Last re-extracted from ChromeOS on: 3-23-20)
version: 4.10.1610.6 (see optional script below how to check version)
filename: libwidevinecdm.so
md5sum: 6857e5f102651bfa977eb739b86bf75e
sha256sum: 678c21b5ebf459919f9dcde100af8f59e580b6bed56b1cae1ae5eb43a7029e17

2.) Completely QUIT all Chromium windows.
Start Chromium with the new Application Menu under “Internet”: Chromium (Media Edition)
Open a new tab, and go to: https://bitmovin.com/demos/drm You should be able to see the movie on the left. (While this still works, it will show “No DRM” unless you set the Chromium user-agent from within the app – which breaks Netflix. BitMoving unfortunately looks for that first. Just go to Netflix/Your media source directly.)
You can now play Netflix, Hulu, HBO, Spotify, Pandora, Disney+, Amazon Prime, and many others!

Please note that If you can see the video on the left, this means the DRM plugin has worked! From this point on, anything that does not work (ex: Netflix sometimes breaks after a browser update) is due to the site specifically filtering User Agents/doing other “tricks”. So for example, if Netflix does not work, Spotify, Pandora, Hulu, Amazon Prime, HBO, etc will still work. The BitMovin website is the “real” test on wether the DRM plugin has worked.(While still technically true, if your Chromium user-agent is not set from within the app itself, which breaks Netflix, BitMovin will show “No DRM” even though the DRM decryption works)

Solution for the occasional “screen tearing”

Updated: 4-7-2020

It seems the Pi’s raw CPU frequency is still not powerful enough for decoding 100% of the time. While 97-98% of the time is good enough, you will get the occasional “screen tearing” (https://en.wikipedia.org/wiki/Screen_tearing), especially in scenes with fast motion.

Users Otaku, DM (and thanks to Luca for testing/extra info!) have found a solution which was mentioned on https://lb.raspberrypi.org/forums/viewtopic.php?t=246179 by user Greysvandir.
I had to add a few more things and I created a compressed and slightly automated 😉 version:
# sudo apt install -f compton
$ mkdir -p ~/.config/lxsession/LXDE-pi
$ cd ~/.config && wget https://raw.githubusercontent.com/dastorm/Compton-xfce-config/master/compton.conf
$ cp -f /etc/xdg/lxsession/LXDE-pi/autostart ~/.config/lxsession/LXDE-pi/autostart
$ echo “@usr/bin/compton –backend glx” >> ~/.config/lxsession/LXDE-pi/autostart
$ echo “xrandr –output HDMI-1 –mode 1280×720” >> ~/.config/lxsession/LXDE-pi/autostart
The result is no tearing with 1080p@60fps video.

(OPTIONAL) Get libwidevinecdm version
If you want to check your *actual* libwidevinecdm version, the easiest and quickest way is using user VMX’s elegant python solution:

This will give you the version:
4.10.1610.6

Alternatively, if for some reason you want to, you can compile a binary (C) checker by:

a.) Create a file called “get_cdm_version.c with:

b.) Compile the binary with: gcc get_cdm_version.c -o get_cdm_version -ldl

If you want a binary version for some reason (I don’t know why you would given python method), and you can’t compile it yourself, and you trust me (why?!), feel free to grab my already compiled version:

c.) Place a copy of the libwidevinecdm.so in the same directory as your binary
d.) Run it

^^ Here the Version is: 4.10.1610.6

(OPTIONAL: Older Versions)
Here are the last few OLDER versions in case you need them (note the unique date in the url):

http://blog.vpetkov.net/wp-content/uploads/2019/08/libwidevinecdm.so_.zip
http://blog.vpetkov.net/wp-content/uploads/2019/07/libwidevinecdm.so_.zip

319 Thoughts on “Netflix and Spotify on a Raspberry Pi 4 with Latest Default Chromium

  1. RonnieB on April 16, 2020 at 2:58 am said:

    Sorry to bother you but I am still not able to get access to Netflix.

    I get the following — I think I have done everything specified in your post

    ——————

    Pardon the interuption

    This title is not available to watch instantly.Please try another title. – 1044

    M7121-1331

    Before I got here there was mention of a Netflix plugin as well as the widevinecdm pluggin.

    Can you give any advice?

  2. Fantom on April 11, 2020 at 5:26 am said:

    Hi, I just wanted to thank you! After one full day of trying to set up netflix on my RPi3, only this method worked! Thanks again!

  3. Putang on April 7, 2020 at 6:29 am said:

    Hi Ventz, great stuff over here.
    I curled (https://blog.vpetkov.net/2020/03/30/raspberry-pi-netflix-one-line-easy-install-along-with-hulu-amazon-prime-disney-plus-hbo-spotify-pandora-and-many-others/) yesterday on my raspipi4-4GB, everything went out smoothly. Netflix, Disney+, and Amazon Prime roll from the spoofed Chromium browser.
    However, I’m experiencing a bit of screen tearing.
    I’ll give a shot at the fix you uploaded last night:

    I’ll keep you posted with the outcome,

    BTW, I’m wondering whether installing KODI would break the situation, do you have any clue about it.
    Cheers.

    • Ventz on April 7, 2020 at 11:57 pm said:

      Thanks. KODI is definitely not the issue. The command you saw will fix this. Also run:

      And then reboot.

      • Larsba on April 15, 2020 at 6:33 am said:

        Hey thanks a lot for these easy solutions, while waiting month to month until somebody like you does fixed the Raspberry web experience.

        I can now watch smoothly Disney+, Netflix, or listen to Spotify.

        But i’ve got a Problem with my USB Soundcard. On above streams video and audio perfectly, but if I’m switch to, for example arte.tv/de, comes no sound. It’s fix when I stop the video and 30 seconds later the video plays fine with sound! On the same site the live TV is crashing sometimes.

        You got a idea for this??
        I had no sound problem on both, Netflix and Disney +

        Thaaaaank you so much man, now my living room experience is updated to the 21 century :p

        • Ventz on April 15, 2020 at 2:33 pm said:

          Larsba, not familiar with arte.tv. Between the custom USB sound card and the site, I don’t really have a way to check it, but it sounds like they may just be outputting video/audio via a strange custom plugin rather than using standard html5+drm?

  4. Ventz on April 6, 2020 at 11:45 pm said:

    @@@ UPDATE: As of 4-7-20, I believe I have completely eliminated any and all screen tearing! @@@

  5. Hey, that’s a real fortune have you around!
    I got a minor problem: for Disney+ on my Rasp 4 4GB it randomly stops streaming giving an error message, after reloading the page it streams again with sound deactiveted.

    Thank you for your good work!

    • Ventz on April 6, 2020 at 11:44 pm said:

      Bfa – Are you using the latest Raspbian (10 – buster) with the latest curl+sh install?

      I haven’t noticed this, but then again, I don’t watch Disney+ much. If it continues to happen with the latest, I’ll dig into it.

      • It’s only on long videos. around the 50 Minute mark. I did an update today, but I don’t have a clou what curl+sh install means. 🙁

        • Ventz on April 7, 2020 at 9:21 pm said:

          Open a terminal on the Pi, and re-run the:

          After that try:

          And then reboot.

  6. Gordon Grun on April 2, 2020 at 12:47 am said:

    It WORKS!!! It fucking works!?! So cool, thanks a lot, Ventz!!! Great job, cheers! 🙂

  7. Joseph on March 30, 2020 at 9:48 am said:

    I’ve tried 4 times to get this method working, however it continues to fail with error 83 with Disney+.

    Can someone post exactly the versions of Raspbian you are using, as well as version of Chromium you are using?

    Also, once I flash Raspbian onto the microSD card and boot up, should I NOT bother with updating the OS and apps?

    Can someone explain what the *.desktop file does? I tried opening it in nano editor and it’s blank. The user agent string thing confuses me. I know how to change the user agent string in standard Chrome, but not in Chromium under Linux.

    Also, I had the strangest behaviour of Chromium Spoofed where it crashed every time I tried to enter it’s settings.

    Any help greatly appreciated.

    • Joseph – look at the updated post from the last 24 hours. If the .desktop file is blank, that’s the problem. Try re-downloading it. It customizes Chromium for you with the user-agent set from the app-loader side. Yes, you can use the latest version of Raspbian, and also, you can update your apps as normal (this is the main benefit!).

      I am working on something even better than all of this, which I should have out in the next few days.

    • Joseph on March 30, 2020 at 11:17 am said:

      To answer my own questions:

      1) The *.desktop chromeos spoof adds a proper user agent string in the command line arguments (right click the flie and hit “properties”

      2) Latest version of Raspbian and Chrome work just fine

      I just got it working with Disney+. Apparently I was mixing up 2019 files with 2020 files using wget and that obviously created a bunch of problems.

      My Rapsberry Pi 3B+ is not powerful enough to handle the DRM decryption in Disney+ – I ended up with the PI temperature symbol flashing after just 1 minute of video and the PI just froze.

      So looks like only a PI 4 would be capable to handle Disney+ streaming. Given the headache, it’s not worth the time to do it. I spend a day trying to give my PI 3 a new life.

      Time to call it quits and get a Roku or Firestick.

  8. Ventz on March 29, 2020 at 8:41 pm said:

    For everyone subscribed to the comments here 🙂

    @@ UPDATED libwidevinecdm on 3-29-20 to: v 4.10.1610.6, and added a script to check the version @@

    Also updated directions and added automation steps to fix screen tearing.

  9. @Otaku, @DM, @Luca – updated blog with your info (+gave you credit!), and I added a short/direct “block” that people can hopefully run easily.

    Thank you for finding this and testing it!!

  10. To fix screen tearing disable or turn off the default compositor, and install “compton”, it’s in the Raspbian repositories and can be installed using Terminal or Synaptic Package Manager. To configure compton add a “compton.conf” file to the “.config” folder in your home directory, there’s a working example in the link below.

    https://github.com/dastorm/Compton-xfce-config/blob/master/compton.conf

    • Thank you! User Luca bellow was interested too. I’ll check it out – I can update the blog post (+give you credit)

      • Otaku on March 26, 2020 at 1:26 pm said:

        Your welcome, compton will also fix screen tearing for YouTube, Dailymotion etc, and your video files. It also works with other Raspberry Pi distributions.

        • @Otaku how to disable the default comp? sorry i am noob.

          • I found this:

            https://lb.raspberrypi.org/forums/viewtopic.php?t=246179

            Perhaps @Otaku can verify its accuracy as I also am not 100% on how to deactivate/activate.

            Here is the what Greysvandir stated:

            sudo raspi-config
            Advanced setting / Compositor / Disabled

            sudo apt install compton
            to the ‘/etc/xdg/lxsession/LXDE-pi/autostart’
            adding
            @usr/bin/compton –backend glx
            xrandr –output HDMI-1 –mode 1280×720

            DM

          • @raspdenis and DM,
            For Raspbian using Raspi-Config to disable the built in compositor is right. I used the words turn off or disable as some people might be using a different desktop than Raspbian, I’m using XFCE with Raspbian which has a menu setting to enable / disable the compositor.

            I didn’t edit the “/etc/xdg/lxsession/LXDE-pi/autostart” file, I just copied the “compton.conf” file to the .config folder in the home directory, which overides any global settings, either way will work.

      • If you haven’t seen it Eta Prime and Novaspirit Tech on Youtube give credit to you…

        https://www.youtube.com/watch?v=X85dGZu29Qg

        https://www.youtube.com/watch?v=I_vhgriOd1E

        • Wow! 🙂 — I am glad others are finding this useful. Thanks for sharing!

          • Thanks for the follow up Otaku, Luca and the scripting and blog, Ventz. 🙂

            DM

          • Ventz,

            Check your scripting for the tear free viewing. Are you trying to add those lines to “/etc/xdg/lxsession/LXDE-pi/autostart”? I’m not sure that is where it is adding those extra lines. After following the scripting and turning off xcompmgr compositor, my Pi 4 would not boot to the Desktop. I had to add those lines to the autostart in /etc/xdg/lxsession/LXDE-pi/. The script seems to add them to the Pi user’s .config folder and not to /etc/xdg/lxsession/LXDE-pi/autostart. Is this my ignorance here?

            DM

          • Ventz on March 29, 2020 at 5:06 pm said:

            Let me setup a nee Pi. I have so much custom junk at this point that I may have something else that’s making it work.

            I also found a way to extract the versions from libwidevine so I want to start posting version numbers, and Ill post code to check your own.

          • Ventz on March 29, 2020 at 8:38 pm said:

            DM – ok, went through a new install, everything has been udpated. See new directions. Also extracted a new version of libwidevinecdm, and added a way to pull the version from the lib, so users can confirm they have the latest. Added a few more things to the directions.

    • Thank you Otaku, your configuration file has worked splendidly. My instructions:

      install compton on raspbian:

      sudo apt install compton

      Place the compton config file in .config/compton.conf

      I’m using chromium in kiosk mode, so what I did is to create a script for that:

      compton &
      chromium-browser –kiosk https://www.netflix.com

      Then I call it:

      startx /abs/path/script.sh

      The result is no tearing with 1080p@60fps video

      @Ventz this solution should be part of the instructions

      • ***IMPORTANT INFO ABOUT COMMENT SECTION AND CODE***

        @Ventz (as you may already know) the leave reply form will convert the dash dash character in a longer dash, this results in the corruption of all the command that use this specific syntax, most of the time the users (especially the less experienced) just hand-type the command without noticing the difference. It may leave the user without any clue on what is the problem. For example:

        Putting DM user comment in action, this:

        @usr/bin/compton –backend glx

        Might be missread as a single dash argument but it is not! This result in compton failing SILENTLY because of how this kind of script work.

        Can you please disable this feature from the form or put a disclaimer?

        • Luca – I am not filtering the comments (no setting) — I think by default they try to strip out javascript/injections.
          You can post code blocks however with:

      • @Luca,
        Your welcome, glad it’s working, I know Ubuntu Mate has compton as an option, I don’t know why it’s not available in all linux distros.

  11. DRM Browser Check didn’t pass – still works for me, even Netflix. Be careful and don’t rely on the DRM Check.

    • The problem is you still need the user agent for that to be set in the “user variable” (vs browser startup).

      I can also re-extract the latest available file.

    • yes, you’re right. the bitmovin failed but netflix video can be played.

      finally.

      thanks guys! this is a great blog post! 🙂

      now it’s time to modify the compositor.

  12. Barend on March 16, 2020 at 10:25 am said:

    My Spotify (http://open.spotify.com) no longer gives me the full web player. Instead, it just has a button that says “View on Spotify”. This is new since March 16, 2020. I didn’t do any updates/make changes since yesterday March 15 when the web player still worked fine.

    • Barend – sorry, just saw this comment. Is this still happening for you? I know Spotify recently made some pretty substantial changes.
      Try to play with the user agent/string (adjusting for CrOS vs ARM). Spotify definitely looks at it and tries to “open their player” whenever they think one exists (which by default is always, except if you are coming from a Chromebook)

  13. Hello, finally everything works again (until next chrome update i guess XD) but i’m wondering if the fix for the tearing problem still apply to most recent version:

    I’m using raspberry pi 4 with chrome 78.0.3904.108, apparently scaling down the resolution to 1280×720@59.94Hz doesn’t solve the tearing problem, i tried a different bunch of configurations but still get problems, any hint on this?

    I tried to check the vid stat using ctrl+alt+shift+D key but the resolution it gives is different from 720p (it’s even smaller), any chance they will add hw acceleration for this?

    • Ventz on March 14, 2020 at 2:28 pm said:

      The main problem is the Pi4 at the end of the day is underpowered for this. The CPU would have to increase quite a bit, or (and?) they would have to add hardware offload as you mentioned. The GPU is definitely good — it can actually drive two 4K HDMI outputs, which is insane for something as small and cheap as this. The RAM is finally good, so it really just comes down to bumping the CPU core frequency.

      I’ll look into the tearing to see if there are any solutions. While this is useful, to be completely honest – I use a FireTV stick for my primary netflix experience because it’s just “easier”. I started working on this originally because the steps/”solutions” were either half-baked or just insane (ex: use a browser that’s 3-4 years old, with pinned settings, and revert all security patches…). I do use the PI for media, but it’s mostly to listen to Spotify/Pandora/music since it makes a great external device for that.

    • Luca – see post by Otaku:

      To fix screen tearing disable or turn off the default compositor, and install “compton”, it’s in the Raspbian repositories and can be installed using Terminal or Synaptic Package Manager. To configure compton add a “compton.conf” file to the “.config” folder in your home directory, there’s a working example in the link below.

      https://github.com/dastorm/Compton-xfce-config/blob/master/compton.conf

      If it works, I can update blog post.

      • Paulo Keglevich on March 27, 2020 at 3:37 pm said:

        I’m using Chromium Version 78.0.3904.108 (Official Build) Built on Raspbian , running on Raspbian 10 (32-bit) on Raspberry PI 3B+. I applied @Spartacuss script above but still not running Netflix. It still gives me the HTML5 message :(. Nevertheless the DRM test detect it as being used!! Any idea?

        Thanks

  14. Can confirm spartacuss method works. The user-agent needs to be set from the command line and user-agent extension is disabled or removed. Of course you’ll also need libwidevinecdm.so put in /usr/lib/chromium-browser/

    My chromium version : Version 78.0.3904.108 (Official Build) Built on Raspbian , running on Raspbian 10 (32-bit)

    I’ve made a desktop config that adds Netflix-Chromium to the menus AudioVideo section. It starts chromium as an app (no toolbars) on netflix.com and uses it’s own user-data-dir so it has its own extensions, cache, etc. That way I don’t need to worry about disabling or removing ther user-agent extension from my main chromium. Since quotes and double dashes seem to get mangled in these comments I’ll just post a link to ithe desktop file.

    https://drive.google.com/file/d/1at3JvbBm4nZ6gzKnND6fQ1Qz-Q1UGZT9/view?usp=sharing

    Throw that desktop file in your ~/.local/share/applications
    Add a nice netflix.png icon to ~/.icons
    That should work

  15. Ventz on March 1, 2020 at 12:07 pm said:

    @@@ IMPORTANT REPLY TO EVERYONE ABOUT NETFLIX @@@

    As of 3-1-2020:

    The lib loading change has been fixed by the Chromium project (after many people complained) in January and February – thank you all!

    This means Netflix should work again!

    With that and @Spartacuss’s user-agent method (updated instructions with this, and made a downloadable file so that it’s easier to apply for users not familiar with editors/etc), everything should work again!

    As as of 2-10-2020:

    * Chromium has made substantial changes the way libwidevine (and a few major things around DRM) are loaded/used/etc and specifically on how it is used for Netflix’s DRM + extra requirements. Short summary: without recompiling Chromium with a specific patch/loader support, this will never work again for Netflix.
    * The instructions here *still work* for: Hulu, Hulu, Disney+, Spotify, and many others.
    * The instructions here *DO NOT (and will not going forward based on the change Chromium made) work for: Netflix
    * User @Spartacuss discovered the solution for the user-agent fix for anything that uses the previous lib-loading method with a working user agent.

    • This works and i can play netflix, and no screen tearing when xcompmgr is disabled.
      BUT i get colour blocking in netflix, i.e. looks fine for a bit then half of a face will have a slighlty blotched colour.
      If i use kodi 18 and play neflix inside kodi the no colour blocking, but i need to download raspex which is a pre built raspbia image, so i cannot fully trust it.
      What would be good is a way of installing kodi in the standard raspbian but with netflix installed, which is not easy.

  16. mr spambucket on March 1, 2020 at 3:48 am said:

    This set up failed for me as well. I also attempted to set up Vivaldi on arm7 using these instructions provided by vivaldi URL (https://help.vivaldi.com/article/raspberry-pi/) which are essentially the same instructions laid out here. My setup passed the DRM test suggesting what everyone is saying is correct: its not my browser, it’s Netflix. It’s got me thinkning..

    Vivalidi’s longwinded github command essentially places WidVineCdm in both /opt/vivaldi and ~/.config/vivaldi/. Curious weather this must be done wth chromium as well. Look here ~/.config/chromium/Default/File System/Plugins/000/ there is a manifest pertining to WidVineCdm. Can anyone explain what this does and and why it’s in our home config folder?

    • Using Mr. Spambucket’s suggestions from his December posting, I was able to run Netflix on the most recent version of Chromium released in Buster on a Pi 4. (Didn’t try Spotify, Hulu, or the like.) I had to turn off the User Agent Switcher extension and use the switch –user-agent=”Mozilla/5.0 (X11; CrOS armv7l 10895.56.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36″. My guess is Netflix is looking for the extension somehow and not at the version. I haven’t tried modifying a desktop shortcut yet but I think this is the solution at the moment for now. Thanks, Mr. Spambucket. 🙂

      DM

      • Oops…. Wrong guy. LOL… Spartacuss… Spambucket…. Close, right?

        Using Spartacuss’ suggestions from December worked. Thanks, Spartacuss! 🙂

      • JankoRyzykant on March 8, 2020 at 1:45 pm said:

        Huge thanks @DM and @Spartacuss!
        Confirmed on Buster with Chromium 78.0.3904.108.
        I tried almost everything leaving this option apart as “it will not work for sure” 😉

        Cheers,
        Janko

        • Ventz on March 8, 2020 at 2:31 pm said:

          @JankoRyzykant – the “problem” (good thing) is that it looks like the Chromium project reversed the change due to the complaints that poured in. I wrote the last post a few weeks before they reversed the change and published it in March.

          I’ll update the instructions around the user-agent (and give credit to @Spartacuss)

          • JankoRyzykant on March 8, 2020 at 5:43 pm said:

            @Ventz – big thanks should go to you first for taking care of constant digging on this matter!

            Let’s hope that Chromium devs won’t destroy anything in the future again 😉

            Cheers,
            Janko

  17. Getting “Title not availabe to watch instantly”
    Raspbian 10 Chromium Version 78.0.3904.108.

  18. I am running a recent build on a Pi 4.
    Chromium is the defualt that came with this image: Version 78.0.3904.108.
    I can log into Netflix, show previews will run. When i select an episode or movie to watch i am told “This title is not available to watch instantly.” Error code M7121-1331.
    Could this be that it is detecting the incorrect location?

  19. Tried this today (16 Feb 2020), still can’t watch NetFlix, Error Code M7121-1331.
    I’m using Pi 4 Model B, Raspbian Buster (10).

    Why do they make it so hard on ARM zzz…

  20. This solution is not working in recent release of raspbian buster.

  21. Small update, latest version of raspbian get shipped with chromium 78, the error remains, I wonder if Netflix is actively checking to block raspberry

  22. Guimar on January 25, 2020 at 1:59 pm said:

    I have a Raspberry PI 4GB, with Chromium version 78.0.3904.108 (Official Build) Built on Raspbian. Today I followed this tutorial and I was successfully being able to play the video demo at the https://bitmovin.com/demos/drm webpage, I guess it means that the DRM problem is now fixed.

    But when I try to play any movie on Netflix, the following error appears:
    “Pardon the interruption. This title is not available to watch instantly. Please try another title. Error Code M7121-1331”

    For Prime Video:
    “Unsupported Browser. This web browser isn’t compatible with Prime Video. Please use one of the following web browsers: Chrome (latest version)”

    Does anyone knows a work around for both Netflix and Amazon Prime?

    BTW Spotify plays perfectly 🙂

  23. Hello,
    I just installed libwedevine but I can’t go to Netflix.
    I have the error streaming error.
    I am on chromium with a version 74.0.3729.157.
    Can you help me?
    Thank you so much!

  24. Cameron on January 10, 2020 at 10:36 pm said:

    The above steps allowed my Raspberry Pi 4 to pass the DRM test. I can even play Disney+ on the default Chromium. However, I couldn’t get Netflix to work. It plays the previews and I can play the movie trailers full screen but movies give me a M7121-1331 error which Netflix support says is a problem with Chrome extensions.

  25. It looks like I need to do an update on software. UK Channel 5 broke on Chromium this week. Since I don’t see my name in any of the first page of comments I probably haven’t updated since August or earlier.

    Is it safe to do an update or will I break DRM again? Is the DRM fix at the top of the page still current and working if I do an apt-get upgrade today?

    Are there any better solutions?

    Dave

  26. Robert on January 2, 2020 at 9:28 am said:

    –Setup
    Browser: Chromium 74.0.3729.157
    libwidevinecdm.so – owned by root and chmod 755
    User-Agent: Mozilla/5.0 (X11; CrOS x86_64 11895.95.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.125 Safari/537.36

    DRM tests are passing but netflix still displays error: (M7121-1331)

  27. spartacuss on December 27, 2019 at 5:18 pm said:

    Thanks for this helpful article and the files.

    Here is a solution to make this work again (27/12/109).
    My configuration:
    – Raspberry Pi 4
    – Raspbian OS 10 “Buster” with default Chromium (74.0.3729 32 bits)

    The problem with the instructions on this that the User Agent Switcher for Chrome extension is being detected. It must be disabled or uninstalled. See https://www.reddit.com/r/netflix/comments/4eojzx/all_streaming_error_m7121/.
    The user agent on chrome can be also be spoofed by using the –user-agent=”my_custom_user_agent” command line switch to launch the application from the terminal.

    The other method of changing the user agent that is commonly mentioned on the web is to use the Chrome developer tools > Network Conditions. The problem is that this is not persistent and only works in the one currently active tab/page.

    Creating a custom .desktop launcher file in /usr/share/applications is more convenient than launching the browser from the terminal. It’s possible that the widevine.so DRM module might detect that it’s running on 32bit Arm rather than an x86 PC platform, so I used the user agent string from an Chromebook running ChromeOS and Chrome which also uses armc7l architecture like the Raspberry.

    Instructions:
    1) Follow the instructions on this page to add the widevine.so DRM module to the folder /usr/lib/chromium-browser. Do not install the User Agent Switcher plugin.

    2) Create a new .desktop file to launch chromium with the Chromebook UA. Open a new file in Mousepad and paste the text provided below. Save it in your home folder with the name “chromeos-browser.desktop”

    3) Open a terminal and copy the file to /usr/share/applications with the command
    “sudo cp chromeos-browser.desktop /usr/share/applications”

    4) You should now have 2 Chromium entries in your applications menu. Use the original entry to open chromium and clear browsing history and cookies before attempting to connect to any drm protected services.
    There is a bug? in chromium which seems to prevent you from clearing the browser history while spoofing the useragent, so you will have to do this using the original launcher every time.

    Text for .desktop File:
    [Desktop Entry]
    Version=1.0
    Name=Chromium (ChromeOS spoofing)
    GenericName=Web Browser (ChromeOS spoofing)
    Comment=Access the Internet
    Exec=chromium-browser %U –user-agent=”Mozilla/5.0 (X11; CrOS armv7l 11895.95.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.125 Safari/537.36″
    Terminal=false
    X-MultipleArgs=false
    Type=Application
    Icon=chromium-browser
    Categories=Network;WebBrowser;
    MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https;
    StartupNotify=true
    Actions=NewWindow;Incognito;TempProfile;
    X-AppInstall-Package=chromium-browser

    [Desktop Action NewWindow]
    Name=Open a New Window (ChromeOS spoofing)
    Exec=chromium-browser –user-agent=”Mozilla/5.0 (X11; CrOS armv7l 11895.95.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.125 Safari/537.36″

    [Desktop Action Incognito]
    Name=Open a New Window in incognito mode (ChromeOS spoofing)
    Exec=chromium-browser –incognito –user-agent=”Mozilla/5.0 (X11; CrOS armv7l 11895.95.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.125 Safari/537.36″

    [Desktop Action TempProfile]
    Name=Open a New Window with a temporary profile (ChromeOS)
    Exec=chromium-browser –temp-profile –user-agent=”Mozilla/5.0 (X11; CrOS armv7l 11895.95.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.125 Safari/537.36″

    • spartacuss on December 27, 2019 at 5:39 pm said:

      The .desktop text I pasted has been stripped by this site’s form validation of double hyphens “–” for the command line switches and replaced with a single hypen “-“. every line starting with “Exec=” will need to be corrected before it will work. Eg “–incognito –user-agent=…” ” is OK, but “-incognito -user-agent=..) is not OK

    • Spartacuss,

      Is this still working for you using Netflix and the newest version of Chromium from Buster (v 78)?

      DM

  28. That rocks, thanks a lot.
    Tested with the latest version “September 2019” of raspbian .

  29. I have a raspberry 3 and after much trial and erro and about to take the “build the kernel” apporach to run “Chrome x86”. It is meantioned that the Ras-PI 3 is model armv7 instead of the Ras-PI 4 armvl7l..
    In any case after applyint the updates and packages mentioned above. The following command worked!

    chromium-browser –user-agent=”Mozilla/5.0 (X11; CrOS armv7 6946.86.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.84 Safari/537.36″ http://netflix.com

    I could not get the Chromium and user-aget to work. But this let me play Netflix 🙂

  30. hI! Thanks a lot! this works on the pi4 (2gb).
    Im trying spotify and it works very very laggy. I mean, the music freezes continuously and all the system become slowly. Im runing it over Raspbian 10, xfce4, and last chromium realease from official repository.

    But i dunno, Im thinking there’s something wrong with my Raspberry pi4 cause im not getting good performance using it like a desktop / media center for my non-smart TV. When im browsing on Chromium or Vivaldi, even Midori, the system freeze for a while randomly like if something’s causing a neckbottle problem.
    Im using a 9v FAN (software controlled) and a little heatsink so isn’t a heat problem.

  31. Tamauri on November 15, 2019 at 2:33 pm said:

    i tried to do as written, but now I instead get the message:
    “We cannot find all the required components to play Netflix on this device.
    Please visit chrome://plugins, ensure that both “Netflix” and the “Widevine Content Decryption Module” plug-ins are enabled and their “Always allowed” setting is checked.”

    I’m new tro raspberry pie so not sure what I am supposed to do now that I have tried to edit my Chromium browser as decribed above. It no longer prompts me to instal a HTML or silverlight thing, but still whants me to do something, I’m not sure how to do, when working in Chromium instead of chrome.

  32. ProstoFil on November 11, 2019 at 2:14 pm said:

    Hi
    Just tried your approach for new Rasbian installation on my Rasp 3B+. Double checked Chrome version as well as user-agent string. Test page shows video fine, Netflix shows trailer but fails on movies 🙁

  33. As it seems to work for some and not for others – a couple of questions:
    – would this require the mpeg-2 or vc-1 license for hw decoding?
    – what about other browsers like firefox – any luck, anybody?

  34. Thanks a lot for your solution!
    I can’t see Netflix but it does not matter 😉
    But now, I can listen my Apple Music playlists in Chromium with my RPI4!
    Great job!

  35. Any news on this?

  36. Raspberry Pi 3B+
    Chromium 74.0.3729.157
    Error Code: M7121-1331

    You said it would work with Chromium 76. Is it somehow possible to run 76 on any Pi?

  37. Hello,
    Not working for me….. i discribe exactly what i have done :

    1 :
    i have install last Raspbian : /2019-09-26-raspbian-buster.img

    2 :
    $ sudo su
    # cd /usr/lib/chromium-browser
    # wget (http://blog.vpetkov.net/wp-content/uploads/2019/09/libwidevinecdm.so_.zip
    # unzip libwidevinecdm.so_.zip && chmod 755 libwidevinecdm.so

    3 :
    Completely QUIT all Chromium windows and re-start it.
    Grab the “User-Agent Switcher for Chrome” extension: https://chrome.google.com/webstore/detail/user-agent-switcher
    Right click on the extension, go to “Options” and “Add” the following in the fields:
    a.) New User-agent name: Netflix
    b.) New User-Agent String: Mozilla/5.0 (X11; CrOS x86_64 11895.95.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.125 Safari/537.36
    c.) Group: Chrome
    d.) Append: Replace
    e.) Indicator Flag: NFX

  38. Niclan on October 11, 2019 at 3:50 pm said:

    So I have tested this on Manjaro on my PI running chromium 77.0.3865.90. And it still seems to be failing, I have had exactly the same issue when pulling ‘chromium-widevine’ from AUR and building it via pkgbuild ignoring architecture.

    I get the following when using bitmovin:

    Unable to instantiate a key system supporting the required combinations
    (DRM_NO_KEY_SYSTEM)

    The point:
    > Even Chromium 77 is giving issues.
    > This might be due to some arch package instead of your library version.

    • Well this makes things even more interesting 🙂

      • Hai-Yue Han on October 28, 2019 at 11:22 pm said:

        Any updates on getting Netflix to work?

      • squidink7 on December 23, 2019 at 7:08 pm said:

        I am having the same problem, spotify does not detect the DRM as being enabled. I think it may be something to do with the architecture of Manjaro being armv8 instead of armv7.

      • Ventz,

        Looks like there is a new release for Chromium in the update for Buster now – 78.0.3904.108 for Pi 4. Have you tried Widevine with this yet?

        DM

      • Is Chromium now looking for a DRM Component for Widevine under chrome://components? There isn’t one there but other explanations of Chrome allude to it:

        https://beebom.com/chrome-components/

        v56 used a pseudo plugin to reference the Widevine library to make it work.

        DM

      • Ventz,

        Here is something that may help.

        “According to Vivaldi developers there needs to be a manifest.json file for Chromium 79+. I tried to use that manifest file for Opera but I couldn’t make it work.”

        https://forums.opera.com/topic/28663/widevine-and-opera/56

        I saw this on an Opera forum and have tried to place the WidevineCDM folder in different places within chromium-browser, opt/goolge but without any luck. Perhaps this could help others find a solution on this. I tried a few things but still at a road block. When trying to load the manifest.json as an extension in Developer Mode, chromium complains about errors and unknown keys. All this is a bit beyond me at the moment. We may still need to wait for a 79+ release from Buster (current: 78.0.3904.108) as you originally suggested. There may be a twist once it’s released, however. Unknown.

        Thanks,

        DM

  39. For whatt it’s worth, I just thought to report back success with Kodi. I have Kodi on the same raspberry pi 4 on which I tried this. Kodi Netflix plugin seems to work. If I read the code correctly, it set’s up UA string:

    Mozilla/5.0 (X11; CrOS armv7l 7647.78.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36

    I tried that with chromium and this version of libwidevinecdm.so, but no success with browser. One of the Kodi plugins goes and extracts some version of chromebook os for the cryptt library, perhaps a different one than this one.

    I just thought to rerport back as perhaps someone can make this guide also work by looking at what Kodi plugin does. Good luck!

    Plugin here: https://github.com/CastagnaIT/plugin.video.netflix.git

  40. Just an update from 9/25 — From everything I can tell, both v76 and v77 work. The problem is neither of those are included with Raspbian. It almost looks like Netflix is somehow reading through the UserAgent and still detecting the real Chromium version, and not allowing v74.

    At this point, the best bet is to petition Rasbpain’s Chromium maintainer to upgrade the official package to v76, which really should have been done anyway because v74 is EOL.

  41. Fantastic!

  42. I’m using a Raspberry Pi 3B with Raspbian “Buster”. Chromium Version 74.0.3729.157 (Official Build) Built on Raspbian , running on Raspbian 10 (32-bit). I installed the WideVine and User Agent just as you described (last night) and it passes the DRM test.

    User Agent String: Mozilla/5.0 (X11; CrOS x86_64 11895.95.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36

    I can login to NetFlix and open a show but every time while its starting to load I get a brief pause then a Whoops message saying its not available right now… and error code M7121-1331.

    I haven’t been on Linux in many many years, and a newbie to Raspberry Pi.. so please go easy on me.
    Any suggestions on how to fix?

  43. Hello!
    Installed Raspberry 4 today with latest Image, chromium version after finishing all updates is the exact one as in the latest post (74.0.3729.157) and I also took the libwidevinecd.so_.zip from your latest post, as the inital one from above did not work either. I doublechecked the permissions on it it’s 755 and the test page works also. I am getting the same error on Netflix as RomeoFour8 posted earlier: M7121-1331. It looks like Netflix does not want raspberry users to be happy… 😉
    Best regards,
    Daniel

    • I am not sure why they do this at all…it seems like there is massive demand for this. Outside of the comments/posts here, I have received over 2000 emails about this.
      Their browser/UA agent seems completely arbitrary and pointless, and yet it causes a headache.

  44. Ventz,

    I installed the latest libwinedevine from this page, changed user agent and checked chrome version (double and triple-checked) – the DRM test works – but Amazon instant video does not, I always get the message on using a current browser (no error code, link to system requirements). I tried different user agents but always same results.

    Can you use tcpdump to record all packets sent between Amazon and a working browser? (preferably Rpi4 but a working Linux Chrome would also work) Sadly I only have a version working on Win10 and it might be too different to find out what is going on…

    Best, Alex

    • Sadly, the Pi default/stable browser is now out of date. Chromium pushed up to the next release and the Pi foundation/repo has not updated it. You cannot sniff the SSL traffic without having a CA cert (to do MITM) on your traffic.

  45. Hi, thanks for the nice hack! Unfortunately I also just get the error M7121-1331 from Netflix. Spotify says: “Spotify no longer supports this version of Chromium. Please update your browser for uninterrupted listening.”. I have copied the latest library from this page. I also have the latest chromium (chromium-browser 74.0.3729.157-rpt5 armhf) from rasbian debian 10.0. Root owns the lib, and it has 755 perms. Could there be newer version of user agent string available?

    Also the test page says license load failed, but says at lower checkboxes that there is the libwidevinecdm is found.

    Looking forward for tips 🙂 BTW, this is also from Finland, if that makes a difference. System locale is however en_US.UTF-8. System is Raspi4 4GB.

    BR,
    ikke

    • … little more info, this is spit out in command line from chromium-browser on such encrypted page:

      [1607:1607:0908/214719.817071:ERROR:output_protection_proxy.cc(50)] Not implemented reached in void OutputProtectionProxy::EnableProtection(uint32_t, const OutputProtectionProxy::EnableProtectionCallback &)

    • ikkeT – the browser agent should match the browser version (minor # and all).

      Please double check from scratch steps and info. Just setup a new pi 4 and it works on my side.

    • Ventz,

      I am having the same problems like Ikke on a RPi 4 with 4 GB. I have followed the instructions exactly. Is this libwidevinecdm.so correct? Is it 64 bit from the Chromium OS image? I noticed Chromium is running as 32 bit when viewing the version number:

      74.0.3729.157 (Official Build) Built on Raspbian , running on Raspbian 10 (32-bit)

      Is the current version for the DRMyou have posted already out of date? (That would be surprising.)

      I am using the following user agent string:

      Mozilla/5.0 (X11; CrOS x86_64 11895.95.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36

      I have noticed the CrOS is referenced to an x86 processor instead of armv7l but think this isn’t important as Chrome should be the part that is referenced when the string is looked at, I believe.

      Appreciate the previous work that you have done and any insights that may help me resolve.

      DM

      • DM – Take a look at the one I just uploaded. That passes through the DRM, but yes – something is going on with Netflix.
        As soon as I re-installed Raspian and updated, my version stopped working too.

        What makes this more interesting is the DRM decryption is working (so for example, Spotify will work).

        It’s truly something about the agent. I suspect it’s because ChromeOS has v. 76, and that’s where the latest plugin is extracted from.
        What’s interesting is that the exact same user agent on my Chromebook works, and on the Pi it does not, which makes me wonder if Netflix is somehow detecting the v74 within the browser.

        Will poke at this in hope of finding out what’s going on.

        • I confirm, others but Netflix do work with your updated library, thanks so far.

        • Ventz,

          That might be a possibility with the versions of DRM to Chromium. I tried changing the User Agent to the latest and greatest version number for Linux Chromium, 76.0.3809.132, but that didn’t help so it may be reading from somewhere else. It could also be that Chromium is broken in v74 too. It’s been known to happen. I tried submitting a ticket long ago when the Kusti method stopped working after updating Chromium. Google closed the ticket right away because the Chromium that I was using was already 4 or 5 major revisions behind what they had out for Linux. LOL. I think it was the most current for Pi at the time though. I’d say Chromium seems to have become more stable with your Widevine DRM method compared to the v56 days. I also noticed in v74 that while trying to access Hoopla, it complained that the browser was not supported or was out of date. Perhaps v74 does not present itself “properly” and so Netflix is rejecting it. Was your working copy using v72? Do you still have that image? Is it v72 vs v74 and v74 is broken? Just a thought.

          Thanks,

          DM

          • You can find the old ones at the bottom. I think the one from “August” is the “v72” one. I suspect exactly the same thing you mentioned – v74 has a different set of APIs than v76, and the latest widevine is compiled against “latest stable” which has moved to v76 directly.
            Even though the user agent is set to v76, Netflix is probably pulling some API that tells it otherwise.

            I actually upgraded to Raspbian “bullseye” to see if v76 exists, and nothing sadly. Funny enough, Netflix crashes (with “Aw Snap”) the browser tab, which tells me it’s trying to access something that’s not there/causing a resource issue/etc.

            Verified that Pandora, Hulu, Amazon, etc all work — and so does the DRM page.

            I suspect soon enough with v76 this will start working again, but until then…the only solution is compiling Chromemium on arm v7l.

          • Hi Ventz,

            Can you please explain for a amature how to compilate Chromemium on arm v7l?

            Thanks in advance.

          • There is no easy way to explain this 🙂 — also, it is a bit more for the armv7, and especially difficult for the Pi.

    • Digging into this. Grab the latest download (I replaced the Septebmer binary with the correct one – it will work for Spotify and others, jconfirmed it) – but it will *not* work for Netflix as of right now.

      That is, it decrypts Netflix, but Netflix is throwing an error on the User Agent string.
      There may be something else going on too.

  46. Ventz, thanks for sharing this. got the latest version installed, but netflix is still not working. Although, Spotify streams perfectly on the Raspberry PI 4. Hope you find a way to make Netflix

    • Just verified that it works with the September URL (http://blog.vpetkov.net/wp-content/uploads/2019/09/libwidevinecdm.so_.zip) and the latest user-agent string

      If it doesn’t work for you, please double check permissions (the file needs to be owned by root and chmod 755), make sure your agent string is correct and selected, and make sure you are on the latest browser (currently: 74.0.3729.157).

  47. Great guide, works fine on both Netflix and Spotify. Thanks alot!

  48. Thanks for the guide, I have the same issue as U-P on Chromium 74.0.3729.157

  49. Could’t get Netflix to work dispite a very clear and good guide. I get “Oh, something went wrong” (in my native language, swedish) message and a error code M7121-1331. Could it be that Netflix for Finland, where I am, have a different DRM or something?

    • U-P – can you check the exact chrome version and paste here. Chrome/Chromium released a new version a couple of days ago so it’s possible they changed the plugin again.

      • woodnpen on September 6, 2019 at 10:25 am said:

        Same here, but your test website and spotify work
        I use Chromium 74.0.3729.157 Built on Raspbian , running on Raspbian 10
        Thx!

        • Woodnpen – can you try this version: http://blog.vpetkov.net/wp-content/uploads/2019/09/libwidevinecdm.so_.zip
          (just extracted and uploaded. Haven’t had time to test yet – let me know if it works and i’ll update)

          • I have the same issue. I just tried your new upload but couldn’t get it to work

          • Just verified that it works with the September URL (http://blog.vpetkov.net/wp-content/uploads/2019/09/libwidevinecdm.so_.zip) and the latest user-agent string

            If it doesn’t work for you, please double check permissions (the file needs to be owned by root and chmod 755), make sure your agent string is correct and selected, and make sure you are on the latest browser (currently: 74.0.3729.157).

          • RomeoFour8 on September 7, 2019 at 8:21 pm said:

            I get the error (M7121) using the zip file linked above (2019/09).

            Chromium version 74.0.3729.157 (Official Build) Built on Raspbian , running on Raspbian 10

          • Just verified that it works with the September URL (http://blog.vpetkov.net/wp-content/uploads/2019/09/libwidevinecdm.so_.zip) and the latest user-agent string

            If it doesn’t work for you, please double check permissions (the file needs to be owned by root and chmod 755), make sure your agent string is correct and selected, and make sure you are on the latest browser (currently: 74.0.3729.157).

Leave a Reply to Ventz Cancel reply

Your email address will not be published. Required fields are marked *

>> NOTE: Please use <code>...</code> to post code/configs in your comment.

Post Navigation