前一阵子弄了个AIO的小主机,然后吧pppoe的拨号放在上面,还装了个黑群晖,上面放了一些动画片。然后打算用Emby做媒体库,Emby的话界面比较好看,另外元数据处理器比较多,刮削完之后看着比较赏心悦目。
安装配置完之后看着还比较舒服,用浏览器也可以播放,Android也没啥问题,但是到了IOS设备上官方的APP就会提示需要付费,这还挺坑爹的。另外一点就是硬件加速,AIO性能本身就羸弱,而且是被动散热,软件解码1080P的视频都会跑满CPU,设备会非常热。
所以得想办法弄一下Emby Premiere,一是解决IOS设备播放的问题,二是开启Emby的硬件加速。

目前来说,破解Emby授权原理非常简单,Emby客户端在启动时会向mb3admin.com发送鉴权请求,那么思路就是建立伪站,并在请求时重定向请求至伪站,就可以打到欺骗Emby客户端的效果。
这种方式的优势比较明显:
1.支持全部种类的客户端
2.支持更新至官方最新版(假如官方不修改授权验证方式)
3.使用官方客户端和服务端,避免有坏人提供带有后门的修改版程序
但是这种方式也有一些缺点:
1.需要有一台可以部署HTTP(s)的服务器,如果Emby在互联网上运行,那么伪站服务器也需要公网访问
2.需要自签名SSL证书,并且需要安装(信任)自签CA,如果使用不当,会增加系统被入侵的风险

说完优缺点,那么我们就开始实施。首先准备一台伪站用的服务器,我推荐Nginx,配置很简单。但是由于我的服务器安装的是LiteSpeed,所以我以LShttpd进行演示。

Nginx只需要改一下配置文件,在Server字段中增加以下代码就行。

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

对于LShttpd,我们需要手动在站点目录内创建/admin/service/registration这三级目录,并且创建以下三个文件,内容和Nginx配置中的返回值一样
文件validateDevice

{"cacheExpirationDays": 7,"message": "Device Valid","resultCode": "GOOD"}

文件validate

{"featId":"","registered":true,"expDate":"2099-01-01","key":""}

文件getStatus

{"deviceStatus":"","planType":"","subscriptions":{}}

创建完成后,需要手动修改.htaccess,增加CORS Header

Header add Access-Control-Allow-Origin *;
Header add Access-Control-Allow-Headers *;
Header add Access-Control-Allow-Method *;
Header add Access-Control-Allow-Credentials true;

都配置好之后访问伪站试一下https://mb3admin.com/admin/service/registration/validateDevice,应该是可以访问到刚才创建的文件。

考虑到可能有不会自建CA并签发证书的,这里简单写一下,你可以使用openssl也可以是用别的工具,我用的是cloudflare开源的CFSSL工具。
下载地址:https://github.com/cloudflare/cfssl/releases
我们只用到两个文件,分别是cfsslcfssljson

首先生成CA证书的配置文件和CSR,通过下面的命令生成默认的然后进行修改就可以了
cfssl print-defaults config > ca-config.json
cfssl print-defaults csr > ca-csr.json
一般来说只需要修改ca-csr.json就可以,我这里贴一个我用的,你们按需修改。

{
    "CN": "Faker CA",
    "hosts": [],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "CN",
            "ST": "SH",
            "L": "Shanghai",
            "O": "Fake Co., Ltd.",
            "OU": "Technology Service Center"
        }
    ]
}

执行命令生成CA证书以及对应的私钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
复制一份ca-csr.json,命名为emby-csr.json并进行修改,这个文件用于使用自建CA签发证书

{
    "CN": "mb3admin.com",
    "hosts": [
        "mb3admin.com",
        "*.mb3admin.com"
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "FR",
            "ST": "Reims",
            "L": "Reims"
        }
    ]
}

执行命令签发证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www emby-csr.json | cfssljson -bare emby
我们需要吧生成的证书文件,私钥文件保存分别是 ca.pem, ca-key.pem, emby.pem, emby-key.pem
emby对于的两个文件需要安装到HTTP服务器上,ca.pem需要添加到对应设备的信任证书库中,Windows一般在对应浏览器的设置 -> 隐私和安全 -> 管理证书中,具体请根据你的浏览器去搜索,
Linux这里只讲Debian11 和 DSM(群晖)

DSM使用root登录SSH,证书存放路径在/var/db/ca-certificates/进入该目录手动创建一个 Faker_CA.crt 文件,吧ca.pem文件中的内容粘贴进去,然后执行update-ca-certificates.sh更新CA证书
Debian11使用root登录SSH,证书存放路径在/usr/share/ca-certificates/进入该目录手动创建一个Faker_CA.crt 文件,吧ca.pem文件中的内容粘贴进去,然后执行dpkg-reconfigure ca-certificates并在对应的界面选择上你新建的证书

处理完成后,在hosts文件,或是路由器的DNS解析服务中添加重定向,将mb3admin.com重定向到你创建的服务器。然后curl看一下是否能正常返回数据,正常返回数据就可以了。然后进入Emby服务器看一下Emby Premiere是不是已经激活了。



Emby的硬件加速应该也是可以用的,到设置->转码里改一下,把硬件加速启用一下。

在不支持HEVC硬解的火狐浏览器上测试播放HEVC编码的视频可以看到,硬件加速已经启用了。