mac上soundflower+OBS+微信公众号直播项目总结


mac上使用腾讯会议+OBS客户端做直播
简书地址

1. 本地微信公众号开发

参考:微信配置本地公众号开发环境

2. runtime的addShutdownHook钩子不执行

参考:Linux kill & Java shutdownhook
最后用的kill-15 pid停止进程,或许有更好的方式,比如System.exit();

读文件好说,项目启动时编译就会读

(def file-url "/opt/xhlive-training/pkg/activity/db.edn")
(def messages (atom (clojure.edn/read-string (slurp file-url))))

增加hook

(defn -main [& args]
  (start!)
  (.addShutdownHook (Runtime/getRuntime)
                    (new Thread (fn[]
                                  (prn "I am going down....")
                                  (when (not (empty? @messages))
                                    (spit file-url @messages)))))
  (println "启动ws...."))

3. 项目启动时读文件,项目结束时写文件

类似在服务结束时增加一些销毁现场的能力。Java中使用shutdownHook的一些注意事项
上博主的介绍相对来说能够帮助addShutdownHook的场景了。

本文介绍clojure版实践。

slurp 读函数

读取一个文本文件的全部内容

clojure.core/slurp
读取一个文件的全部内容,并以字符串形式返回

(comment
  (slurp "files/file-test.txt" :encoding "UTF-8")
  ;; => "a txt file line1\na txt file line2\n这是中文字符"
  )

spit 写函数

clojure.core/spit [file-path content & options]
file-path:为文件路径;
content:为要写入文件的内容,所有的内容都会被转为String类型写入。
options:一些设置参数,常见的有:

:append true/false;当为true是,内容会从文件后面写入,如果要换行写入,需要在内容后面加入\n换行符,当为false时,会擦掉文件原有的内容。
:encoding “UTF-8”或”GBK”等。 默认是UTF-8.
spit函数会先打开文件,再将内容写入,再关闭文件。
spit都是以字符串形式写入。

(comment
  (spit "files/file-test.txt" "新增文件内容\n" :append false :encoding "GBK")
  (slurp "files/file-test.txt" :encoding "GBK")
  ;; => "新增文件内容\n"
  (slurp "files/file-test.txt" :encoding "UTF-8")
  ;; => "�����ļ�����\n"
  (spit "files/file-test.txt" "新增文件内容\n" :append false)
  (slurp "files/file-test.txt" :encoding "GBK")
  ;; => "鏂板鏂囦欢鍐呭\n"
  (slurp "files/file-test.txt" :encoding "UTF-8")
  ;; => "新增文件内容\n"

  ;; 逐行写大量数据到文件时,用spit会降低效率,因为它每写一次都会执行打开、关闭文件。
  ;; 此时可以用java.io.writer.
  (with-open [w (cio/writer "files/file-test.txt")]
    (doseq [l  ["第一行" "第二行" "第三行"]]
      (.write w l)
      ;; 新起一行
      (.newLine w)))
  )

websocket

clojure使用两个库,不附源码。
https://github.com/ptaoussanis/sente
https://github.com/ptaoussanis/timbre

mac上使用OBS做直播

我们的方案是把腾讯会议的会议内容做一定的背景、头像的裁剪处理后用OBS studio软件把流推出去,然后在客户端用m3u8的格式拉取播放。

为什么单独提一下这个,因为mac上能把麦克风的声音播出去,但是桌面的声音拨不出去。换句话说,你用网易云音乐,想只把这个软件的声音用OBS播出去,是不可以的,于是借助soundFlower这款软件可以实现,在腾讯会议上选择soundflower (64ch)这个通道。
出入口选择soundflower

OBS里设置也选择soundflower (64ch)
OBS里设置soundflower
可以只将腾讯会议的声音播出去。

然而,这样有产生个新问题,腾讯会议的声音都被OBS拨出去了,自己的电脑端却听不见了,于是参考
在MacOS上利用OBS+Soundflower内录声音与直播这个教程配置了聚合输入和混合输出,相当于将一个声音进行了扩展,这样才妥当了。

参考

clojure实战——IO(1)
在MacOS上利用OBS+Soundflower内录声音与直播


评论
  目录