Linux上OBS虚拟摄像头

  • 前言
  • 基本信息
  • 将要做什么
  • 操作步骤
    • 安装OBS
    • 安装nginx流服务器
      • 安装含有rtmp模块的nginx服务器
      • 配置nginx直播功能
    • 安装v4l2loopback
    • OBS推流
    • 拉RTMP流
      • VLC测试拉流
      • FFPlay测试拉流
      • 开启虚拟摄像头
    • 应用程序中调用
    • 结语

前言

费尽周折,终于根据网上资料,自行探索出一种在Linux上使用OBS虚拟摄像头的方案。通过设置OBS虚拟摄像头,可以使用OBS导播软件设置钉钉视频会议的画面,大大提高了视频会议的自由度。根据网上的一些指引,目前流行的使用OBS虚拟摄像头方法有:

  1. 使用v4l2loopbackobs-v4l2sink来“方便”地使用虚拟摄像头,但经笔者测试,上述方案在笔者这里不可行
  2. 使用26.1或以上版本的OBS软件,据称内置虚拟摄像头功能,但笔者的UOS家庭版安装的只有26.0版本,且网上找不到编译好的26.1以上版本OBS安装包,本地编译出错太多
  3. 使用Mac OS或Windows系统

基本信息

本方案经过笔者在以下基础上实践验证通过

操作系统 UOS家庭版20(基于Deepin>Debian>Linux)
系统架构 amd64

将要做什么

这里简述本文所述的方案思路,请读者自行判断是否适用,自行决定是否使用:通过搭建本地rtmp流服务器,用OBS向本地流服务器推流,通过ffmpeg拉流写入通过v4l2loopback生成的虚拟摄像头中,再通过钉钉读取该虚拟摄像头。如有更方便快捷的方案欢迎反馈!

操作步骤

安装OBS

不同系统安装方法不同,详细请参考OBS官网的安装教程,以下为UOS/Deepin上的安装方法

要求UOS/Deepin版本为20或以上

  • 首先,更新apt
 sudo apt-get update
  • 需要安装FFmpeg,如果你尚未安装,你可以通过以下命令进行安装或自行编译
 sudo apt-get install ffmpeg
  • 验证FFmpeg是否安装成功

命令行输入

ffmpeg

如果显示类似下面这样的结果则为安装成功

ffmpeg version 4.1.6-1+dde Copyright (c) 2000-2020 the FFmpeg developers
…………
  • 现在,你可以安装OBS软件了
 sudo apt-get install obs-studio

安装nginx流服务器

本文编写的背景是没有安装过nginx服务,因此从头编译。

本部分参考这篇文章

安装含有rtmp模块的nginx服务器

  • 访问http://nginx.org/官网下载稳定版nginx包,以笔者为例:打开链接后点击蓝色的nginx-1.21.3链接,在新页面中点击stable下的nginx-1.20.1链接(如图所示),下载后缀名为.tar.gz的文件,建议新建一个文件夹专门放置这些文件以便后面操作,后文中称该目录为“项目目录”

  • 在项目目录中打开终端,输入以下命令解压nginx服务器文件(具体文件名请以实际为准,自行调整)

tar -zxvf nginx-1.20.1.tar.gz
  • 在项目目录中,下载nginx-rtmp-module模块,执行(前提是已安装Git
git clone https://github.com/arut/nginx-rtmp-module.git

如果Git无法访问请自行百度寻找解决方法,也可以尝试通过浏览器访问https://github.com/arut/nginx-rtmp-module自行手动下载

  • 执行以下命令进入nginx解压目录
cd nginx-1.20.1
  • 在nginx解压目录中执行以下命令配置编译参数,生成makefile
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module
  • 在nginx解压目录中执行以下命令进行编译和安装,注意该操作可能需要sudo权限,有一定风险
make && make install

如果提示权限不足,请先执行清除命令(如下)

make clean

然后再使用sudo执行编译和安装命令

sudo make && sudo make install

如果已安装nginx请参考这篇文章添加rtmp模块

配置nginx直播功能

  • 可通过以下命令查找nginx配置文件的位置
whereis nginx.conf

例如笔者的是在/usr/local/nginx下,执行以下命令进入该nginx安装目录下的conf文件夹

cd /usr/local/nginx/conf
  • 使用管理员权限打开编辑usr/local/nginx/conf目录下的nginx.conf配置文件,笔者个人更喜欢图形界面编辑器(示例中使用Visual Studio Code),你也可以使用vim等命令行编辑器
  • 打开配置文件后,在http节点内添加以下内容
#RTMP server
server {listen 8080;#配置RTMP状态一览HTTP页面=========================================location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root /opt/rtmp/nginx-rtmp-module/;}#配置RTMP状态一览界面结束==========================#HTTP协议访问直播流文件配置location /hls {  #添加视频流存放地址。types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}#访问权限开启,否则访问这个地址会报403autoindex on;alias /usr/share/nginx/html/hls;#视频流存放地址,与下面的hls_path相对应,这里root和alias的区别可自行百度expires -1;add_header Cache-Control no-cache;#防止跨域问题add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';  }}

留意大括号的位置,大致位置示意如下:

http{#RTMP serverserver{xxx: xxx}
}
  • 随后在http的大括号外添加以下内容
rtmp {server {listen 1935;chunk_size 4000;application vod {play /usr/share/nginx/html/vod/flvs/;#点播媒体存放目录}application live {live on;}#HLS直播配置application hls {live on;hls on;hls_path /usr/share/nginx/html/hls;#视频流存放地址hls_fragment 5s;hls_playlist_length 15s;hls_continuous on; #连续模式。hls_cleanup on;    #对多余的切片进行删除。hls_nested on;     #嵌套模式。}}
}

留意大括号位置,大致示意如下

http{xxx
}
rtmp{xxx
}
  • 修改完成后保存文件
  • 命令行执行以下命令开启nginx服务,nginx的路径以实际为准,该操作可能需要sudo权限,请自行评估风险
/usr/local/nginx/sbin/nginx
  • 浏览器访问本地服务器http://本地IP地址,看到如下所示则为nginx运行成功

安装v4l2loopback

直接访问https://packages.debian.org/sid/all/v4l2loopback-dkms/download可下载amd64版本的deb安装包,下载完成后双击安装即可。其它系统请访问其GitHub项目地址获取详细安装指南

OBS推流

  • 测试OBS推流功能是否正常,鉴于自己搭建的rtmp流服务器可能存在缺陷,为测试OBS推流功能,笔者使用Bilibili的直播功能进行测试,此处不再赘述
  • 测试确认OBS推流功能正常后,打开OBS设置,点击选项卡,选择自定义推流地址,在推流地址中填写rtmp://本地IP地址/live,流名称填写为你自定义的“直播间名称”,然后点击“应用”,点击“确定”,如图所示:

  • 点击OBS主界面右下角的开始推流按钮,此时应该推流成功,以笔者所用版本为例,推流成功后右下角显示绿色的标识,界面最下方显示有推流的速度等系统信息

拉RTMP流

VLC测试拉流

可以通过VLC,点击左上角“媒体”,点击“从剪贴板打开位置”,输入流地址rtmp://本地IP地址/live/test,test为你自定义的流名称
可以在OBS中添加图片等素材测试播放是否成功,若播放成功可进行下一步,VLC测试播放效果如图
注意:为防止不可预料的啸叫等情况发生,建议开启电脑静音后再进行播放

FFPlay测试拉流

如果没有安装VLC也可以使用FFPlay播放流地址,执行如下命令,注意替换你的IP地址以及流名称

ffplay rtmp://本地IP地址/live/test

ffplay测试播放效果如下

开启虚拟摄像头

  • 执行以下命令开启虚拟摄像头
sudo modprobe v4l2loopback
  • 将rtmp流写入虚拟摄像头,执行以下命令,注意该命令末尾的/dev/video2为虚拟摄像头的路径,请以实际为准,可能是video1、video0之类的,请自行更改本地IP地址和虚拟摄像头路径
ffmpeg -i rtmp://本地IP地址/live/test -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video2
  • 此时应当大功告成了!剩下步骤的基本不会出错

应用程序中调用

打开钉钉、飞书、腾讯会议等软件(这里以钉钉内测版为例),进入视频会议,选择相应的虚拟摄像头,如图所示,即可使用

结语

本篇为作者原创,转载请注明来源,本篇首发于语雀平台,如果本文格式出错,请点击链接跳转至语雀查看https://www.yuque.com/peterzhong/uwx78e/wobz0x

Linux OBS虚拟摄像头 解决方案相关推荐

  1. 两个摄像头自动切换画面_利用OBS虚拟摄像头实现假装开会

    频繁而又乏味的视频会议,是许多人在工作中不得不承受的一种折磨. 能否在视频会议时让摄像头拍到的不是频繁点头.昏睡沉沉,而是正聚精会神.一动不动听着领导讲话的自己?OBS虚拟摄像头可以实现. 首先下载直 ...

  2. 手机虚拟视频替换摄像头_利用OBS虚拟摄像头实现假装开会

    频繁而又乏味的视频会议,是许多人在工作中不得不承受的一种折磨. 能否在视频会议时让摄像头拍到的不是频繁点头.昏睡沉沉,而是正聚精会神.一动不动听着领导讲话的自己?OBS虚拟摄像头可以实现. 首先下载直 ...

  3. 杂记——12.腾讯会议使用OBS虚拟摄像头实现多屏幕共享的解决方法

    这篇文章将来讲述一下腾讯会议如何使用OBS虚拟摄像头来实现多屏幕共享 目录 1.下载地址 2.下载与安装 2.1 OBS Studio的下载与安装 2.2 OBS-VirtualCam 虚拟摄像头插件 ...

  4. 电脑虚拟摄像头 -obs及obs虚拟摄像头插件(免费)

    插件: 链接:https://pan.baidu.com/s/1AdAyc41LOHoSNesefcNOcA 提取码:pjne obs安装包: 链接:https://pan.baidu.com/s/1 ...

  5. OBS虚拟摄像头使用教程

    01.如何布置场景 虚拟摄像头,模拟一个摄像头,通常用于与好友视频聊天时 首先按照步骤进行录制,这一步很重要,就录制真人坐在摄像头前,的视频就可以了,主要是到后面用来循环播放 ①点击"+&q ...

  6. obs 虚拟摄像头插件obs-virtualsource.dll注册失败问题0x80070005 和自配置

    先把编译好的obs-virtualsource.dll和obs-virtualoutput.dll,obs版本号是25.0.8,虚拟摄像头插件是2.0.5需要自己编译,前面有介绍 一,把编译好的obs ...

  7. Linux内核虚拟摄像头,Qt Opencv 在Linux下摄像头简单示例v1.0

    下面写的文章也许网上也有类似的,但是大多数都没有给出思路及背景,让初学者每次都只能学到一点皮毛,不少知识需要大量搜索零碎地拼凑起来.题外话,虽然现在是碎片化信息时代,但正是这样信息整合能力也显得非常重 ...

  8. 卸载 OBS 虚拟摄像头

    以管理员身份运行 virtualcam-uninstall.bat 文件,该文件在 OBS 的安装目录下 C:\Program Files\obs-studio\data\obs-plugins\wi ...

  9. 修改obs虚拟摄像头名字的方法

  10. 【Ubuntu】虚拟摄像头,并应用在Teams上

    本文目的 本文意在记录笔者在Ubuntu22.04上配置虚拟摄像头,并应用在Teams通信软件上的全部过程. 操作系统:Ubuntu22.04 虚拟摄像头:OBS.Akvcam 最终成果: 使用v4l ...

最新文章

  1. C/C++输入输出函数(I/O)总结
  2. 揭秘:美国警方监控技术大曝光
  3. eclipse怎么导入一个Java项目(莫要错过,最详细教程!)
  4. 牛客题霸 [字符串变形]C++题解/答案
  5. POJ 2777 - Count Color(线段树区间更新+状态压缩)
  6. 剑指Offer - 面试题50. 第一个只出现一次的字符(unordered_map)
  7. thinkphp5范围查询_ThinkPHP 区间查询
  8. Kubernetes基础篇:主要特性、基本概念与总体架构
  9. 详解正向代理与反向代理
  10. ERA5 total precipitation的单位
  11. Android Jetpack 架构组件之 Room
  12. 爱奇艺再发行6亿美元可转债:债务问题基本解决 将轻装上阵
  13. 证件照修改尺寸像素大小和存储大小
  14. kali --之 Maltego ce 的使用教程
  15. oracle 11g的企业管理器
  16. java判断是否是数组_java判断对象是否是数组
  17. ETL拉链算法汇总大全
  18. nRF51822 白名单
  19. 标点符号相关的英语单词
  20. 巨人肩上的矮企鹅:QQ旋风为什么抄袭迅雷

热门文章

  1. 【python】案例十 字符串中的逆天函数
  2. 在线免费压缩pdf文件
  3. 正则表达式匹配书名号内容
  4. 国内外期货、外汇、股指期货 交易时间(转载)
  5. Parameterize Method(令函数携带参数)
  6. 打包一个包含手表端应用的手机端APK应用—Ticwear
  7. 微信小程序自定义tabbar以及闪烁问题
  8. Pocket PC 2003 SE 仿真机 与主机联网
  9. 《自控力》——[美]Kelly McGonigal
  10. c语言的心形字符,C语言写的各种心形图案