欢迎光临散文网 会员登陆 & 注册

使用huggingface免费docker服务部署24h录播

2023-02-21 22:09 作者:秋之雪华  | 我要投稿

这里只是简要讲述下我遇到了哪些问题,怎么解决的。纯自用,不提供代码及完整方案。

原因很简单,huggingface虽然提供免费服务,但是终究免费的docker服务是用于学习和演示的,直接用于录播应用,虽说似乎没有明面的违规,但是开销恐怕有些打,如果因为门槛降低而进一步滥用就太不好了。

另外本人对Linux和docker都不熟,仅从初学的视角讲述一些考量和问题点。

为什么需要部署24h录播

  1. 部分主播可能没有自动录播

  2. 部分直播可能因为不可抗力无法完成投稿

  3. 部分主播或者场次可能是不留档的

  4. 开播时间和个人时间不太匹配,无法跟直播

  5. 本地网络不稳定,看直播有时都卡,不适合本地录播

fuggingface的docker服务特殊之处

  1. 只对外暴露一个端口,暴露的端口对docker镜像来说,是可以通过readme.md和dockerfile来自定义的,对外映射为80,可以通过https://${用户名}-${仓库名}.hf.space来调用

  2. 2c16g,磁盘可用空间100g左右,网络状况良好

  3. docker启动以后无法获得root权限也无法使用sudo命令 (当然也可能是我水平有限)

部署24h录播需要的主要软件:

  1. 录播软件,最好能够提供API或者网页

  2. 把网盘映射为存储器,或者提供http/webdav/ftp等公开协议的网盘

我选择了录播姬和Alist。网盘服务选择了和彩云(毕竟空间大还免流)


部署程序到hf

如果单独部署直播姬和Alist到hf,其实难度并不大。dockerfile里直接添加下载程序,解压,给执行权限,运行,完事。

但是如果让两个程序同时运行在一个space里,就有困难了。

  1. dockerfile的CMD命令只能运行一个程序,用&&连接多个命令是无效的

  2. 如前述,hf限制一个space对外只暴露一个端口。两个程序运行在同一个space中时,无法从外部访问两个程序的控制界面

当然这只是困难,显然是有解决办法的:

  1.   使用如下方式的shell脚本,在docker的CMD命令中运行这个脚本,运行到cmd1时,不等待cmd1运行结束,就会直接运行cmd2.只要cmd2打开了readme.md指定的端口,或者默认的7860端口,hf就会判断空间正常启动。而cmd1和cmd2所运行的程序都会继续运行。

    2.  突破这个限制有两种方式:a.使用反向代理技术,把不同端口映射为同一个端口的不同路由;b.把录播和网盘服务分别运行在两个space,录播结束通过webdav协议备份文件.c.对外只暴露一个服务。我选择的方案是b。


Docker重启配置丢失的问题

当hf仓库发生git push后,或者超时被回收后,docker会重启。此时配置文件会被重置。如何持久化存储配置文件呢?

录播姬直接使用json格式保存配置,Alist使用json格式备份和恢复配置。因此我们可以把这两个文件备份到另一个git仓库中,当docker启动时,自动拉取配置。

而Alist稍微麻烦一些,还需要额外手动登录并且导入配置。


自动同步网盘

虽然录播姬和Alist都运行起来了,但是录播结束后,如何同步到网盘中去呢?

录播姬的设置中提供了webhook服务,也就是发生事件后,就向设定的API发送post请求。请求内容包含了事件的信息(比如哪个直播间开播了,哪个直播间录播结束了)

我直接用范例改写了nodejs脚本,当录播结束后,调用curl把文件上传到Alist的webdav接口上。

nodejs的启动方法正是前边提及但是没用上的cmd1 & cmd2的写法。


减少空间占用

两方面减少空间占用:

  1. 录播结束后,自动删除3天前的文件,节约本地磁盘:运行命令  find -mtime +3 -type f -name "*.flv" -exec rm {} \;

  1. 录播结束,只上传音频和截图,节约网盘空间。毕竟看直播也是常做黑听人,没有画面问题不是特别大。也可以按需下载到本地。只上传音频显然是用ffmpeg分离音频,就不赘述。截屏的部分同样是ffmpeg

自动生成字幕

        如果没有看到别人reop直播内容,通过语音识别出主播说了什么,是可以快速了解直播内容的一个方法。虽然现在大家都在吹whisper,我还是推荐使用谷歌的服务,whisper的开销实在太大了,我担心影响到正常录播。

对应的项目是这个https://github.com/agermanidis/autosub,他有一些上手难度,默认不能识别为中文,因此我给出一个范例:  

推送消息

直播开始和录播结束自动推送消息也是一个实用的功能。

我把他也做到了nodejs脚本里,推送服务选择了推送加。有条件的人可以自己搭一个公众号,这样推送的消息的自定义程度可以更高

离线下载

AList支持调用Aria2,但是需要自己安装Aria2.这玩意apt-get install一下就完事,但是安装之后需要配置。略有点麻烦,可以直接抄我的仓库,配置文件也可以在里边找到  https://huggingface.co/spaces/tumuyan/Alist/blob/main/script.sh

文件时间错误

安装tzdata并且设置时区


使用huggingface免费docker服务部署24h录播的评论 (共 条)

分享到微博请遵守国家法律