当前位置: 首页 > news >正文

python控制obs实现无缝切换场景!obs-websocket-py

前言

最近一直在研究孪生数字人wav2lip。目前成果可直接输入高清嘴型,2070显卡1分钟音频2.6分钟输出。在直播逻辑上可以做到1比1.3这样,所以现在开始研究直播。在逻辑上涉及到了无缝切换,看到csdn上有一篇文章还要vip解锁。。。那自己研究吧!在这里我们以我现在的逻辑来实现一下无缝切换!

举一个例子

来梳理一下我的逻辑,通过obs推场景1中的一个视频,循环播放一个不说话闭嘴的视频。当生成好说话的视频后控制obs修改场景2的来源视频路径然后自动切换场景2进行播放,然后监听场景2视频播放完毕自动切回场景1不说话的视频~!

来吧!说干就干!

obs-api文档:https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#getmediainputstatus

 不要问我为什么,因为百度出来的相关现成轮子太少了!最好看文档来选择和实现自己的业务,很简单的!

一、创建obs-ws服务端

 二、创建两个场景和每个场景各添加一个视频来源

 SceneName场景添加一个MediaSourceNameA来源,添加视频A

 SceneName1场景添加一个MediaSourceNameB来源,添加视频A【当数字人视频生成好通过py替换掉这个路径的】

SceneName场景的MediaSourceNameA的视频A设置循环播放。

 

 目的是默认播放推流SceneName场景MediaSourceNameA的视频A,也就是不说话时的视频。

三、python控制obs无缝切换场景

安装依赖

pip install obs-websocket-py

 连接obs

# 连接OBS
ws = obsws('192.168.31.73', 4455, 'YqShGFfdYaGxG7DG')
ws.connect()

这里地址来自这里

工具-》obs-websocket 设置 

 点击显示连接信息,可以看到ip和密码。

 当数字人视频生成好后执行下面代码!

        # 修改MediaSourceNameB来源的视频路径ws.call(requests.SetInputSettings(inputName="MediaSourceNameB", inputSettings={"local_file": os.path.abspath(video_path)}))# 激活SceneName1场景播放视频ws.call(requests.SetCurrentProgramScene(sceneName='SceneName1'))

 可以监听MediaSourceNameB场景的视频是否播放完毕,当播放完毕切换回SceneName场景的循环播放视频。

        while True:time.sleep(0.1)# 监听MediaSourceNameB视频播放状态status = ws.call(requests.GetMediaInputStatus(inputName="MediaSourceNameB")).datainprint(status)# 播放完毕则切换回激活循环播放的SceneName场景视频if status['mediaState'] == 'OBS_MEDIA_STATE_ENDED':ws.call(requests.SetCurrentProgramScene(sceneName='SceneName'))break

 

关闭websocket连接

# 断开连接
ws.disconnect()

四、实现自定义逻辑

什么?一头雾水???不难,我教你ya!

打开文档

https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#getmediainputstatus

比如查询视频播放状态

ws.call(requests.GetMediaInputStatus(inputName="MediaSourceNameB")).datain

 搜索GetMediaInputStatus,你可以在文档里看到名称一样的,同时他有使用介绍。不会英文就翻译一下!

会告诉你它是干什么的,传什么参数,会得到什么响应!

也就是说这个文档里你想用哪个方法那就如下:

requests.XXX

对于传参名,文档里有!在方法里对应写就行!

requests.XXX(XXX=???,XXX=???)

必须由ws.call()包裹

默认返回对象,.datain就是返回数据了!

 

 

 注意!

对于修改的方法会让传对象,文档里没有详细说对象里的参数名和格式,这个比较坑!不过它对应有个查询的方法,根据查询得出结果的内容格式去写就行啦! 

好了!整体就是这些啦,根据我的方法自己去摸索一下就行了!对于怎么推流这个是obs基础,自行百度下就行了!!!

http://www.lryc.cn/news/126701.html

相关文章:

  • Vue3实现图片懒加载及自定义懒加载指令
  • LeetCode150道面试经典题-- 环形链表(简单)
  • 音视频学习-音视频基础
  • asp.net core webapi如何执行周期性任务
  • 快速搭建图书商城小程序的简易流程与优势
  • C++ template 循环
  • 时序预测 | MATLAB实现基于CNN-BiGRU卷积双向门控循环单元的时间序列预测-递归预测未来(多指标评价)
  • mysql 数据备份和恢复
  • Lucene教程_编程入门自学教程_菜鸟教程-免费教程分享
  • 物联网工程应用实训室建设方案
  • 【AI绘画】3分钟学会ikun幻术图
  • Spring 框架入门介绍及IoC的三种注入方式
  • Centos升级openssl
  • 第4章:决策树
  • 小米平板6Max14即将发布:自研G1 电池管理芯片,支持33W反向快充
  • Elasticsearch复合查询之Boosting Query
  • Clickhouse基于文件复制写入
  • 梅赛德斯-奔驰将成为首家集成ChatGPT的汽车制造商
  • QT-播放原始PCM音频流
  • 【杂谈】聊聊我是如何从Java转入Web3的
  • ArrayList
  • 不重启Docker能添加自签SSL证书镜像仓库吗?
  • Ajax介绍
  • docker 学习--02 常用命令
  • socks5 保障网络安全与爬虫需求的完美融合
  • 构建智能医疗未来:人工智能在线上问诊系统开发中的应用
  • css3-grid:grid 布局 / 基础使用
  • 如何在windows电脑安装多个tomcat服务器和乱码问题
  • flutter:webview_flutter的简单使用
  • Ansys Zemax | 手机镜头设计 - 第 1 部分:光学设计