树莓派打造ALL IN ONE(11):Docker部署EmbyServer家庭影音管理系统及破解Emby Premiere

综合对比Jellyfi和Emby,还是决定使用Emby,不知道我是个例还是一般情况,我在使用Jellyfin播放视频的时候,由于树莓派Docker安装,不能很好的支持硬件解码,需要改变清晰度的时候需要解码编码,都是ffmpeg软件方式完成的,因此,CPU占用接近100%,相比Emby高不少,这还不是我说的主要问题,主要是我退出播放的时候,CPU也不会恢复,FFmpeg还在running,要我手动结束进程才行,而Emby可以很快恢复,这篇文章记录一下安装和破解过程。

注意:本文记录方法仅针对树莓派4B的docker安装方式,Emby版本4.6.7.0,镜像版本:linuxserver/emby:4.6.7.0-ls119,别的没做测试不能保证,但版本相同的其他安装方式,破解部分应该也有一定的参考价值,可能文件路径不一样而已。

反正我总体使用下来没有什么问题,只要不更新就可以了,下面正片开始:

你需要一台自己的公网服务器,或者使用别人开放的激活服务

Step 1:拉取相应镜像

sudo docker pull linuxserver/emby:4.6.7.0-ls119

这条命令的话就会拉取对应的镜像,不指定4.6.7.0-ls119标签的话就默认拉取latest,可能破解方法不适用。

Step 2:部署Docker 容器

docker run -d \
  --name=emby \
  -e PUID=0 \
  -e PGID=0 \
  -e TZ=Asia/Shanghai \
  -p 8096:8096 \
  -v /YOUR_PATH_OF_CONFIG:/config \
  -v /YOUR_PATH_OF_TVSHOWS:/data/tvshows \
  -v /YOUR_PATH_OF_MOVIES:/data/movies \
  -v /opt/vc/lib:/opt/vc/lib `#optional` \
  --add-host api.themoviedb.org:13.224.161.90  \
  --add-host api.themoviedb.org:13.35.67.86  \
  --add-host www.themoviedb.org:54.192.151.79  \
  --add-host api.themoviedb.org:52.85.247.30  \
  --add-host api.themoviedb.org:52.85.247.33  \
  --add-host api.themoviedb.org:52.85.247.69  \
  --add-host api.themoviedb.org:52.85.247.81  \
  --device /dev/dri:/dev/dri `#optional` \
  --device /dev/vchiq:/dev/vchiq `#optional` \
  --device /dev/video10:/dev/video10 `#optional` \
  --device /dev/video11:/dev/video11 `#optional` \
  --device /dev/video12:/dev/video12 `#optional` \
  --restart unless-stopped \
  --privileged \
linuxserver/emby:4.6.7.0-ls119

我是以root用户运行的,所以PGID和PUID都是0,做好端口和路径映射,YOUR_PATH_OF_替换为你的路径,下面device是用于硬解的,但是对于树莓派来说好像没什么用,hosts可以自行替换,或者直接用。

Step 3:部署完成后,正片才刚刚开始,开始破解

有Portainer的,直接从Portainer进入容器命令行,如下图:‘

没有Portainer的,使用命令行进入如下:

docker exec -it容器id /bin/bash

容器id使用命令 docker ps -a 查看即可。

进入容器后我们需要拷贝出来三个文件:Emby.Web.dll,MediaBrwser.Model.dll,embypremiere.js,命令如下:

cp /app/emby/Emby.Web.dll /config
cp /app/emby/MediaBrowser.Model.dll /config
cp /app/emby/dashboard-ui/embypremiere/embypremiere.js /config

我拷贝到config文件夹,是因为config是挂载到宿主机目录的,我直接登录宝塔面板访问可以直接下载到电脑,当然你也可以使用命令直接拷贝到宿主机,这样不是省事嘛。

然后我登陆宝塔面板去下载到Windows电脑。

主要是把dll动态链接库下下来,js文件可以直接编辑不下也罢 ,dll文件需要反编译修改再编译。

下面讲Emby.Web.dll文件的修改 ,需要用到Windows 自带的一个小软件ildasm.exe,路径在:C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools或者相似(版本号不同)的路径。

双击打开

打开Emby.Web.dll文件,如下

不用管,我们直接点击File->Dump

勾选相应复选框,点击OK,选择一个路径,新建一个文件夹,给IL文件一个名字(和dll文件同名,不同也可以,修改完成后,再编译出来的dll就和这个IL文件同名,不同的话,编译完再重命名就OK),点击保存,就完成了反编译,结果如下。

反编译出来这么多文件,我们需要修改的只有一个

我们只需要查找/admin/service,找到这个位置,把url的前面https://mb3admin.com,替换成我们自己的站点地址即可,修改完保存,后面我会讲站点的伪静态配置。

其实到这里,Emby.Web.dll文件我们已经修改完了,是不是很简单,接下来我们编译回去,这又要用到一个小工具,如果你电脑装了.NET就会有自带,ilasm.exe

路径:C:\Windows\Microsoft.NET\Framework\v4.0.30319。

点击上方路径位置,输入cmd回车,进入当前目录的命令行

输入命令如下:

ilasm.exe /dll/resource=YOU_IL_FILE_PATH/Emby.Web.res YOUR_IL_FILE_PATH/Emby.Web.il

到这,Emby.Web.dll文件算是 大功告成了,到你反编译时建的文件夹去看看,应该有一个新的Emby.Web.dll出现了。

接下来开始修改MediaBrowser.Model.dll。

同样使用ildasm.exe打开MediaBrowser.Model.dll文件,同样的操作,File->Dump反编译出来,给IL文件一个和dll文件一样的名字。

不同的是,这次反编译出来的只有两个文件,IL文件和res文件。

我们这次要修改的就是这个IL文件,IL语言是一种低级语言类似汇编,仔细看看也容易看懂,我们直接记事本打开来

一定要找到这个位置,不要错了不要错了,很重要!!!

接下来开始修改

修改成这个鸟样,把他原来的代码注释掉,大概就是让这个方法直接返回true,让系统认为我们已经有MBSupporter了,我把需要的代码贴一下:

.maxstack 1
.locals init (
[0] bool CS$1$0000)
L_0000: nop 
L_0001: ldc.i4.1 
L_0002: stloc.0 
L_0003: br.s L_0005
L_0005: ldloc.0 
L_0006: ret

保存即可,这就改完了,真是太简单了呢。

同样的步骤,编译回去,不再写了,记不得的往上翻一翻,太鸟长了这文章。

大头已经完成,现在还有一个最简单的文件要改,embypremiere.js

把mb3admin.com这个链接换成自己的站点地址就可以了。

三个文件都修改完毕之后,传回原来的地方,我先还放在/config的映射目录下,然后到容器的命令行move到原来的地方。

到容器命令行执行:

mv /config/Emby.Web.dll /app/emby/
mv /config/MediaBrowser.Model.dll /app/emby
mv /config/embypremiere.js /app/emby/dashboard-ui/embypremiere/

服务端的所有修改已经完成,接下来开始配置站点伪静态返回我们需要的json数据。

我本来就有一个Nginx站点,就是本博客,我只需要配置一下伪静态和跨域问题就好了,没有站点的话,就自己新建一个站点,宝塔面板很方便的,当然你要有一台公网服务器,下面开始。

伪静态代码如下:

location /admin/service/registration/validateDevice {
    default_type application/json;
  return 200 '{"cacheExpirationDays": 7,"message": "Device Valid","resultCode": "GOOD"}';
}
location /admin/service/registration/validate {
    default_type application/json;
  return 200 '{"featId":"MBSupporter","registered":true,"expDate":"2099-01-01","key":""}';
}
location /admin/service/registration/getStatus {
    default_type application/json;
  return 200 '{"deviceStatus":"0","planType":"Lifetime","subscriptions":{}}';
}

配置为要保存哦,保存之后我们打开浏览器访问一下链接:https://YOUR_DOMAIN/admin/service/registration/validateDevice看一下返回内容

齐活了,这小配置不就妥了嘛。

最后是跨域问题,很简单在配置文件里加入一些headers就好了

    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Headers *;
    add_header Access-Control-Allow-Method *;
    add_header Access-Control-Allow-Credentials true;

大功告成了,到此为止所有的配置全部完成,清理浏览器缓存,重启emby容器,访问一下Emby页面

小金币也出来了,EmbyPremiere也有了LifeTime授权,这不就齐活了嘛!

下课。

特别致谢:重新破解emby4.6.4,4.6.5,4.6.7版本 – 如意云-莘家小站 (jiawei.xin)博客作者,给了我方向,重新整理细化了他的博客,欢迎大家加入他的Emby学习交流群:1031304710

1 thought on “树莓派打造ALL IN ONE(11):Docker部署EmbyServer家庭影音管理系统及破解Emby Premiere

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注