For such an affordable device, there’s a lot that the Raspberry Pi can do. One of the simplest and most useful ways to use your Pi is as a low-cost alternative to a Roku or Fire TV. You can load programs like Plex and Kodi onto a Raspberry Pi to create an affordable media center device, but even those simple projects aren’t strictly necessary if you’re just looking to watch Netflix on a Raspberry Pi. While the Pi can’t quite get the job done right out of the box, giving your Pi the power to stream Netflix is pretty simple. Here’s how to watch Netflix on a Raspberry Pi.
What we’re going to do is use the Raspbian operating system to run the Chromium browser and open Netflix in Chromium on your Raspberry Pi.
For a while now, The Raspberry Pi Foundation’s Raspbian disk image has included the PIXEL desktop. PIXEL stands for “Pi Improved Xwindows Environment, Lightweight.” The image comes with Chromium, an open-source browser developed by Google. Chromium is what Chrome is based on, so it can do a lot of the same things its big brother can do – including some things that Epiphany, Raspbian’s old default browser, can’t do.
Why this is important? Because Netflix doesn’t support Epiphany, but it does support Chrome.
Unfortunately, Chrome and Chromium aren’t exactly the same, and you can’t watch Netflix using Chromium out of the box. If you try to, you’ll be greeted with a screen like this:
That’s no good. The error says that you are missing a required component to watch Netflix. That component is called Widevine Content Decryption Module.
That may sound like some weird third-party plugin, but it’s not – it’s actually included in Chrome out of the box. If you’ve ever used Chrome to stream Netflix, you’ve already used this plugin without knowing it. It’s just that while this plugin is standard with Chrome, it’s not standard with Chromium.
So what we need to do is get a version of Chromium that includes this Chrome plugin. Let’s do it!
How to watch Netflix on the Raspberry Pi
Step 1: Install Raspbian
We’ll be doing this entire project in the Raspbian operating system, so start by downloading the Raspbian disk image and writing it to a microSD card to use in your Raspberry Pi. If you’re not familiar with this process, I have good news – we’ve written an entire guide to installing Raspbian on your Raspberry Pi.
Step 2: Install Chromium with Widevine Support
In an older version of this post, we had you download and run Google Chrome OS’s recovery script to get Widevine working on Chromium. Unfortunately, that doesn’t seem to work anymore – the current version of Google Chrome OS’s recovery script doesn’t work with the current version of Chromium. Fortunately, there’s another way to get this done, and we’ve updated our guide accordingly.
What we can do is download and install a version of Chromium that has already been compiled with Widevine Support. Open up a terminal window in Raspbian and enter these two lines in order:
wget https://github.com/kusti8/chromium-build/releases/download/netflix-1.0.0/chromium-browser_56.0.2924.84-0ubuntu0.14.04.1.1011.deb sudo dpkg -i chromium-browser_56.0.2924.84-0ubuntu0.14.04.1.1011.deb
Easy enough, right?
Step 3: Not done yet!
So we’ve got the plugin installed – this should work now, right? Not so fast. Try to play something on Netflix and you’ll be greeted by this error:
So, what’s wrong?
We have to do one more step and install a Chrome extension called “User-Agent Switcher for Chrome.” That is because we need to lie Netflix a bit and have it believe that we are using Chrome OS.
So, head over to the Chrome Webstore and install the extension. Next, we’ll just need to enter some values in the extension.
Step 4: Create a new user-agent string
After installing, open the extension’s options and create a new user-agent string like this:
New user-agent name:
New user-agent string:
Mozilla/5.0 (X11; CrOS armv7l 6946.63.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Then click the extension’s icon and select Chrome > Netflix.
That’s it! Now you should be able to watch Netflix without issues.
- If you open Netflix from Terminal using chromium-browser https://www.netflix.com, you may see an error message that says something like “Failed to call method: org.freedesktop.UPower.EnumerateDevices.” To fix this, you can install UPower, a piece of middleware that deals with power management on Linux systems. To install UPower, just head back to Terminal and type sudo apt-get install upower.
- You can remove the .deb file we downloaded to save space.
Netflix is supposed to be the easy option.
BitTorrent is less complicated than this.
But you do this only once.
Sorry if my questions are stupid but I am quite new with the RPi.
I followed all the steps and when the script finishes to download the Chrome OS file and starts to unzip it, I get this message:
I can’t seem to find a valid USB drive. We need one with at least 1464 MB capacity.
0 – quit
Tell me what to do (or just press Enter to scan again).
I am running the RPi3 with NOOBS, Raspbian.
It sounds like your microSD card is running out of space?
I only mount NOOBS in dual boot with Raspbian and Recalbox.
And it is a 32 GB so I don’t think it came from there, maybe because of the dual boot?
Have you expanded the file system on your SD card when formatting and burning the image?
I have the SAME problem with the same configuration above.
If anyone have a clue…
Option 14 downloaded chromeos_9000.91.0_daisy-skate_recovery_stable-channel_skate-mp-v2.bin… Seems the kpartx still did stuff, however, the mount command just gives me a list of valid commands suggesting a syntax error? I can’t figure it out. I have the right file path and name for /tmp/chrome…
Thx for the tutorial. But it doesn’t work at my RPi3 with Raspbian. With the recovery script I got an other version of the bin -> chromeos_9000.91.0_daisy-skate_recovery_stable-channel_skate-mp-v2.bin. I have copied the libwidevine*.so files to /usr/lib/chrome… But it doesn’t work. Widevine is not listed in chrome://plugins or chrome://components. Do you have any ideas?
After successfully following all the steps indicated, give me the following Netflix error: M7121-1331-P7. Any suggestion?
I got the sames problems that previous people:
– after downloading file : “I can’t seem to find a valid USB drive. We need one with at least 1464 MB capacity.”
– with kpartx command : failed to stat() –av
So I found binaries here: https://bugs.launchpad.net/ubuntu/+source/chromium-browser/+bug/1371274/+attachment/4397708/+files/WidevineLinuxForChromium44.tar.gz
You can extract it with this command line : tar xzf filename.tar.gz then copy 2 files to /usr/lib/chromium-browser/.
I tried to create the new user-agent string and I finally got this error code: C7702-1003. 🙁
Did anyone solve the USB drive issue? Also got a dual-boot Raspbian/LibreELEC on 32 GB…
I solved the USB drive issue with the simple modicum of… inserting a USB drive. Next problem is that it’s still not showing in chrome://plugins.
I solved the USB issue by just pressing 0 for quit. If you use the file browser you will see that the file is there in the /tmp directory unless you do not have enough space on the SD card and you should get an error prior to that.
Don´t work on Raspberry Pi Zero W?!
You must select 15, not 14 to get the indicated build.
It seems that the recovery script has been updated after we wrote the piece.
I am not sure of what happened, but I followed the procedure and this is what I understood:
About the “USB drive issue”:
The tool “linux_recovery.sh” is a recovery tool, and it wants to put the image of a Chromium system on a USB key (so you can use it for recovery). We do not want this, we just want the bin file. At this point of the procedure, the bin file has been uncompressed and is in the /tmp directory. So just type ‘0’ which is telling him to quit.
About “failed to stat()”:
Until you do this, and as long as the installer is running, the bin file is loked. This explain the error ‘failed to stat()’, because the kpartx cannot access it properly.
You can do:
kpartx -l chromeos_9000.82.0_daisy-skate_recovery_stable-channel_skate-mp-v2.bin
It will give you the list of partitions in the image.
Then the rest of the procedure rolled forward without error.
I agree with Brad, it seems the build to download is 15 and not 14. Then I got: chromeos_9334.72.0_daisy-skate_recovery_stable-channel_skate-mp-v2.bin (chromeos_9334.72.0 instead of chromeos_9000.91.0).
At the end, the plugins are not listed in “chrome://plugins/” and Netflix still does not play.
Thanks for sorting out some of the mentioned problems.
The recovery script has been updated, and that is why the filename is not the same anymore.
If you would like to download chromeos_9000.82.0_daisy-skate_recovery_stable-channel_skate-mp-v2.bin then you can just execute:
All issues with wrong parameters are because of the ‘-‘ before the parameters. If you copy and paste the command from here ‘-‘ is replaced with other symbol that looks the same. Just delete it and write it manually.
For me it still not working but this could be related to the Chromium version. At the moment it’s 56.0.2924.84.
Ville, could you confirm it was working for you and if it still working for you will it be possible to tell us what is your Chromium version and upload the extracted .so files somewhere,
You’re right: our instructions didn’t work with Chromium’s latest version. Please check out our updated instructions. They work and are easier than before.
Where are the updated instructions?
This same article has been updated.
Following these instructions, I get
After following the instructions I’m getting the following error
(Reading database … 118128 files and directories currently installed.)
Preparing to unpack chromium-browser_56.0.2924.84-0ubuntu0.14.04.1.1011.deb …
Unpacking chromium-browser (56.0.2924.84-0ubuntu0.14.04.1.1011) over (56.0.2924.84-0ubuntu0.14.04.1.1000) …
dpkg-deb (subprocess): cannot copy archive member from ‘chromium-browser_56.0.2924.84-0ubuntu0.14.04.1.1011.deb’ to decompressor pipe: unexpected end of file or stream
dpkg-deb (subprocess): decompressing archive member: lzma error: unexpected end of input
dpkg-deb: error: subprocess returned error exit status 2
dpkg: error processing archive chromium-browser_56.0.2924.84-0ubuntu0.14.04.1.1011.deb (–install):
cannot copy extracted data for ‘./usr/lib/chromium-browser/chromium-browser’ to ‘/usr/lib/chromium-browser/chromium-browser.dpkg-new’: unexpected end of file or stream
dpkg: error processing archive rasberry (–install):
cannot access archive: No such file or directory
dpkg: error processing archive pi (–install):
cannot access archive: No such file or directory
Processing triggers for hicolor-icon-theme (0.13-1) …
Processing triggers for man-db (184.108.40.206-5) …
Processing triggers for gnome-menus (3.13.3-6) …
Processing triggers for desktop-file-utils (0.22-1) …
Processing triggers for mime-support (3.58) …
Errors were encountered while processing:
Any idea how to fix this?
It seems that your downloaded package is incomplete or corrupted. Please redownload the package.
Does everyone else find the video quality and framerate poor?
I’m having trouble justifying the effort I’ve put into getting my Raspberry Pi running like a “media center” when I could have just plugged my laptop into my TV with a mini display port adaptor and enjoyed a better quality experience with a lot less hassle.
I wonder if the Raspberry Pi is playing Netflix in full HD? Most media players only play Netflix in SD, which is rather useless in my opinion…
Nice job. The video quality is bad, unfortunately. I am using the same hardware that was previously running LibreELEC without any issues regarding playback of full HD video from network drive or streaming from the internet. It must be (lack of) hardware drivers for processing the stream I guess? Hope someone can fix this. Much appreciated!
I just wanted you to know this worked wonderfully without having to have Raspian through RetroPie. I first installed Chromium with https://github.com/zerojay/RetroPie-Extra by Zero Jay, and then went searching and found your method. Once I found it, I just did all the steps starting at Step 2. And it worked great! THANK YOU SO MUCH! Now I have Netflix on RetroPie. (Yes, it seems to cache a much slower quality than normal for me too… Raspberry Pi 3.) But, I mean, it’s a Pi. So, I’m not too worried at the moment.)
Also, after googling, I believe that Netflix imposes a restriction based on a Widevine rating setting… And so, while Kodi can play beautiful video for me out of RetroPie ports install, Netflix appears to be hampered by Widevine… Wonder if there is a way to apply this hack in Linux too? https://forum.xda-developers.com/showpost.php?p=65001865&postcount=12
Thanks for the tutorial. I got it running fairly quickly, but the video quality is not worth the effort sadly.
This worked perfectly! (8/8/17)
I have not been able to get this to work for me. Following all the steps I still get an error within Netflix that says “Netflix Video Player Unavailable.” Anyone know why?
I ran into this same error. Would love to know how to fix it.
Error code given: C7701-1003.
I believe I’ve followed all the steps. However, I receive error C7701-1003. I found an entry in Netflix’s help documentation.
“Netflix Error C7701-1003
If you experience the error code C7701-1003 on your Google Chromebook, it typically points to some browser settings that need to be changed. Follow the troubleshooting steps below to resolve the issue.
Ensure your browser allows protected content
Select the Chrome menu button from your browser toolbar.
Scroll down and select Advanced.
Under Privacy and security, select Content Settings.
Select Protected Content and ensure you see Allow sites to play protected content (recommended).
If you do not see Allow sites to play protected content (recommended), select the toggle next to the Blocked message.
Try Netflix again.”
I’ve gone through those steps, even switching the setting to blocked, closing Chromium, opening Chromium, changing the setting to allow, closing Chromium and re-opening it, to no avail.
Was able to do it up to Step 3, but, after downloading and installing everything, I was still left with the first “Missing component” error message. To add onto that I’m trying to get the User-agent extension for Chromium and it keeps crashing while trying to install. Anyone know what I could do?
“Then click the extension’s icon and select Chrome > Netflix.”
Where is this “extensions’s icon,” is it on the extension’s page? If so it’s not clickable.
It’s the icon in the upper right corner, you know? The icon that represents the extension on the home page of Chromium.
I’ve got the same error message “Missing component.” Does anyone have a solution? I follow all step and I always get this error message. Thanks.
Someone complained about the video quality. Is it worth doing?
No good, here.
Anyone with the solution?
It works for me on RPi3 but video quality is not satisfying. It looks like the stream is just a bit to slow. Also I get error “your profile can not be used because it is from newer version of Chromium.”
Chromium version is 56.0.02924.84
Probably a silly question.
What do you mean by “Then click the extension’s icon and select Chrome > Netflix.”?
Where and which extension icon?
After installing the Chromium package as described above, Chromium fails to start. If I try to run chromium-browser from the command line, I get the following error messages:
Received signal 4 0000b265243a
Followed by a few similar lines, then this:
[end of stack trace]
[1226:1226:1021/193906.267564:FATAL:zygote_hoat_impl_linix.cc(196)] Check failed: ReceiveFixedMessage(fds, kZygoteHelloMessage, sizeof(kZygoteHelloMessage), &real_pid).
Followed by a few more lines of stack trace, and then an aborted message.
I am using a Raspberry Pi 1 running the most recent Raspbian (just installed last week). I attempted to uninstalled and reinstall Chromium, and the problem remains.
I ended up with this same issue. Were you able to solve it?
Wrking for me. Just a little bit jerky time to time.
I am using LibreElec testbuild (Kodi 18) + Netflix plugin.
Don’t forget Widevine:
Run wget http://nmacleod.com/public/libreelec/getwidevine.sh
Run sh getwidevine.sh
It works but the quality is not really good.
The extension icon is in the toolbar, up right corner. At the right side of blocker icon.
Netflix Video Player Unavailable
Does anyone know when the Pi foundation plans on coming out with a 64 bit version of Raspbian as this would lead to a real solution to this problem? Even my 10 year old Western digital TV box runs Netfix at 1060p very well so it’s mind-boggling that a new and latest Pi can not. Fixing this should be a priority as a media center that can not run the most popular streaming service in the world is not much of a media center.
Still no luck on my end. I have a feeling that it is due to the fact that the version of Raspbian I installed includes Chromium 60, and downgrading to Chromium 56 breaks something. Chromium 56 won’t even run on my system. Unfortunately, I can’t find version of Chromium 60 with Widevine compiled in. Any suggestions? I’d also be happy to compile Chromium 60 with Widevine myself if someone can point to instructions on how to go about doing this.
Works but quality is bad. On a Raspberry Pi 3 Model B. Indeed pre-installed Chromium is downgraded from 60 to 56. Hoped for a solution to the Widevine issue but googling gives no easy solution…
I also had the error C7701-1003 until I realised I had done everything wrong. I started again and now I get an error saying that my Chromium version is out of date. The above tutorial shows version 56… I had version 60…
I’m also having trouble with my LibreELEC. I boot up that OS and I just get a black screen. I was under the impression Kodi was already loaded? Do I need to sideload it or something? I rebooted the system a few times and still nothing.
Another note, I am new to RPi, I am wondering if I should have just bought a new laptop to use for streaming as my old one was fine until the HDMI port died. I have set up my Wi-Fi connection on it (top right hand corner), entered my password, but the connection drops after two minutes and I have to re-enter my password. I have turned off power management settings — ‘sudo iwconfig wlan0 power save off’ or ‘sudo iwconfig wlan0 power off’ (I can’t remember the command) and that doesn’t change anything. Also, it doesn’t seem like there is a away to save my password. I have a laptop still running in my room and that doesn’t lose Wi-Fi. I can’t imagine the RPi being THAT unstable?
Any help on the above would be really appreciated. Thanks!
I agree. Having the change of getting the newest Chromium compiled with the required packages will be amazing. Thank you for your effort.
Thank you for this nice tutorial. I can now watch Netflix on my RPi. I tested a few seconds play and verified video and audio work just fine. I will play a full movie later and find out performance.
Just restart your Pi after installation. Had some problems in the beginning but after the reboot everything worked TY.
So, I have a RPi2 and I’m thinking of installing Raspbian on it to watch Netflix from it. After reading the tutorial and the comments can someone tell me if the RPi2 will play Netflix videos in HD?
Thank you very much!
Exelent. Everything worked as described.
Splendido. It worked perfectly! Thank you very much.
Do you require login ID and password for using Netflix on Raspberry Pi?
What about 5.1 surround audio? As far I know it’s not supported through any web browser and you’ve to use the Netflix app?
This worked for me earlyer but I just tried it on my new SD card Raspbian instalation and Netflix does not work! Video just seems to want to buffer forever and never plays. Perhaps some info is out of date?
Thanks so much.
It works great and it is very well explained.
I had been looking for a real solution to this without success for months.
Now I am trying to make it work for Amazon Prime. I believe it may work just by creating the correct user agent string, but I have not been successful yet.
Have you or someone tried this?
Worked like a charm!
This worked before, but with the last Debian 9 Stretch, doesnt work anymore, hope it gets updated.
Great. Now it’s working fine. Thanks for sharing.