黑群暉激活Advanced Media Extensions(AME)解碼HEVC視頻和HEIC圖片
聲明:此教程在正版群暉系統中進行的操作,雖然也能用于非正版系統中AME的安裝,但是在非正版系統中安裝AME屬于破解行為,對系統造成的影響和其它方面的影響由個人負責,如有實力請支持正版群暉。
DSM的Advanced Media Extensions套件必須要登錄群暉賬號才能激活使用,導致黑群暉在使用Video Station或者Synology Photos等套件時,無法查看高效率視頻編碼 (HEVC) 和高效率圖像容器 (HEIC) 文件。今天就來說說黑群暉如何通過補丁激活AME。
一、什么是Advanced Media Extensions?
其功能是:支持在群暉DSM上查看高效率視頻編碼 (HEVC) 和高效率圖像容器 (HEIC) 文件
激活后可在不同套件中實現:
- File Station
- Synology Drive
- Surveillance Station
- Synology MailPlus
- Synology Mail Plus Server
- Synology Photos
- Universal Viewer
- Video Station
二、如何激活AME?
說明:通過補丁激活AME屬破解行為,該教程僅用于個人學習,不得用于商業行為,后果自負。有實力請支持群暉(本人黑白群暉都使用,最開始用的黑群暉,后來覺得不錯入手了正品,感謝群暉對個人愛好者的支持與包容)
一、通過ssh連接到群暉
二、在tmp下創建一個py腳本
- 創建腳本,touch ame.py
- 使用vim在腳本中輸入以下代碼:
DSM7.1
import hashlib
import os
import subprocessr = ['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 subprocessr = ['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}")
三、運行腳本獲取并安裝AME
運行剛剛創建的腳本,如果出現權限問題,則打開管理員權限
$ sudo su
password:****
# python ame.py
- 最后看到done即完成安裝ame