GithubHelp home page GithubHelp logo

obs_capture's Introduction

obs_capture

利用obs实现屏幕捕捉

首先需要下载obs源码进行编译,生成obs.lib文件。

运行环境: 需要和obs源码里目录结构一致,如果需要调用plugin和data.

第一阶段实现:

实现monitor-capture功能. 流程:

(1)Obs_startup 用于底层创建obs对象.

(2)Obs_load_all_modules 加载所需要的effect文件和plugin等,这一步最关键的是exe程序和文件的路径结构.

(3)Obs_reset_video 初始化video采集,创建线程用于采集(obs_graphocs_thread). tick_sources为获取数据,output_frame用于读取数据进行编码,render_dispaly用于数据渲染 tick_sources:通过source内部的video_tick进行数据读取,首先是sources获取数据,其次是scene获取sources上的数据. 都是通过D3D实现,基于gpu内部操作.

output_frame:读取采集的数据放入队列并通过信号量通知vide_thread线程进行数据读取,通过添加的video_callback 进行数据回调.

(4)Obs_create_source 创建sources,obs的插件都是封装为obs_source_info类型,通过id进行对象查找并且调用.

(5)Obs_create_scene 创建scene,数据的渲染流程 sources获取数据-》scene渲染.需要手动进行关联(obs_scene_add)

(6)Obs_add_raw_video_callback 为了获取sources读取的数据,需要手动添加回调函数,最终在video_thread线程进行回调.该video参数可以设置数据格式和类型. 内部通过gpu进行转换.

(7)Obs_start_capture 设置obs_display_add_draw_callback.用于进行窗口绘制.并调用obs_set_output_source进行绑定通道绘制启动.

通过Display的回调进行绘制显示(obs_render_main_texture),为了实现画面的缩放需要通过gs_ortho进行.然后 调用gs_set_viewport进行设置.

第二阶段实现: 实现window -capture功能. 流程:

(1)obs初始化和创建source以及sence的创建和连接都没有区别,唯一的区别是source需要时window-capture插件. (2)通过obs_source_properties来获取window-caputre内部实现的窗口句柄列表和一些信息, 该步骤主要会带有四种类型的信息,window,cursor,priority,compatibility, window:对应窗口的句柄等信息. cursor:对应是否鼠标显示 priority:优先级选择 compatibility:兼容性. 目前只是保存了window的信息, (3)把保存的window信息,通过obs_data_set_string进行设置,用于修改source对应的setting内容 (4)obs_source_update,内部通过修改临时变量用于更新 window-capture内部的window对象.

问题难点:对于properties内容的理解.

obs_capture's People

Contributors

quanwstone avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.