惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
小众软件
小众软件
J
Java Code Geeks
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
L
LangChain Blog
博客园 - 司徒正美
量子位
Y
Y Combinator Blog
C
Check Point Blog
T
Tailwind CSS Blog
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
V
V2EX
阮一峰的网络日志
阮一峰的网络日志

魚丸包粗麵

Xiaomi Miloco Docker Images - 魚丸包粗麵 Claw Cloud Run 免费云服务容器-魚丸包粗麵 VirtualHere 非破解服务端,使用注册机生成序列号注册码-魚丸包粗麵 群晖进阶玩法:私有化部署社区版LoboChat-Database-魚丸包粗麵 群晖进阶玩法:Surveillence Station-魚丸包粗麵 群晖进阶玩法:Active Backup for Business 套件激活-魚丸包粗麵 安装SideStore自签软件 - 支持iOS14+-魚丸包粗麵 群晖进阶玩法:Docker全图形界面部署Rabbit-魚丸包粗麵 Web3.0邮箱应用-Skiff注册-魚丸包粗麵 群晖进阶玩法:Docker全图形界面部署RustDesk服务端-魚丸包粗麵 群晖进阶玩法:Docker全图形界面部署Alist-魚丸包粗麵 GO项目打包命令-魚丸包粗麵 群晖VMM虚拟机安装威联通QutsCloud-魚丸包粗麵 群晖VMM虚拟机安装Windows 11原版系统-魚丸包粗麵 群晖进阶玩法:自动设置Bing美图为登录壁纸-魚丸包粗麵 黑群晖集合工具:XPEnology Tool for Windows-魚丸包粗麵 群晖进阶玩法:搭建个人RustDesk远程中转服务器-魚丸包粗麵
群晖进阶玩法:Advanced Media Extention-魚丸包粗麵
魚丸包粗麵 · 2025-03-16 · via 魚丸包粗麵

群晖进阶玩法:Advanced Media Extention

此教程在正版群晖系统中进行的操作,虽然也能用于非正版系统中AME的安装,但是在非正版系统中安装AME属于破解行为,对系统造成的影响和其它方面的影响由个人负责,如有实力请支持正版群晖。 DSM的Advanced Media Extensions套件必须要登录群晖账号才能激活使用,导致黑群晖在使用Vid

此教程在正版群晖系统中进行的操作,虽然也能用于非正版系统中AME的安装,但是在非正版系统中安装AME属于破解行为,对系统造成的影响和其它方面的影响由个人负责,如有实力请支持正版群晖。

DSM的Advanced Media Extensions套件必须要登录群晖账号才能激活使用,导致黑群晖在使用Video Station或者Synology Photos等套件时,无法查看高效率视频编码 (HEVC) 和高效率图像容器 (HEIC) 文件。今天就来说说黑群晖如何通过补丁激活AME。

  • 支持在群晖DSM上查看高效率视频编码 (HEVC) 和高效率图像容器 (HEIC) 文件

20250316144820.png

激活AME

  • 在指定目录中新建AME.py文件并通过计划任务root用户运行该py文件即可

DSM 7.1

import hashlib
import os
import subprocess

r = ['669066909066906690', 'B801000000', '30']
s = [(0x1F28, 0), (0x48F5, 1), (0x4921, 1), (0x4953, 1), (0x4975, 1), (0x9AC8, 2)]

prefix = '/var/packages/CodecPack/target/usr'
so = prefix + '/lib/libsynoame-license.so'

print("Patching")
with open(so, 'r+b') as fh:
    full = fh.read()
    if hashlib.md5(full).digest().hex() != 'fcc1084f4eadcf5855e6e8494fb79e23':
        print("MD5 mismatch")
        exit(1)
    for x in s:
        fh.seek(x[0] + 0x8000, 0)
        fh.write(bytes.fromhex(r[x[1]]))

lic = '/usr/syno/etc/license/data/ame/offline_license.json'
os.makedirs(os.path.dirname(lic), exist_ok=True)
with open(lic, 'w') as licf:
    licf.write('[{"appType": 14, "appName": "ame", "follow": ["device"], "server_time": 1666000000, "registered_at": 1651000000, "expireTime": 0, "status": "valid", "firstActTime": 1651000001, "extension_gid": null, "licenseCode": "0", "duration": 1576800000, "attribute": {"codec": "hevc", "type": "free"}, "licenseContent": 1}, {"appType": 14, "appName": "ame", "follow": ["device"], "server_time": 1666000000, "registered_at": 1651000000, "expireTime": 0, "status": "valid", "firstActTime": 1651000001, "extension_gid": null, "licenseCode": "0", "duration": 1576800000, "attribute": {"codec": "aac", "type": "free"}, "licenseContent": 1}]')

subprocess.run(['/usr/syno/etc/rc.sysv/apparmor.sh', 'remove_packages_profile', '0', 'CodecPack'])

apparmor = '/var/packages/CodecPack/target/apparmor'
if os.path.exists(apparmor):
    os.rename(apparmor, apparmor + ".bak")

print("Checking whether patch is successful...")
ret = os.system(prefix + "/bin/synoame-bin-check-license")
if ret == 0:
    print("Successful, updating codecs...")
    os.system(prefix + "/bin/synoame-bin-auto-install-needed-codec")
    print("Done")
else:
    print(f"Patch is unsuccessful, retcode = {ret}")

DSM7.2

import hashlib
import os
import subprocess

r = ['669066909066906690', 'B801000000', '30']
s = [(0x3718, 0), (0x60A5, 1), (0x60D1, 1), (0x6111, 1), (0x6137, 1), (0xB5F0, 2)]

prefix = '/var/packages/CodecPack/target/usr'
so = prefix + '/lib/libsynoame-license.so'

print("Patching")
with open(so, 'r+b') as fh:
    full = fh.read()
    if hashlib.md5(full).digest().hex() != '09e3adeafe85b353c9427d93ef0185e9':
        print("MD5 mismatch")
        exit(1)
    for x in s:
        fh.seek(x[0] + 0x8000, 0)
        fh.write(bytes.fromhex(r[x[1]]))

lic = '/usr/syno/etc/license/data/ame/offline_license.json'
os.makedirs(os.path.dirname(lic), exist_ok=True)
with open(lic, 'w') as licf:
    licf.write('[{"attribute": {"codec": "hevc", "type": "free"}, "status": "valid", "extension_gid": null, "expireTime": 0, "appName": "ame", "follow": ["device"], "duration": 1576800000, "appType": 14, "licenseContent": 1, "registered_at": 1649315995, "server_time": 1685421618, "firstActTime": 1649315995, "licenseCode": "0"}, {"attribute": {"codec": "aac", "type": "free"}, "status": "valid", "extension_gid": null, "expireTime": 0, "appName": "ame", "follow": ["device"], "duration": 1576800000, "appType": 14, "licenseContent": 1, "registered_at": 1649315995, "server_time": 1685421618, "firstActTime": 1649315995, "licenseCode": "0"}]')

subprocess.run(['/usr/syno/etc/rc.sysv/apparmor.sh', 'remove_packages_profile', '0', 'CodecPack'])

apparmor = '/var/packages/CodecPack/target/apparmor'
if os.path.exists(apparmor):
    os.rename(apparmor, apparmor + ".bak")

print("Checking whether patch is successful...")
ret = os.system(prefix + "/bin/synoame-bin-check-license")
if ret == 0:
    print("Successful, updating codecs...")
    os.system(prefix + "/bin/synoame-bin-auto-install-needed-codec")
    print("Done")
else:
    print(f"Patch is unsuccessful, retcode = {ret}")

设置截图

20250316145021.png

20250316145033.png

20250316145053.png

说明

  • 文章转载来源:https://blog.csdn.net/ruankun521/article/details/139371440