群晖NAS:DSM7.1激活Advanced Media Extensions【自留记录】

群晖NAS:DSM7.1激活Advanced Media Extensions【自留记录】

本文仅半白群晖可用,不需要安装其他套件或者ssh修改什么

使用DS Video 网页播放视频时候,提示:【不支持当前所选音轨的文件格式,
因此无法播放视频。请尝试播放其它音轨,确认其是否支持】

如图:

在这里插入图片描述
网上很多大神的方案,基本上卒。很多走不下去,直接报错,有的不生效。

解决方案是:

1、安装套件:Advanced Media Extensions【官方必须的】

在这里插入图片描述

2、上传ame.py文件到nas本地
(如果不成功,看下面的py代码,注释掉了 md5 不匹配部分)

点击到云盘下载

保存以下代码保存为ame.py文件

import hashlib
import os

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()
    print(hashlib.md5(full).digest().hex())
    # 这里的 md5 值很多人对不上,我是直接获取替换字符串,没有直接注释来的方便
    # 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}]')


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}")

3、在控制面板的任务计划中,新建一个计划任务使用用户自定义脚本,用户账户使用root

在这里插入图片描述

任务设置中的用户自定义脚本输入:python后面跟刚才我们保存的文件位置。

在这里插入图片描述

phthon /volume1/async.data.center/aem.py

注意:替换自己的文件地址,建议在 ds file 里面点开文件的属性,查看

在这里插入图片描述
运行:
在这里插入图片描述

或者

链接 SSH方式:
获取root权限。输入密码(此时密码不可见,输入完回车进入)

sudo -i

执行命令:

phthon /volume1/async.data.center/aem.py

4、看下解锁状态

在这里插入图片描述

备注:
1、如果未解锁,且多次执行也不行,试试替换py代码里面自己本机的md5 值。ssh执行打印出来即可获取到
2、没有显示 aac 格式解码包,不影响使用(亲测有效)

5、重启 DS Video 播放之前放不出来的视频即可

在这里插入图片描述

完结,看效果

在这里插入图片描述

其他解决方案:

1、下载套件:可以使用特定版本 ffmpeg + Jellyfin 解决。(不能升级,强迫症难受)
2、https://zhuanlan.zhihu.com/p/619795133(我没成功,有兴趣可以试试)

参考大神们文档:
https://www.bilibili.com/read/cv22556816/
https://tieba.baidu.com/p/8474781494

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/99118.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云centos9stream安装宝塔+vscode(code-server)集成云端开发环境

一、 安装宝塔面板 官网 https://www.bt.cn/new/download.htm 题外话:虽然感觉现在宝塔没以前好用了,而且有centos7、8 mysql编译导致OOM服务器挂掉无法ssh登录的情况,但他还是远程管理服务器的好选择,提示宝塔只支持最新的centos…

扬杰科技携手企企通,召开SRM采购供应链协同系统项目启动会

近日,中国功率半导体领先企业扬州扬杰电子科技股份有限公司(以下简称“扬杰科技”)与企企通召开SRM采购供应链协同系统项目启动会,双方项目团队成员一同出席本次会议。 会上,双方就扬杰科技采购供应链管理平台项目的目…

Python操作文件的读取和写入,详解和案例介绍

Python文件IO操作是Python编程中非常重要的一部分,可以通过文件IO操作来读取和写入文件。文件IO操作提供了一种在程序中处理文件的方法,可以读取文件中的数据,也可以将数据写入到文件中。在本文中,我们将介绍Python中文件IO操作的…

无涯教程-Android - RadioGroup函数

RadioGroup类用于单选按钮集。 如果我们选中属于某个单选按钮组的一个单选按钮,它将自动取消选中同一组中以前选中的任何单选按钮。 RadioGroup属性 以下是与RadioGroup控制相关的重要属性。您可以查看Android官方文档以获取属性的完整列表以及可以在运行时更改这些属性的相关…

python基础教程:re模块用法详解

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 一、正则表达式的特殊字符介绍 正则表达式 👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~ 素材、视频教程、完整代码、插件安装教程我都准备好了&a…

KingbaseDTS数据库迁移工具人大金仓国产数据库同步工具Java版本使用方法

KingbaseDTS数据库迁移工具人大金仓国产数据库同步工具Java版本使用方法 金仓数据库简介 人大金仓数据库管理系统 KingbaseES(KES) 是面向全行业、全客户关键应用的企业级大型通用数据库管理系统,适用于联机事务处理、查询密集型数据仓库、…

构建个人博客_Obsidian_github.io_hexo

1 初衷 很早就开始分享文档,以技术类的为主,一开始是 MSN,博客,随着平台的更替,后来又用了 CSDN,知乎,简书…… 再后来是 Obsidian,飞书,Notion,常常有以下困…

Unity实现倒计时和获取系统时间

一:创建UGUI 1.创建Canvas画布组件,调节Canvas画布的分辨率等其他设置。我们可以把视图设置为2D模式下。 2.创建Text文本组件,取名为Timer计时器,我们调整Text文本组件的大小,用锚点设置Text文本组件的位置,并且设置好Text文本组件的颜色。 3.我们再创建一个Text文…

技术实践|Hive数据迁移干货分享

导语 Hive是基于Hadoop构建的一套数据仓库分析系统,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能。它的优点是可以通过类SQL语句快速实现简单的MapReduce统计,不用再开发专门的MapReduce应用程序,从而降低…

简单聊聊Https的来龙去脉

简单聊聊Https的来龙去脉 Http 通信具有哪些风险Https Http SSL/TLS对称加密 和 非对称加密数字证书数字证书的申请数字证书怎么起作用 Https工作流程一定需要Https吗? Http 通信具有哪些风险 使用明文通信,通信内容可能会被监听不验证通信双方身份&a…

WebGL:开始学习 / 理解 WebGL / WebGL 需要掌握哪些知识 / 应用领域 / 前端值得学WebGL吗

一、WebGL发展史 2006 年,WebGL 的发展史可以追溯到 2006 年左右,当时 Mozilla Foundation 的一个开发人员 Vladimir Vukićević 开始尝试在 Firefox 浏览器中嵌入 OpenGL,为 JavaScript 提供底层图形库的支持。随后,这个项目引…

开启EMQX的SSL模式及SSL证书生成流程

生成证书 首先:需要安装Openssl 以下是openssl命令 生成CA证书 1.openssl genrsa -out rootCA.key 2048 2.openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -subj "/CCN/STShandong/Ljinan/Oyunding/OUplatform/CNrootCA" -out ro…

js中?.、??、??=的用法及使用场景

上面这个错误,相信前端开发工程师应该经常遇到吧,要么是自己考虑不全造成的,要么是后端开发人员丢失数据或者传输错误数据类型造成的。因此对数据访问时的非空判断就变成了一件很繁琐且重要的事情,下面就介绍ES6一些新的语法来方便…

前端三大Css处理器之Less

Less是Css预处理器之一,分别有Sass、Less、Stylus这三个。 Lesshttps://lesscss.org/ Less是用JavaScript编写的,事实上,Less是一个JavaScript库,他通过混合、变量、嵌套和规则设置循环扩展了原生普通Css的功能。Less的少数…

【SpringBoot系列】 测试框架之@SpringBootTest的使用

SpringBootTest的详细介绍 SpringBootTest 是 Spring Boot 测试框架中的注解,用于标识一个测试类,以指示该类是一个 Spring Boot 应用程序的测试类。它允许你在测试环境中加载整个 Spring Boot 应用程序上下文,测试应用程序的各种组件、服务…

​放弃数据库,改用Kafka!

长期以来,数据库一直充当着记录系统,它们以可靠且持久的方式存储和管理关键数据,也赢得了大多数公司的信赖。 但时代在变。许多新兴趋势正在影响当今数据的存储和管理方式,不得不让一些技术决策者们重新考虑数据存储究竟还有哪些…

Docker Compose 安装使用 教程

Docker Compose 1.1 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的 快速编排 。从功能上看,跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。 Compose 定位是 「定义和运行多个…

C# VS调试技巧

一.按照条件调试步骤 ①在需要代码执行的行打断点 ②触发此断点,让代码执行到此处 ③鼠标滑至在断点处,点击设置 ④设置断点条件,如下图所示 二、多线程调试技巧 ①在需要代码执行的行打断点 ②触发此断点,让代码执行到此处…

Sharding-JDBC分片策略

Sharding-JDBC分片策略 包含分片键和分片算法,由于分片算法的独立性,将其独立抽离。真正可用于分片操作的是分片键 分片算法,也就是分片策略。目前提供5种分片策略。 一个好的分片策略好的分片键好的的分片算法 1. 标准分片策略 对应Stan…

如何在访问一个页面时,将访问时刻的时间显示在页面上

1.如何在访问一个页面时,将访问时刻的时间显示在页面上 GetMapping("/append") public ModelAndView append() {ModelAndView mvnew ModelAndView("expense/append");String date LocalDate.now().toString();mv.addObject("date",d…