首页 > 其他分享 >Go每日一库之144:go-obs-websocket(OBS连接器)

Go每日一库之144:go-obs-websocket(OBS连接器)

时间:2023-09-29 21:14:09浏览次数:37  
标签:144 websocket log err req 连接器 go obs

推荐理由

互联网的兴起带动了直播行业的火热,除了少数直播网站有自己的推流工具之外,OBS是主流的推流工具,广泛应用在直转播技术之上。

简介

go-obs-websocket是一个与OBS进行websocket通信的连接库,具备调用大部分OBS功能的接口,在互动直播和智能转播技术上广泛应用。

快速开始

安装

go get github.com/christopher-dG/go-obs-websocket

obs简介

go-obs-websocket 是一个与OBS进行websocket通信的连接库,具备调用大部分OBS功能的接口,在互动直播和智能转播技术上广泛应用。

建立连接

import obsws "github.com/christopher-dG/go-obs-websocket"

c := obsws.Client{Host: "localhost", Port: 4444}
 if err := c.Connect(); err != nil {
  log.Fatal(err)
 }
 defer c.Disconnect()

发送请求

// Send and receive a request asynchronously.
 req := obsws.NewGetStreamingStatusRequest()
 if err := req.Send(c); err != nil {
  log.Fatal(err)
 }

// This will block until the response comes (potentially forever).
 resp, err := req.Receive()
 if err != nil {
  log.Fatal(err)
 }
 log.Println("streaming:", resp.Streaming)
  • 创建请求,这里创建的是流状态请求
  • 发送请求
  • 获取请求结果 这里的请求会阻塞当前协程,当OBS正处于推流时,resp.Steaming值为true,反之为false。

_go-obs-websocket_  提供了众多请求接口,可以使用如下命令获取

#linux
go doc github.com/christopher-dG/go-obs-websocket |grep "Request " |grep type
#windows
go doc github.com/christopher-dG/go-obs-websocket |findstr "Request " | findstr type

接下来我们挑几个常见的来看看使用案例

开始/停止推流

req := obsws.NewStartStopStreamingRequest()
 if err := req.Send(c); err != nil {
  log.Fatal(err)
 }

resp, err := req.Receive()
 if err != nil {
  log.Fatal(err)
 }
 log.Println("streaming:", resp.Status())

开始录制

req := obsws.NewStartRecordingRequest()
 if err := req.Send(c); err != nil {
  log.Fatal(err)
 }

resp, err := req.Receive()
 if err != nil {
  log.Fatal(err)
 }
 log.Println("streaming:", resp.Status())

停止录制

 req := obsws.NewStopRecordingRequest()
 if err := req.Send(c); err != nil {
  log.Fatal(err)
 }

resp, err := req.Receive()
 if err != nil {
  log.Fatal(err)
 }
 log.Println("streaming:", resp.Status())

转换场景

req := obsws.NewSetCurrentSceneRequest("scene1")
if err := req.Send(c); err != nil {
    log.Fatal(err)
}

resp, err := req.Receive()
if err != nil {
    log.Fatal(err)
}
 log.Println("streaming:", resp.Status())

处理响应

c.AddEventHandler("SwitchScenes", func(e obsws.Event) {
    // Make sure to assert the actual event type.
    log.Println("new scene:", e.(obsws.SwitchScenesEvent).SceneName)
    })

注册钩子函数,响应OBS的信号。一共可注册的钩子函数key如下:

"SwitchScenes"                  场景切换
"ScenesChanged"                 场景变化
"SceneCollectionChanged"        场景来源变化
"SceneCollectionListChanged"    场景来源列表变化
"SwitchTransition"              转场
"TransitionListChanged"         转场列表变化
"TransitionDurationChanged"     转场时长变化
"TransitionBegin"               开始转场
"ProfileChanged"                配置变化
"ProfileListChanged"            配置文件列表变化
"StreamStarting"                推流开始启动
"StreamStarted"                 推流启动完成
"StreamStopping"                推流正在停止
"StreamStopped"                 推流已暂停
"StreamStatus"                  推流状态
"RecordingStarting"             
"RecordingStarted"              
"RecordingStopping"             
"RecordingStopped"              
"RecordingPaused"               
"RecordingResumed"              
"ReplayStarting"                回放
"ReplayStarted"                 
"ReplayStopping"                
"ReplayStopped"                 
"Exiting"                      退出 
"Heartbeat"                    心跳 
"BroadcastCustomMessage"       广播消息 
"SourceCreated"                来源创建
"SourceDestroyed"              来源销毁
"SourceVolumeChanged"          来源音频改变
"SourceMuteStateChanged"       音量改变
"SourceAudioSyncOffsetChanged" 
"SourceAudioMixersChanged"      
"SourceRenamed"                 
"SourceFilterAdded"            滤波添加 
"SourceFilterRemoved"          滤波移除
"SourceFilterVisibilityChanged" 滤波可见性改变
"SourceFiltersReordered"        
"SourceOrderChanged"           来源顺序变换 
"SceneItemAdded"               场景元素添加
"SceneItemRemoved"             场景元素移除 
"SceneItemVisibilityChanged"    
"SceneItemTransformChanged"     
"SceneItemSelected"             
"SceneItemDeselected"           
"PreviewSceneChanged"           
"StudioModeSwitched"        

总结

OBS是使用最广的推流工具,利用go-obs-websocket可以很方便的操作大部分功能,目前在日常操作中只有创建场景的接口没有找到。比如我们可以做一系列的转场,在直播推流过程中监听事件自动触发,或者做一些特效能随着转场渐入渐出。祝大家玩的开心!!

参考资料

  • go-obs-websocket
  • obs-websocket

标签:144,websocket,log,err,req,连接器,go,obs
From: https://www.cnblogs.com/arena/p/17737353.html

相关文章

  • websocket
    title:Websocket简介tags:WebSocketcategories:干垃圾keywords:WebSocketdescription:Websocket简介top:repost:hot:others:date:2020-01-1113:13:13{%notewarningno-icon%}  随着网际网络的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了......
  • java.lang.IllegalStateException: javax.websocket.server.ServerContainer not avai
    spring项目能正常运行,但是单元测试报错错误原因注册WebSocket的Bean与springboot内带tomcat冲突解决办法1.注释该类里面的代码(不推荐)2.@springBootTest注解添加webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT@SpringBootTest注解中,给出了webEnvironment参......
  • P3147 [USACO16OPEN] 262144 P
    Link这个题有一个很特殊的点,就是最大值不会超过28,可以想一下最多可以合并多少次。那么常规的区间dp是不能使用的,就要采用特殊的形式,因为很难的确定应该怎么转移,那么就换一种思路,转移的对象变成另外一个端点。\(dp_{i,j}\)表示\(i\)在左边,达到\(j\)的话的右端点位置\(dp_{i,j......
  • vite_vite.config.js配置代理与websocket代理
    exportdefaultdefineConfig({server:{proxy:{"/proxy":{target:"http://121.10.140.87",//线上服务器IP地址changeOrigin:true,ws:true,rewrite:(p......
  • Websocket集群解决方案以及实战(附图文源码)
    最近在项目中在做一个消息推送的功能,比如客户下单之后通知给给对应的客户发送系统通知,这种消息推送需要使用到全双工的websocket推送消息。所谓的全双工表示客户端和服务端都能向对方发送消息。不使用同样是全双工的http是因为http只能由客户端主动发起请求,服务接收后返回消息。web......
  • websocket js 客户端自动重新连接
    varwsUrl='ws://'+(document.domain||'127.0.0.1')+':8282';varws=null;//WebSocket对象varheartbeatTimer=null;//心跳定时器varisReconnect=true;//是否自动重连//创建WebSocket连接//@authhttps://so.csdn.net/so/aifu......
  • websocket 多次重新连接
    letsocket=null;letheartbeatTimer=null;letreconnectTimer=null;//定义重连函数functionreconnect(){clearTimeout(reconnectTimer);reconnectTimer=setTimeout(()=>{socket=newWebSocket('ws://url');},3000);}//发送心跳数据......
  • SpringBoot WebSocket STOMP
    SpringBootWebSocketSTOMP关键词:Springboot,WebSocket,STOMP,broadcast,sendToUser,MessageMapping,SubscribeMapping,convertAndSendToUserSTOMP是一种发布订阅的模式,被订阅者发布消息以广播形式发送。如果需要一对一发送或者说指定某个客户端发送,springboot提供了con......
  • [转]Websocket 底层是 TCP 还是 UDP?白话版解析 TCP 和 UDP 传输过程
    原文地址:Websocket底层是TCP还是UDP?白话版解析TCP和UDP传输过程-掘金写在前面在前面陆陆续续写了好几篇数字孪生相关的文章,而其中所涉及的一个其他项目比较不常使用的技术,网络通讯协议Websocket,这个协议主要用于服务器定时向客户端推送数据,相比HTTP更加适合数字......
  • nginx代理websocket请求原理 理解记录
    最近遇见一个问题,在OpenEuler操作系统上,如果不主动开放端口白名单的话,就无法访问该端口。然后我部署了一个服务,端口是5200。在这台机器上部署了一个nginx,通过nginx80端口反向代理5200端口。然后再OpenEuler上开放80端口。此时本地访问80端口,登录后正常的http请求都没问题。......