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

OBS推WebRTC流,并添加毫秒级时间显示

作者在用OBS推WebRTC流,并用浏览器观看推送的实时流。另外就是想看一下延迟有多少。采用一台电脑,流媒体服务器为SRS,相关配置比较简单,可以自行搜索。

推送的流 http://localhost:1985/rtc/v1/whip/?app=live&stream=livestream

拉取的流 http://localhost:1985/rtc/v1/whep/?app=live&stream=livestream

OBS 添加时间的插件 是 date-and-time.lua,我也是在这个基础上做了一点改动,感谢原作者。如何配置 date-and-time.lua,可以自行搜索。

function set_time_text()--local text = os.date(format_string)local date_table = os.date("*t")local ms = string.format("%.3f", os.clock()) local hour, minute, second = date_table.hour, date_table.min, date_table.seclocal year, month, day = date_table.year, date_table.month, date_table.day   local text = string.format("%s", ms)if text ~= last_text thenlocal source = obs.obs_get_source_by_name(source_name)if source ~= nil thenlocal settings = obs.obs_data_create()obs.obs_data_set_string(settings, "text", text)obs.obs_source_update(source, settings)obs.obs_data_release(settings)obs.obs_source_release(source)endendlast_text = text
end

local ms = string.format("%.3f", os.clock()) 

主要是这句,下面的代码没有去掉,方便需要自行修改的同学,获取日期等信息

function activate(activating)if activated == activating thenreturnendactivated = activatingif activating thenset_time_text()obs.timer_add(timer_callback, 100)elseobs.timer_remove(timer_callback)end
end

obs.timer_add(timer_callback, 100)

主要改了这句,这句是设置定时器的周期,原来是1000,也就是1秒触发一次。我改成了100,也就是100毫秒。这里可以看出,该插件是定时获取系统时间,然后添加到视频中。因此如果延迟低于定时器周期,其实是测不出来的。

100毫秒触发一次,肉眼是看不出来差多少的。这里可以采取截屏的方式,多截几次,大概可以看出延迟有多少。这种方式可以粗略测试延迟,如果有更精确的方法,欢迎讨论。

完整的lua文件:

https://download.csdn.net/download/SimpleForest/90481050?spm=1001.2014.3001.5503

最后是我自己的测试结果:

后来又想了一下,如果是视频文件的话,可以先用ffmpeg打上时间水印,然后进行比较。

ffmpeg  -i input.mp4 -vf "settb=AVTB,setpts='trunc(PTS/1K)*1K+st(1,trunc(RTCTIME/1K))-1K*trunc(ld(1)/1K)',drawtext=fontsize=100:fontcolor=white:text='%{localtime}.%{eif\:1M*t-1K*trunc(t*1K)\:d}'" -c:v libx264 -an -f mp4 output.mp4 -y


效果如下:


http://www.mrgr.cn/news/94344.html

相关文章:

  • vue3+ts+vite环境中使用json-editor-vue3,记录遇到的奇奇怪怪问题!!!
  • 搞定python之四----函数、lambda和模块
  • MAE:Masked Autoencoders Are Scalable Vision Learners——论文学习
  • C++编程指南28 - 使用 std::async() 启动并发任务
  • python多线程和多进程——使用 concurrent.futures.ProcessPoolExecutor 和 ThreadPoolExecutor
  • 解决leetcode第3455题最短匹配子字符串
  • 工具(十二):Java导出MySQL数据库表结构信息到excel
  • 小程序网络大文件缓存方案
  • 用DasViewer的时候3Dtiles 转osgb 可以直接指定目标坐标系吗?
  • 双指针算法专题之——复写零
  • 记录一个SQL自动执行的html页面
  • 求递增子序列LIS的两种方法
  • 深度学习正则化技术之权重衰减法、暂退法(通俗易懂版)
  • LangChain+InternLM2搭建知识库
  • 条款1:理解模版性别推导
  • Kubernetes教程(九)了解卷volume的emptyDir和hostPath
  • 将串口接收到的十六进制数据转为十进制
  • ⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Hamming Distance
  • 【vue + JS】OCR图片识别、文字识别
  • 《基于大数据的营养果蔬推荐系统的设计与实现》开题报告