As of 3-30-2020, if you want the “paste-one-line-it-just-works” go to:
^^^ 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:
1 2 3 4 5 6 7 8 |
$ sudo su # cd /usr/lib/chromium-browser # wget http://blog.vpetkov.net/wp-content/uploads/2020/03/libwidevinecdm.so_.zip # unzip libwidevinecdm.so_.zip && chmod 755 libwidevinecdm.so # wget http://blog.vpetkov.net/wp-content/uploads/2020/03/chromium-media-browser.desktop.zip # unzip chromium-media-browser.desktop.zip && mv chromium-media-browser.desktop /usr/share/applications |
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
1 2 3 4 |
$ sudo rm /etc/xdg/autostart/xcompmgr.desktop $ sudo reboot |
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:
1 2 3 4 5 6 7 |
# cd /usr/lib/chromium-browser # python -c 'import ctypes; > lib = ctypes.cdll.LoadLibrary("./libwidevinecdm.so"); > lib.GetCdmVersion.restype = ctypes.c_char_p; > print(lib.GetCdmVersion())' |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <stdio.h> #include <stdlib.h> #include <dlfcn.h> int main(int argc, char *argv[]) { void *handle; const char *(*get_cdm_version)(); handle = dlopen("./libwidevinecdm.so", RTLD_LAZY); if (!handle) { fprintf(stderr, "%s\n", dlerror()); exit(EXIT_FAILURE); } get_cdm_version = dlsym(handle, "GetCdmVersion"); if (!get_cdm_version) { fprintf(stderr, "%s\n", dlerror()); exit(EXIT_FAILURE); } printf("%s\n", get_cdm_version()); dlclose(handle); exit(EXIT_SUCCESS); } |
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:
1 2 3 4 5 |
$ wget http://blog.vpetkov.net/wp-content/uploads/2020/03/get_cdm_version.zip $ unzip -f get_cdm_version.zip $ chmod 755 get_cdm_version |
c.) Place a copy of the libwidevinecdm.so in the same directory as your binary
d.) Run it
1 2 3 4 |
./get_cdm_version 4.10.1610.6 |
^^ 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
Ok, i’m going crazy here.
First of all, thanks for the work on this page!
I have a problem. Premise: I am a raspberry noob.
I recently purchased a raspberry Pi4 for – among other things – watch netflix. However, I cannot get it to work (also Amazon Prime video doesn’t work). I’m in Europe, I have Raspbian installed. The error code i get on Netflix is C7701-1003.
I have:
– followed the instructions to the letter
– uninstalled and reinstall Chromium from scratch
– rebooted an uncountable number of times
– checked the libwidevine version, just to be sure, and i do get 4.10.1610.6
If you have any suggestion that would be more than welcome.
install firefox in your terminal
$ sudo apt install firefox-esr firefox-esr-l10n-es-es
1-Line installations instructions no longer work with HBO. Suspect change is related from HBO switching from HBO Go to HBO Max. Would you kindly update ventz-media-pi with HBO Max support? I can offer limited help, but my CS specialty is with other sub-fields. The 1-Line installations still work with Amazon Prime, Disney+, and Netflix. Thank you for providing a workable solution for those. 🙂
Thank you,
Jacob
I just did it. Twice and it didn’t work. I got this message Your browser doesn’t have Digital Rights Components…
Hey sorry to bother you, I keep getting ERROR CODE C7701-1003. I don’t know how to fix this. Still new to this whole thing. Thnks.
or as update.. does it work on newest kernel 5.4?
Hi people,
At Chromium 56.* at the Pi 4 I had no any problem to watch netflix, due to a mismatch
of different versions of files (Raspbian was a bit cluttered up last year) some things are
updated. Chromium was one of them.
Chromium 80.* won’t play now any Netflix at all. It loads but gives Html5 browser error.
It gives no widevine errors anymore so i guess that that part is right…Which packages
and or setting, or extensions do I miss? What gl setting do i do at sudo
raspi config? Chromium barks about libegles2 or something..
Is there someone here who still gets it running at the Pi 4.. 4G or. 8G
Hi,
I was trying to use RPi 4 as an all around Media Center, however difficulties (non consistency) with playing DRM protected content made me to switch to Amazon Stick Lite as a main player with RPi serving as NAS, Mopidy, Transmission, PiHole device, I plan to add RetroPie to it as well.
My opinion is that unless RPi gets Secure Device certification or Microsoft Edge browser with DRM plugins embended gets its RPi version RPi is very unstable platform for DRM protected content playback even some workarounds work, some dont, some stop working.
I have used the 1-line install to allow spotify – netflix – etc… but ran into an error after using for a few months. The error is “netflix error code c7399 1260 00000025” It did this before, and I was able to run the 1-liner again and it worked again, but this time, no luck. Any thoughts on a fix? It has worked great up to this point…. no glitches. I am running through a SSH conection . Thanks,
Eric
Pingback: How To Watch Netflix and Amazon Prime On Raspberry PI 4
Thanks for the sharing! To do with Spotify and Raspberry Pi, I use a third-party tool DRmare Spotify Music Converter to help me. I use it to convert Spotify music as plain audios and then transfer them to Raspberry for using. But this method is a little bit complex.
Hi mate,
thanks for the hint!
Only problem: the display in full screen does work anymore since i have chromium media. even not with youtube…
Do you have a trick?
Thanks
Cheers
ºººººººººººººººººººººº
Hi,
I have the same problem. Display in full screen does not work correctly, as it looks like it is “encoded”, horizontal lines are visible.
This problem also occurs on youtube, both from chromium-media and from normal chromium.
Is there a solution for this problem?
Thanks.
PS: The method I tried is ONE-LINE.
Pingback: Netflix and Spotify on a Raspberry Pi 4 with Latest Default Chromium | Single-Board Computers
Great job!
Thank you very much for sharing the results of your effort 🙂
Hi,
I have a following problem: I am trying to run joyn.de or waipu.tv – both Germany’s TV content online providers in the browse Chromium..
As I am not in Germany I am using VPN (openvpn) to connect. But these services say that my location is not eligible which points to the problem with VPN. However when I run the same VPN on my Linux MInt 20 on x86 machine and try to connect to joyn.de or waipu.tv they work.
Previously when on Kodi addons for both services complained about my location outside germany but update of widevine solved this problem.
I have used script from your blog to set up Chromium Media Edition but it does not work on these services. I have also used the script on the fresh install of Raspbian to be 100% sure that I have not broken elements on my regular install but the problem remains the same.
Any ideas on how to solve this?
dear Ventz,
thank you for sharing this with stupid people like me. It works great. both. the screen tearing and the chromium media edition.
till that terrible kernel-update 5.4
pieter – I suspect by the time 5.4 becomes default, Google will push a version for it.
today I did an apt full-upgrade en apt rpi-update and everything is okay again. with your posting it is possible to receive Netflix etc. again. with minimal screen-tearing. thank you.
I profoundly regret upgrading the kernel this morning before reading here if it was a good idea to do so. Tearing was solved with Compton, now it completely breaks the desktop
I tried several times to make Netflix work natively on my Chromium and even on my Kodi it never worked. This was the first tutorial that really worked for me. I encourage you to keep this page up to date, as it is a gold resource for all those who want to run Netflix with Chromium. The solution for eventual tearing did not solve 100%, but it runs. It has a few loading problems. It plays some seconds, make a micro pause and keep going. It’s a little annoying. I am not sure if it is related to web buffering or video processing. I’m running a Rasp3 + with Raspbian full. Can anyone tell me what is the GPU value that I should apply to optimise watching Netflix? This post was a huge help to me. Thank you very much.
Ventz,
I have enjoying your solution for quite some time and currently watching some HBO flix. I decided to try out the new 64 bit beta on an 8GB Pi 4 and besides a directory change all seemed to configure ok, but HBO says unsupported browser. I am wondering if this is something you know the fix for :-).
Best regards,
I just saw ur reply regarding the 64 bit. It seems like the raspberry Team will put increased focus on 64 bit forward and to utilize all 8GB memory it seems 64bit is required. It is really just a hobby project for me but the beta release seems to work well except the snafu on your solution. Still curious to know if and when you will find time to check it out. Chromium now resides in chromium and not chromium-browser directory. That’s all I changed in your script to make it run
I don’t have the 8GB Pi sadly 🙂 — but I am curious to try 64bit on the 4GB model. I think the main problem is the libwidevine and chromium not being compiled for arm 64bit. I don’t know enough about this, but with arm it’s not like amd64 vs i386 arch with a backwards compatibility.
I am using Rasberry PI OS 64bits beta.
Is there any work around for that ?
I given one line script doen’t seems to work for my rasberry pi os 64 bits.
Please tell any work around if any.
Thank you.
Shubham – Sadly, no. No one has released one yet for arm to my knowledge. There are also a few other problems/limitations in terms of Chromium and how it hooks into the libraries.
Can I run the 32bit Chromium with 32bit Widevine in 64 bit Ubuntu on a Raspberry Pi 4b?
On the x86_64 architecture it has been possible to run 32 bit executables since its inception, and 32 bit processes can run side-by-side with 64 bit processes. You just have to install the right 32 bit compatibility libraries. Since 64 bit ARM chips run 32 bit code as well, I don’t see why I could not run 32 bit chromium in 64 bit Ubuntu on ARM, given the right compatibility libraries?
Roland – that’s not how it works on arm 😉 — you have taken the x86->i386 compatibility for granted, but with other architectures 32bit is *very* different than 64 bit.
Take a look at this: https://community.arm.com/cfs-file/__key/communityserver-discussions-components-files/10/mixing_5F00_AArch32_5F00_and_5F00_AArch64.png
Hi Ventz. I do not understand.
In that picture you linked, on the left side it says:
Aarch64 OS can host a mix of AArch64 and AArch32 applications.
Also:
Aarch Hypervisor can host AArch42 and AArch32 OSs
So what is the problem exactly? From that picture my idea seems fully possible?
This is the description from that page:
> What this means is that you could host a mix of 32-bit and 64-bit applications under the same 64-bit kernel. But you can’t, for example, dynamically link a 32-bit app against a 64-bit shared library (or vice verse).
This is essentially the problem here — on a 64bit system you are trying to dynamically link against a 32bit library from a 64bit app.
I have to assume that CrOS will change this as they move themselves to 64 bit kernels eventually.
I fully feel your pain, especially now that a 8GB Pi exists…it’s just a shame not to utilize the new specs.
I meant to say AARch64 Hypervisor can host AArch64 and AArch32 OSs.
I really like Ubuntu 20.04 64 bit. Gnome just works, I can use 8GB of memory, etc.
From that PNG I can’t understand why mixed 64 / 32 bit userspace is impossible, in fact it strongly suggests the opposite to me.
The other option to have Netflix and others DRM-ed streaming services on 64 bit ARM would be if 64 bit libwidevine exists. Is there no 64 bit Chrome OS version?
The Nvidia Shield TV Pro runs 64 bit according to people from Nvidia. So I think there should be a 64 bit libwidevine in there somewhere. It has Netflix among other things, so what do you think?
Thank you so much, works like a charm!
Makes my Pi4 a fully functional media center.
It’s guy like you who keep the Pi-fire burning.
I can sign on to Disney+ with out a problem. but hulu is another story . when I try to sign in.
this what it said : We are unable to determine your location
If this issue persists please try a different browser to watch Hulu with Live TV on your computer.
How can you please help me.
Nelson – assuming this is the Hulu Live TV? The problem is that the location settings (for privacy) are disabled by default. If you modify the location in the main Chromium to allow hulu.com to pull your location, it should work. Unfortunately, I don’t have Hulu Live and I don’t have a way to test this, but the same idea holds for other websites.
Yes. I do have Hulu live . Do you mean to go to permissions and allow location? Right .
I” M a bit of a noob. Hey Ventz, I already tried, allow location. Is there anything eise
I can do?
Thanks for your help
Nelson
Same issue with Hulu location, signed in or out of Chromium, with location access granted (along with all other permissions). The Get Support button from Hulu (the next page after location fails) doesn’t work either.
Any thoughts are appreciated. Thanks for your efforts and the write-up!
Marc – I have no way to test Hulu Live sadly (assuming you also have Hulu Live TV, which needs location)
Short of someone changing their password and emailing me a login that I can test with — I don’t have a way to test the location settings.
I am assuming that making the browser think it’s ChromeOS (CrOS) is confusing it due to location settings and a few other layers being handled by the OS (vs just the “browser”) and ChromeOS.
Thank you so much for your clear guide!
I managed to get Netflix running on my Pi 4.
However, the resolution is toned down at what seems to be 480p with artefacts in the picture.
I am running Raspbian which is up to date at 1080p60 in other applications.
Do you have any advice for me?
Thanks again,
Beda
Beda – latest Pi (now called Raspberry OS?) The resolution definitely should not be 480. Something else is going on here.
Check settings/etc within youtube. It could be that it’s on auto and the combination of connection/CPU/COVID (google scaled down default stream rate)/etc, is contributing. I can confirm that I can play 720p perfectly and *most* 1080 well enough.
Thank you for your reply! The problem occurs in both Netflix and Youtube. Settings should be fine, I checked multiple times (can’t change much on Netflix tbh but it works fine on other devices in the same WiFi).
After a couple of days of fiddling I installed Kodi and both Youtube and Netflix work fine now.
Pingback: Raspberry Pi 4: Chronicling the Desktop Experience - Web Browsing - Week 4 - LinuxLinks
Oh … my … god … This solves a problem that existed since the middle ages: watching Yelo Play from the Belgian cable provider Telenet in Belgium on a RapsberryPi. Thanks a million!
Tom – thanks 🙂 – it’s always awesome to read stuff like this! If you can, please post about it wherever you struggled to find a solution before.
I keep hearing from users that they have tried a few other things before this one, which tells me this is not ranking properly on google 🙂
Thanks!
Hi there!
Well, hard to say, because when you try to watch it, it just doesn’t work. When you Google for it, you only get posts from ages ago (in Dutch of course):
https://www.netweters.be/t5/Suggesties/Yelo-tv-en-Linux/td-p/23058 (from 2016)
https://www.netweters.be/t5/Telenet-apps/yelotv-op-ubuntu-installeren/td-p/21274 (from 2017)
Not even in particular for Raspberry Pi, just on plain Linux (Ubuntu).
To be honest, I explicitly included the keywords “Yelo Play”, “Telenet” and “Raspberry Pi” in my initial post, so it could be picked up by the big G 🙂
Hi. Is this supposed to work on a raspberry pi 3b ? I followed multiple tutorials and techniques, and after painful hours I only managed to get Amazon Prime Video working on Vivaldi only. Netflix doesn’t work in all my browsers. When I use the libwidevine.so linked here and the user agent specified in the .desktop file, on Chromium, Netflix, I get error C7361-1254 , which apparently is a ChromeOS specific error, but I have no idea how to fix it.
Nim – Yes, it works on the 3b. Did you see the link at the top of this page? (please use the other post with the “1-line”)
Yes, I have tried. Unfortunately, the exact same error appears..
“Sorry, we are having trouble with your request”, error code C7361-1254. The weird thing is, why would prime video work, but not Netflix… Maybe Netflix use additional protection? Or an even newer libwidevine.so that doesn’t even exist in the latest ChromeOS yet?
Are you running Raspbian 10 (latest)? I haven’t tested on a Pi 3 in a while personally, but a few users just posted in the past 24 hrs that they have it working on the 3b from the 1-line approach
It works, although in Netflix the resolution was reduced to 960×540.
Does I have to edit something, like the user agent, to play it at 1080p?
Rafafa – the x540 is strange. Google/CrOS restricts the “width” resolution, so you cannot do 1080p (thus 960), but I believe the height should be far larger, unless you have a strange monitor 🙂
Thankyou for this media fix. The last problem I have is using Bluetooth headphones to play any media accessed via chromium. They work fine playing media on the VLC Media Player.
Pingback: 15 Best Raspberry Pi 4 Projects You Can Build – TRM Security Digest
I’m using raspbian and it works with spotify, but it doesn’t work with apple music or amazon mussic
soyuzz – Thanks for the info. I haven’t tried with apple music or amazon music (don’t have accounts with either). What errors/messages do you get with those services? Trying to see if they are looking for a different DRM plugin or it’s just that they don’t work with Chromebooks yet as they are not fully html5.
Great! This works for me too on Raspbian on the Pi4! Thank you!!!
I read some of the comments here, and did a check on the binary and indeed it looks it like it’s coming straight from Google 🙂
Guido – great to hear, and thank you!
I tried multiple other browsers and write ups, and nothing worked. Found this one, and worked the first time. Thank you for the write up.
Exactly what I was looking for, thanks for the post.
Mike – awesome!
Hi.
I managed to complete stage 1, installing libwidevine. This gave me Chromium media edition. However, neither Netflix or spotify works. To be fair, I’m completely new to raspberry pi, and linux in general. 🙂 How do I “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.)” ???
JacLIL – the Media edition should be the second step. Open the terminal, and try setting the “–user-agent=…” for chromium manually…if that works, you are all set. Is there a reason you are doing this manually vs using the 1-line installer with the latest Raspberry Pi Buster image?
I don’t quite know why I didn’t just do that. Did it now, and everything works perfect! Thank’s alot!
First of all – great article! Works for Netflix, Hulu, Disney+, Amazon Prime, and Movies AnyWhere (Vudu). For some reason Vudu would not work – told me the video format was unsupported, however, when I used MoviesAnywhere to host my Vudu account, my Vudu collection works great.
Not sure why, but Locast will not play local TV channels on Chromium Media Version, but they will play fine on FireFox ESR. On the other hand, I haven’t found anyway to stream from my xFinity account. Tried Opera as well, so that is the only streaming service I don’t have on my Raspberry Pi 4b with 4 Gig, overclocked at 2000 with the GPU overclocked at 800.
So, to summarize, I have two identical systems set up for twin daughters – they never watch TV anymore, and I uninstalled KODI since these streams were 95% of the reason for KODI in the first place – THANKS!!!
Jess – great to hear. XFinity is one where it will not work, because believe it or not, they still use flash. They are milking the whole “chrome-end-date” thing until the last possible date. Until they change to html5/drm, it will not work.
You could add the flash plugin (I do have it extracted too), but it’s not worth it imo – other than opening yourself up to security issues potentially, it will be a pain to keep getting it working.
I haven’t used Vudu, but good to know there is a way via MoviesAnywhere.
That’s super, thank you very much!
I tried the same in Manjaro on the Raspberry Pi, but didn’t get it to work with Spotify.
The paths in Manjaro are slightly different, i.e. I copied the lib into: /usr/lib/chromium and adapted the start command accordingly. Nonetheless Spotify won’t play.
Do you know, why that is?
Ben – I don’t have any experience with Manjaro. Assuming the X/composer display is the same (or that aside), the way you can “port” this is to find your Chromium launcher in Majaro, clone it, and modify it to give it the user-agent as a startup parameter to the launcher itself.
You will probably have to do the launcher itself in the Manjaro format.
I had the same problem:
You have to use “chromium-browser” package not the “chromium” package to use the “libwidevinecmd.so” package.
Get rid of the “chromium” package completely and install the “chromium-browser” package if available. Do all the steps and it should work. If the user-agent paramenter is not accepted (which was in my case) you can try to use the extension “user-agent-switcher” by “esolutions.se” (that is the only one which works flawlessly). Make a custom user-agent with the settings provided in the .desktop file.
Hello,
I used the one line install on buster with raspberry pi 4 2GB.
It worked perfectly but around 30 minutes into a movie on Disney+ it froze. I was able to stop the browser then logon again and resume where I left off.
Again the playback was fine until it wasn’t after another 30 minutes. I haven’t seen anyone else having this problem on your blog.
Could it be heat related? Or does it need 4GB to run?
Thanks again for creating this.
Don – thanks for the info. Does it happen consistently around 30 mins? (more than once?). Same movie/show and at the same place?
I’ve noticed that the DisneyPlus player for the web is not “perfect” yet…it does have some issues.
It’s possible that it’s ram related since 2GB is not a lot, and depending on your GPU allocation, and the OS, you end up with less than 1GB for the application…and Chromium is very memory hungry.
Ventz,
first of all, thank you for your work. It’s great to be able to stream in the browser and not needing Kodi on top of the system.
I also have the issue like Don Isenstadt, that the system seems to freeze after a while and I thought of overheating of the Pi 4 and other things, but I have confirmed the issue 100%, see: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=276124&p=1673538#p1673538
What happens is, that when you stream video with DRM-enabled Chromium, the memory usage goes up all the time till the moment, when ram usage is at 100% and the system starts swapping to the very slow memory card. Then the system becomes unresponsive. I can still SSH into it and have a look at the temperature, which was about 50 degrees C (I’m using a heavy metal case), but I even could not shutdown the system.
This does happen if you watch a 2 or 3 hour movie or if you stream some short 20 minute episodes of a show and it happens on Netflix and Disney+, which I both tested, so size of the streamed data doesn’t seem to matter.
What I additionally tested was streaming with the NON DRM-enabled default Chromium. Streamed 5 hours of Youtube, memory usage was at about 500 mb total. Streamed two 2 hour movies from some movie website, memory usage around 500 or 600 in total, no issue at all.
So, from my point of view, the issue is, that when using Chromium with Widevine enabled, Chromium increases memory usage all the time, causing a 2 GB Pi 4 to freeze after two or three hours in my case. i’d love to figure out why this happens.
Now, I linked you to my thread on the Raspberry forum and I’d appreciate if we try to continue fixing this issue over there. Let me know what you think, thanks!
This is good to know – thanks. I always assume people have the 4GB Pi4 model, but this really makes sense.
The problem is that the base OS needs ~512MB for console, and another 512-ish+ for UI. You are looking at 1GB to run the Pi itself without lag. Now add ~1GB software, and then another ~1GB for video/etc. Imo, anything less than the Pi 4 @4GB of RAM is not practical for this. Even that is “less than practical” for many reasons.
Does anyone else have problems with Netflix where some sections of the screen kind of get overlayed when things move and some parts get suck? Hard to describe. Not the same as tearing. Is there a solution for this?
Joel, are you using the “1-line” install on a clean Raspbian Buster install?
On that one everything seems to work perfectly.
Yes, that is what I used. What is your GPU memory set to?
I followed your instruction a month ago and all worked well (except that I found a libwidevinecdm.so in the subdir libs that has the same hashes as yours).
It worked until yesterday, tonight Netflix gives error C7399-1260-00000025 which is not documented in their help center.
Please use the 1-step method. It does everything for you, and confirmed as of last night (4/17), still works. If you can, please reinstall with a clean version of Raspbian Buster (latest). A lot has changed all around, and latest raspbian + the 1-line install will be by far the easiest way to get everything working.
After an hour I found the new user-agent in the comments, just switching to the new worked. I could not edit the comment to tell you. In the 1-line you have the old user-agent.
Astrinus – the user agent doesn’t need to be on the latest. Just one thats supported as a “ChromeOS” trigger by Netflix. You really want libwidevin on the latest version due to the significant improvements. In general, if you want to do this manually (for security, trust, etc) – at least pull apart the 1-line method and configs so that you have a supported version, because it will be very hard to debug when it breaks again. This is what I am trying to prevent via the 1-line method (other than ease), a supported and consistent way for everyone to be on the same page so if Netflix/Chromium/libwidevine changes something, rerunning the 1-line will always patch the right issue.
Maybe Netflix in my region (an European country) has a different check on user-agent.
Libwidevine is 4.10.1610.6 (checked), old user-agent do not work, new works like a charm. I do not have old Raspbian crust because the SD was loaded in March with the latest one.
To get the version of shared library you could also use Python, so one needed to compile something or trust you 😉
This one-liner works with Python2 and 3.
vmx – Thanks for providing it. I’ll updated the blog post.
Coming from 15+ years of security forensics, incident response, and security+non-security architecture work, I have some of the largest appreciation against the “hey run this random binary that works — I promise it’s safe” approach.
This is why I have gone out of my way to make sure everything is completely open/transparent everywhere possible, and at least verifiable-able/end-user create-table everywhere non-open sourced.
This whole project started with 2 needs:
1.) getting Netflix on the pi *easily* and quickly.
and specifically
2.) without using a “custom built browser” that was built and “version pinned”, so you could not even update it with the latest security patches.
When I started, the only non-custom OS “solution” (and not working at the time) was by a random person on the internet who had built a binary of an old chromium version that was statically compiled with some libraries, and everything was completely closed sourced. For all I knew, he could have had a keystroke/password logger built in.
Everything I have is open/transparent and available to verify, including the 1-line automation shell script:
https://pi.vpetkov.net
and even the “non-open source” stuff, to the best of our ability:
Hello Ventz,
I’m sorry.
I just tested your script and it gave me following error.
Invalid configuration file for working environment ‘/usr/share/applications/chromium-media-browser.desktop’
Did i do something wrong?
Your script finisched just fine without any error …
But i exectuted it as a normal user. No root nor sudo rights.
The file looks ok to me.
But i’m not a specialist 🙂
Tom – are you using Raspbian? It should run as a normal user, but it should prompt you for sudo/escalated privs for the parts that it needs to drop in system directories.
You are right! It works perfectly! My bad.
Just a bummer what ik wanted to watch is to heavy for the pi.
I live in Belgium. We have an isp called Telenet who has an online tv watch service.
I overclocked the pi for 200%. Some channels are playing but most of them are glitching all te time.
Some do play perfectly. but most push the 4 cores straight to 95 – 100%
I also tried to compile the popcorntime source from many places i found.
Also no succes. Tried littery everything. npm, bower, yarn, …
So i guess the pi4 is good to plays movies.
But not really the multimedia device i hoped for 🙁
Thx for your reply!!