美文网首页
mac上soundflower+OBS+微信公众号直播项目总结

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

作者: 小马将过河 | 来源:发表于2020-08-15 00:09 被阅读0次

    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)这个通道。


    image.png

    OBS里设置也选择soundflower (64ch)


    image.png

    可以只将腾讯会议的声音播出去。

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

    最优方案

    2020-10-20
    好吧,b站上的视频居然也打不开?,真是没有一个靠谱的,这个电脑没配过,凭记忆录个视频吧。

    • 前提
    1. 安装soundflower
    2. 安装了OBS studio
    • 设置混合输出扬声器
      找到Mac上的MIDI设置


      image.png
    image.png image.png image.png image.png
    • 设置聚焦设备


      image.png
    • OBS里设置也选择soundflower (64ch)
      可以看到obs里多了一个桌面音频的输入源。

    image.png

    完成配置。这样声音能内录到OBS,本地也能听见。

    参考

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

    相关文章

      网友评论

          本文标题:mac上soundflower+OBS+微信公众号直播项目总结

          本文链接:https://www.haomeiwen.com/subject/ixyvdktx.html