OBS for Mac 多平台推送辅助工具的开发笔记
开发环境
本程序选择Go 语言的fyne
框架完成 GUI 的设计。
主要具有三大块的功能: 1.配置文件操作 2. 使用osascript
启动终端窗口运行命令 3. 配合ffmpeg完成多路推流功能。
而本文也将针对这三大块功能,依次展开的描述。
配置文件读取
这一部分功能是最简单的,在程序路径下创建一个配置文件,每次把新添加的推流路径追加到配置文件最后。配置路径的每一行对应一条推流路径。删除整个文件就实现了删除全部推流路径。
1 | const fileName = ".multi-push.conf" |
调用终端窗口运行命令
这部分是这个程序最核心的部分,我选择使用命令创建一个新的终端窗口执行命令,这样做可以不阻塞整个程序的运行,同时也方便观察命令运行的效果。
执行命令的函数如下:
1 | func exec_shell(s string) (string){ |
一个使用上述函数安装 FFmpeg 的例子如下:
1 | exec_shell("\"brew install ffmpeg && exit\" ") |
其他方面的总结
- 使
fyne
支持中文显示fyne
框架默认是不支持中文显示的,为了让fyne
显示中文,需要在系统中创建一个环境变量FYNE_FONT
,然后赋予中文字体路径。而这里遇到的问题是不同的系统中安装有不同的字体,只能通过不断的尝试,将大家都拥有的中文字体添加进去。这里我只写了两种常见的系统中文字体。具体的代码如下:
在程序文件中添加下方的函数:
1 | func init() { |
并且,在main
函数的最后,添加下方的语句.
1 | _ = os.Unsetenv("FYNE_FONT") |
- 多平台推流命令
结合 FFmpeg 工具,我使用下方的命令实现多平台推流。后面可以结合管道符不断追加直播地址,所有直播页面的内容都是同步推送的,延时很低。1
ffmpeg -re -i rtmp://127.0.0.1/live/HkJDIOgMd -acodec aac -vcodec h264 -flags +global_header -strict experimental -f tee -map 0:v -map 0:a "[f=flv]rtmp://live-push.bilivideo.com/live-bvc/?streamname=XXXX&key=XXXX&schedule=rtmp | [f=flv]rtmp://live-push.bilivideo.com/live-bvc/?streamname=XXXX&key=XXXX&schedule=rtmp"