致一
音视频行业深耕多年,熟悉直播、RTC,对在线教育、娱乐秀场等音视频技术与架构有深入研究,目前在一线互联网公司从事音视频开发工作。
展开
-
obs-studio 二次封装(十一)添加增益模块 、完善demo
目录介绍增益模块SDK 中添加增益介绍自动增益控制(automatic gain control)AGC。简单讲,音频增益是对音频信号的强度进行放大或者缩小的一种功能。obs也提供了增益,不过做的相对简单,只是乘以了一个增益系数,没有做静音检测。增益模块代码: gain-filter.c具体的处理逻辑如下:每个通道中的音频数据都乘以一个固定的增益系数multiplestatic struct obs_audio_data *gain_filter_audio..原创 2021-01-31 12:21:56 · 1413 阅读 · 7 评论 -
obs-studio 二次封装(十)SDK 中添加降噪模块
目录介绍添加降噪模块介绍在obs-studio封装(九)https://blog.youkuaiyun.com/lcalqf/article/details/111999838 ,分析了降噪实现过程,具体的细节见上篇。本篇文章封装降噪部分,并集成到sdk中。降噪模块bool LiveModule::set_noise_suppression(int suppress_level){ obs_source_t* filter_source = obs_source_cre...原创 2021-01-01 22:18:43 · 652 阅读 · 3 评论 -
obs-studio 二次封装(九)噪声抑制(降噪)
一、降噪模块分析 降噪模块被封装为obs的一个filer,代码目录为:plugins-->obs-filters--->noise-suppress-filter.c obs利用第三方开源降噪库speex进行处理,下载地址为:http://speex.org/downloads/,业界经常拿speex和webrtc的降噪模块对比,大多认为webrtc效果更好。但是,通过obs直播效果来看,speex完全可以。 用到的函数:设置帧大小,采样...原创 2020-12-30 23:41:06 · 1281 阅读 · 0 评论 -
obs-studio 二次封装(八)添加直播显示器与录屏模块
目录一、直播当前显示器二、添加录屏模块2、录制当前屏幕可以直播当前显示器,并录屏保存为本地文件。一、直播当前显示器二、添加录屏模块1、直播当前显示器//添加显示器模块bool LiveModule::LiveDisplay(HWND hWnd){ //捕获指定窗体句柄 m_pMonitorSource = obs_source_create("monitor_capture", "MonitorSource", NULL, nullptr); if (.原创 2020-12-09 23:49:02 · 1547 阅读 · 4 评论 -
obs-studio 二次封装(七)拉流播放视频大小问题
目录问题描述修改方法问题描述 上篇文章封装了一个推流模块,但拉流播放时视频大小不对。这块倒不是bug,而是obs视频源缩放机制导致的。如下图,添加完视频源后,直播流的实际大小和红色框内的视频大小有关。如果自己不拉大,推出来的流就是默认大小。修改方法如果能力允许,最好把上面红色边框拖动视频、拉大缩小的功能添加到demo中,这样就可以实时调节直播流大小。但这个逻辑蛮复杂的,不太好改。如果感觉不好改,也可以直接把缩放比例、视频位置写死。比如默认把红色框拉大三倍。具体操作就是..原创 2020-11-18 00:29:02 · 1477 阅读 · 1 评论 -
obs-studio二次封装(六)完善推流模块 + 部署流媒体服务器
目录部署流媒体服务obs-studio 推流上一篇写了预览摄像头的demo,这次添加了推流模块。效果如下: 有个bug,拉流播放时视频大小不正确,等后面有时间再改正。注意下:用vlc播放延时偏大,多等会。可以选择用srs 提供的rtmp播放器拉流播放,这个延时低。把下面的URL改成自己的。如果用SRS播放器的话,启动srs命令如下:./obs/srs -c conf/srs.conf然后浏览器打开 http://localhost:8080/players/srs...原创 2020-11-09 01:07:35 · 1408 阅读 · 6 评论 -
obs-studio 二次封装(五)实操封装一个demo
一、demo介绍 经常有朋友问有没有demo,正好这次十一简单封装一个。主要功能有:模块加载、枚举视频摄像头列表、设置分辨率、创建视频源、创建场景、设置摄像头预览。目前还没推流功能,以后再逐渐完善。效果图:二、创建视频源bool LiveModule::create_camera_sources(){ OBSSource m_VideoSource = obs_source_create("dshow_input", "VideoCaptureDevice", NUL...原创 2020-10-04 17:22:14 · 2499 阅读 · 4 评论 -
obs-studio 二次封装 (四)obs 音视频采集到推流大体流程图
一、obs 大体流程 由于obs整个项目代码量很大,刚开始接触时不知道从何着手。所以,整理出一份简单的流程图,大家后面做二次封装时可以对照这个流程图。 大体流程是:加载模块--->创建场景--->遍历音视频列表--->创建音视频源---->设置音视频编码器--->创建rtmp源--->加入源到场景 ---->开始直播。当然,每个过程都有一些细节需要做。比如,如何遍历音视频列表、如何调整编码器参数等等。流程图会列出每个步骤的关键函数,大家...原创 2020-08-22 23:10:41 · 3265 阅读 · 8 评论 -
obs-studio 封装(三) obs_module 模块插件加载过程分析
一、obs_module 介绍 obs-studio 是基于模块开发的,每个功能抽象成一个独立的模块,然后封装成一个动态库。在obs-studio启动时会 遍历动态库路径,加载所有的动态库。自己封装推流直播sdk时也要加载好这些模块插件。 obs_module 定义如下:/* modules */struct obs_module { char *mod_name; const char *file; char *bin_path; char *...原创 2020-08-16 15:14:47 · 1469 阅读 · 2 评论 -
obs-studio 二次封装(二): obs.lib源码分析
obs.lib导出函数列表在 obs.h文件中。如obs的初始化库函数 obs_startup(..)/** * Initializes OBS * * @param locale The locale to use for modules * @param module_config_path Path to module config storage directory * (or NULL if n原创 2020-07-30 00:01:18 · 2067 阅读 · 1 评论 -
visual studio (vs2019) 调试 obs-studio
通过上篇地址:https://blog.youkuaiyun.com/lcalqf/article/details/107143815生成的obs-studio工程默认是无法调式的,会报缺少 qt相关的dll 和obs-studio failed to find locale/en-US.ini 错误想调试得修改vs 编译属性。具体修改如下1、修改输出目录右击obs工程--》属性--》配置属性---》常规修改为:CMake构建工程时设置的程序输出路径下面的 xx\rundir\Debug\b原创 2020-07-05 21:36:17 · 2443 阅读 · 0 评论 -
vs2019编译 obs-studio(最新代码)
参考 obs-studio github 安装教程https://github.com/obsproject/obs-studio/wiki/Install-Instructions1、下载依赖库https://obsproject.com/downloads/dependencies2017.zip2、下载Qt 库https://cdn-fastly.obsproject.com/downloads/Qt_5.10.1.7z3、下载 CMakehttps://cmake.or.原创 2020-07-05 20:08:44 · 2689 阅读 · 5 评论 -
obs rtmp推流地址设置
主要代码在properties-view.cpprtmp的URL ,key 对应的QLineEdit是在程序内动态生成的QWidget *OBSPropertiesView::AddText(obs_property_t *prop, QFormLayout *layout, QLabel *&label){ const char *name = obs_property_nam原创 2016-11-01 16:39:33 · 21185 阅读 · 1 评论 -
obs-studio中自定义信号(signal)
信号结构体signal_infostruct signal_info { struct decl_info func; DARRAY(struct signal_callback) callbacks; pthread_mutex_t mutex; bool signalling;原创 2016-11-04 16:49:48 · 1839 阅读 · 0 评论 -
obs source的属性框的创建过程
当你双击某个资源时,如图,此时会触发void OBSBasic::on_sources_itemDoubleClicked(QListWidgetItem *witem){ if (!witem) return; OBSSceneItem item = GetSceneItem(witem); OBSSource source = obs_sceneitem_get_source原创 2016-11-23 17:35:05 · 2404 阅读 · 2 评论 -
国内基于obs开源项目
bilibi的 直播客户端https://github.com/Bilibili/biliobs阿里巴巴的千牛主播https://github.com/alibaba/tblive原创 2017-05-12 16:59:10 · 12566 阅读 · 0 评论 -
obs中设置gop
x264 相关参数设置在 obs-x264.c 文件中gop_size 对应于x264的i_keyint_maxstatic void update_params(struct obs_x264 *obsx264, obs_data_t *settings, char **params){ video_t *video = obs_encoder_video(obsx264->en原创 2017-02-19 13:25:36 · 5427 阅读 · 0 评论 -
obs-studio 断线重连
obs发送逻辑在rtmp-stream.c文件中暴露出的重连接口 /** * Sets the reconnect settings. Set retry_count to 0 to disable reconnecting. */EXPORT void obs_output_set_reconnect_settings(obs_output_t *output,int原创 2017-06-09 20:03:06 · 14258 阅读 · 0 评论 -
基于 obs-studio 二次封装 (一)编译动态库
OBS Studio工程默认情况下是编译UI的。如果不想编译UI,那么需要在CMake中新建一个BOOL变量:DISABLE_UI。指定不需要编译UI,否则CMake会尝试搜索QTDIR变量失败,导致CMake过程也失败。原创 2018-01-04 17:17:57 · 2670 阅读 · 5 评论 -
obs-studio 数据采集 渲染 编码过程
程序启动时 会调用 obs_init_video函数,创建一个obs_video_thread 线程static int obs_init_video(struct obs_video_info *ovi){ struct obs_core_video *video = &obs->video; struct video_output_info vi; int errorcode;原创 2018-01-31 19:28:22 · 3986 阅读 · 3 评论 -
obs-studio的源
当你点击添加源时,会弹出obs当前支持的所有源的菜单,代码见window-basic-main.cpp,每个Menu iterm设置为一个sourceQMenu *OBSBasic::CreateAddSourcePopupMenu(){ const char *type; bool foundValues = false; size_t idx = 0; QMenu *popup原创 2016-11-10 00:03:54 · 2393 阅读 · 0 评论