[Tutorial] - Chromium & Netflix (and other DRM video websites)

This tutorial is about making netflix work on ubuntu mate 16.04 for rapsberry pi.

Step 1 : Install opengl driver and chromium

Follow all the steps of this tutorial and come back when it's done :slight_smile:

Step 2 : Get widevine librairies from a chromebook image and copy it to chromium directory

To watch netflix on rpi we need some google librairies for decoding video stream and copy it to chromium.

Download the link after "url" :

wget https://dl.google.com/dl/edgedl/chromeos/recovery/chromeos_7077.134.0_daisy-skate_recovery_stable-channel_skate-mp.bin.zip

then unzip it :

unzip chromeos_7077.134.0_daisy-skate_recovery_stable-channel_skate-mp.bin.zip

Now, we need to mount the recovery image, and we will use kpartx for that :

sudo apt-get update sudo apt-get install kpartx mkdir /tmp/chromeos sudo kpartx -av chromeos_7077.134.0_daisy-skate_recovery_stable-channel_skate-mp.bin sudo mount -o loop,ro /dev/mapper/loop0p3 /tmp/chromeos/

the recocery image is mounted, so we can get the flash plugin in the directory :

cd /tmp/chromeos/opt/google/chrome/

And copy the widevine libs to your chromium libs directory :

sudo cp libwidevinecdm* /usr/lib/chromium-browser/

For some DRM video site you don't need the next step.
It is only for netfliw because it check browser user agent

Step 3 : Change user agent for netflix

You can use a chromium extention like switch user agent or change it with command line :

chromium-browser --user-agent="Mozilla/5.0 (X11; CrOS armv7l 6946.86.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"

If you use user agent switcher extension add a new user agent with :

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

Then set it for www.netflix.com only !

Video work great on my rpi3 even 720p ones !



Edit 1 : fix chromeos path


Dear Aworan, thank you so much for this Tutorial, with the information and steps contained here i was able to get Netflix and Amazon video up and running this evening in Chromium 50 and it works remarkably well. For anyone else looking to get this up and running as of today, i would suggest to follow Aworan’s guide’s almost exactly, but with the below minor modifications.

First install Chromium 50 as per Aworan’s guide;

In the next Tutorial

Install opengl driver and chromium
sudo rpi-update at the moment provides an opengl driver that will give a blank screen, (although i haven’t tried today#s 4.4.21 yet) so using sudo BRANCH=next rpi-update i went back to 4.4.17-v7+ And tried various Kernels in between, depending on your over-clocking settings, if you use them i found this to be reasonably stable and atm imo the best option. There does seem to be an issue with HDMI sound out so i had to run sudo amixer cset numid=3 1 and currently use the 3.5 jack, but it’s a small price to pay for hardware acceleration. Apart from that just follow along the tutorial.

For the Tutorial [Tutorial] - Chromium & Youtube in 720p (and other videos websites) the only thing i would mention in relation to Netflix / Amazon video, is that you will need to go back into chrome://flags and re-enable Media Source API Netflix looks for this otherwise it will give a blank screen, Amazon probably does too but i haven’t checked.

Once you’ve done all that we would come to step 2;
Step 2 : Get widevine librairies from a chromebook image and copy it to chromium directory
The download url wget https://dl.google.com/dl/edgedl/chromeos/recovery/chromeos_7077.134.0_daisy-skate_recovery_stable-channel_skate-mp.bin.zip - today by continuing with the other steps this would provide libwidevinecdm which is out of date and trying to watch Netflix will provide some bunch of letters and numbers as an error code and on Amazon they will tell you it is unsupported and to go away and come back when you have bought some Amazon Fire Tablets or sticks…, or words to that effect.

So we need a more up to date recovery image the below should work

wget https://dl.google.com/dl/edgedl/chromeos/recovery/chromeos_7834.60.0_daisy_recovery_stable-channel_snow-mp-v3.bin.zip

The only other line that we have to of course change is the sudo kpartx to reflect the new bin

sudo kpartx -av chromeos_7834.60.0_daisy_recovery_stable-channel_snow-mp-v3.bin

There is a sneaky missing letter r in the line cd /tmp/chomeos/opt/google/chrome/ so it should be cd /tmp/chromeos/opt/google/chrome/ , but i think Aworan did that on purpose to confuse stupid people like me :slight_smile:

Everything else including the user agent is exactly as Aworan has outlined. So once again many thanks Aworan.

If i have forgotten anything, let me know, i wanted to reply while it was still fresh in my mind


Your are welcome my friend :slight_smile:

I updated the tutorial to use BRANCH=next there is some issue with last beta kernel.
It is because of some conflict with rpi binary blob librairies and OpenGL driver.
I fix that on last kernel editing some ld.conf files but it is maybe too complicated to add weird steps for common users.

Ok I will fiw it thank you :slight_smile:

I think I will edit the tutorial with new widevine librairies again when chromium version will work out the box.
I hope it will very soon because somebody was affected to the issue long time ago.



Well thank you so much for your work Aworan, working through this and the other tutorials on the PI is alot of fun, working with the PI reminds me of when i started all the way back in the late 90s on Mandrake linux, you needed to put some leg work in and a bit of creativity, but once you get there it is super satisfying :slight_smile: I run Lubuntu on the PI as well and Pulseaudio on MATE seems to cause issues with the audio sync in Netflix (well in generally really) since it uses timer based audio scheduling so at the moment i edit /etc/pulse/default.pa with the option load-module module-udev-detect tsched=0 to disable it, tho i didn’t mention it above as audio in general i think is potentially a whole other can of worms :slight_smile:

Are you french ? :slight_smile:
I used Mandrake too in late 90s :stuck_out_tongue:
I run lubuntu too because of pulse audio and bad audio sync.
Bad audio sync is a general problem for me with ubuntu mate and there is not clean way to remove pulseaudio.
Does option load-module module-udev-detect tsched=0 resolves the problem on mate ?

Thank you :slight_smile:

I’m Irish, currently living in Berlin and running French distributions of Linux :slight_smile: Back then using my 56k dial up connection the internet told me Mandrake would be one of the easier distributions of newbies, coming from Windows 98 at the time after a few days with my first experience of Linux i thought i had been lied to :slight_smile: But i’m glad i stuck with it, Linux gives you the freedom to do just about anything you would like and has so many cool distributions like this PI distro. I might give Mandriva a go someday to see how the modern version of Mandrake runs.

There is a bit more on load-module module-udev-detect tsched=0 in the arch wiki https://wiki.archlinux.org/index.php/PulseAudio/Troubleshooting , but it works great for me on MATE, stops the sync issues, popping and crackling, it does disable some of the pulseaudio graphical options (such as volume slider and channels) that’s not an issue for me, i’m not sure how it would affect anyone using HDMI, i only use the 3.5jack atm, but i really like the MATE desktop and this allows me to run it avoiding the one issue i have with the distribution without the need to take any drastic action.

Hi Aworan,

just installed everything but netflix doesn’t work :confused: , I think it is because of the last step, I understand that just typing the switch user command should be ok, am i wrong?

Thanks a lot for your fantastic tutorials :grin:

Yes it would work with the user agent in command line.
I will post an URL later to test if drm decoding is working so we will know where is the problem :wink:

Thanks friend, also noticed that if I try to play a .avi video the OS restarts, may it be due to openGL?

Try to go to : http://demo.castlabs.com/
Then try to launch Big Buck Bunny video, if it work widevine works so it is a user agent problem to have netflix working.
If it not work it is a problem with widevine libs.

Yes I have same problem but I need to do a fresh install to be sure.
I will try soon !

Doesn’t work :cry:, I’ll try to install everything again hoping that is the problem.

What version of chromium are you using ?

Make sure you remove existing chromium before installing (50.0.2661.102) from above links.
Along with the user-agent switch, I needed to add --disable-gpu to make it work correctly (display would be corrupted otherwise).
Do NOT disable Media Source API in chrome://flags when --disable-gpu is used. It throws some error in Netflix.

I used widevine from: http://s000.tinyupload.com/index.php?file_id=97298143499860659634
Extract using
dpkg -x file.deb /tmp/widevine/
sudo cp /tmp/widevine/usr/lib/chromium-browser/* /usr/lib/chromium-browser/

Ref: https://www.raspberrypi.org/forums/viewtopic.php?f=35&t=98559&start=100

More updates:
Do not rpi-update to 4.9 version - this causes chromium 50.0.2661.102 to crash.
I have verified that chromium 50 works with following version:
sudo rpi-update 9e8f2d6f0c5afd54ab2018c7634785941f04ef91

Possible reason for --use-gl=egl not working for me is that I was using composite-out.
Ref: https://github.com/raspberrypi/linux/issues/1648