清水迎朝阳
多年windows下c++客户端开发,或多或少踩了很多坑,积累了一些经验
展开
-
项目总结 普通模式 相框模式
注: 双屏模式下,又细分的连麦及合成图片方式普通模式 就是 1+3个小窗口模式相框模式可以有1+1 1+2 1+3 三种连麦模式要求在开始上课时,选择相框模式还是普通模式,...原创 2024-09-13 11:10:07 · 19 阅读 · 0 评论 -
网易互动SDK升级
*** 加入音视频房间。* 通过本接口可以实现加入音视频房间,加入房间后可以与房间内的其他用户进行音视频通话。* @par 调用时机* 请在初始化后调用该方法。* @note* - 加入房间后,同一个房间内的用户可以互相通话,多个用户加入同一个房间,可以群聊。使用不同 App Key 的 App 之间不能互通。* - 加入音视频房间时,如果指定房间尚未创建,云信 服务器内部会自动创建一个同名房间。原创 2024-07-23 15:06:30 · 50 阅读 · 0 评论 -
互动直播 之 多人连麦窗口,昵称等信息获得
但是,这里有个问题,这时候,SubExe_SendUserIMAndName 主进程传来的 昵称信息,有可能慢一点,导致多麦窗口昵称为空。原因就是,多麦窗口添加连麦者时,此时改连麦者的昵称信息还未获得。多麦窗口添加连麦者时。原创 2024-07-18 15:11:19 · 501 阅读 · 0 评论 -
互动直播 之 连麦者位置、合成布局、显示方式等
普通合成的时候,合成哪些连麦者,可以由 m_BypassCtrlClass.liveUsesNeedShow_ 确定。之前这里是房间里的学生的数目,如果改成现在的只需显示的学生,则其它地方也会受影响,所以这里还得完善下。合成布局要解决的是:多人连麦,哪些连麦者可以被合成,以何种排列方式整合成一副画面。这里传入的是:pChatForm->m_studentInRoomSet。与连麦者相关的,不仅有连麦者位置,还有观众看到的合成画面。在这里获得需要显示的那些连麦者用户的账号集。原创 2024-06-14 14:19:55 · 604 阅读 · 0 评论 -
互动直播 之 从多人连麦列表中, 选择需要展示的连麦者
不同的直播方式,需要展示的人数不同,普通直播允许4个连麦者, 双视频直播 可能 3.2.1。所以根据不同的直播方式,确定需要展示的连麦者人数。根据UI上,选择的人数,更新双屏模式。下面是与之相关的几个函数。原创 2024-05-31 15:35:57 · 225 阅读 · 0 评论 -
互动直播 之 连麦者 声音变化 管理
已有的声音,声音减弱处理。新的声音,添加到map中。原创 2024-04-29 16:22:13 · 80 阅读 · 0 评论 -
互动直播 之 模式选择框
同时,选第一个时,隐藏这个选项,选第二个时,显示这个选项。选择后,再将信息返回给子进程。给主进程发送消息 处理。原创 2024-01-31 10:16:14 · 65 阅读 · 0 评论 -
互动直播项目 梳理 自定义视频帧控件 BitmapControl
位于ui_kit项目下case 3:break;原创 2024-01-23 10:17:16 · 326 阅读 · 0 评论 -
双屏相框模式 1 整体布局
测试效果,在画布底端中央,显示用户名等信息。原创 2024-01-17 14:40:33 · 62 阅读 · 0 评论 -
互动直播 连麦布局之 双屏普通下 本地布局 合成布局 连麦顺序不一致解决方案
而这两个容器的添加删除成员时机都是相同的,所以理论上本地布局 和 合成布局 连麦者位置也应该相同了,测试也是这样的效果。因为,需要这个信息,设置每个连麦者位置,为了方便,所以将这个容器放在了CBypassCtrl 类中了。因为,在某种模式下,不显示用户头像,所以还需要有:用户是头像连麦还是视频连麦的标识。保存的是进入频道的全部连麦者,包含自己和其它所有在频道中的人员。以后需要做的是多麦选择,选择哪个就显示哪个,这个待以后优化。然后,在有其它连麦者进入时,将其它连麦者加入。目前,先加入离开时,重置下。原创 2024-01-12 09:59:40 · 89 阅读 · 0 评论 -
互动直播 之 隐藏音频连麦者头像
另外,双视频下,学生切换音频\视频模式时,发送 SubExe_SendPush_talk_mode 消息时,也调整。下次该学生以视频方式上麦,因为onuserJoined来的最快,这时候还没有得到学生此次已经改为视频上麦的信息,对主播来讲,onUserJoined、onUserLeft 时调整下。所以此时动态隐藏调整时,就有问题了,本来应该显示,但是却隐藏了。一开始 音频模式上麦,这时候学生是音频模式,然后自己下麦。绘制连麦者数据时,不绘制头像连麦的人。获得volumeBox。如果是不显示头像模式,原创 2024-01-09 10:56:44 · 1156 阅读 · 0 评论 -
互动直播 之 播放器管理类
单例模式是一种设计模式,确保类只有一个实例,并提供一个全局访问点。这可以用于确保一个类只有一个实例,并提供一种访问该实例的方式。public:// 获取单例实例的静态方法// 使用静态局部变量确保只创建一次// 示例成员函数// 防止拷贝构造函数和赋值操作符的实现private:// 私有构造函数,确保外部无法直接实例化// 可以进行初始化操作// 私有析构函数,确保外部无法直接删除实例// 可以进行清理操作// 获取单例实例// 使用单例实例return 0;原创 2023-12-27 10:14:17 · 856 阅读 · 0 评论 -
互动直播 之 播放器 类
private:其中,_HNLPSERVICE 是一个结构体宏定义} *//展开为:/*** @brief 视频数据的回调* @param frame: 回调的视频帧结构体指针,若为NULL表示数据格式转换失败* @return 无*/原创 2023-12-12 10:20:02 · 63 阅读 · 0 评论 -
互动直播,扬声器 逻辑梳理
Windows Core Audio API是Microsoft提供的一组API,用于在Windows操作系统上进行音频编程。这些API旨在允许开发人员处理音频设备和音频处理,以及在Windows应用程序中执行与音频相关的任务。这是一个低级API,提供直接访问Windows音频引擎的接口。它允许应用程序以独占或共享模式访问和处理音频流。该API是Core Audio API的一部分,用于枚举和管理音频设备。它允许应用程序发现和与音频设备(如扬声器、麦克风和音频捕捉设备)交互。原创 2023-12-01 17:29:36 · 193 阅读 · 0 评论 -
互动直播项目 之 静音逻辑 梳理
学生自己静音不静音 不关心, 只关心,老师静音主持人后,主持人又自己打开的情况,这种情况下,要更新主持人麦克风UI。注释掉下面的通知,这样也就不用自己的服务器发PUSH了,也不用处理主持人的静音PUSH了。学生可以自己静音,但是老师将其静音情况下,无法自己取消静音的。先判断是否被老师静音,没有被老师静音的情况下,则自己操作。然后,把老师禁言自己的信息改掉。比如,之前被老师静音了,重新进入后,还保持静音状态。比如,学生举手,老师同意连麦后,学生上麦。原创 2023-11-24 11:33:54 · 100 阅读 · 0 评论 -
互动直播 之 视频帧原始数据管理
连麦过程中,各种视频帧字节数据的处理原创 2023-11-20 11:17:46 · 561 阅读 · 0 评论 -
互动直播UI设置 之 主播UI
可以通过设置 padBoxCtrl 的padding来动态调整主画面宽度。我这里是,向主进程发送消息,让主进程显示这个连麦方式窗口。主进程发送WM_COPYDATA消息后,无连麦者,占满窗口,有连麦者,右移窗口。互动进程接受处理主进程发来的消息。原创 2023-10-27 09:36:47 · 531 阅读 · 0 评论 -
互动直播 之 全屏播放时 鼠标隐藏功能
想实现的功能和播放器类似,全屏时,鼠标悬停几秒后,自动隐藏起来。原创 2023-10-25 15:48:58 · 965 阅读 · 0 评论 -
互动直播项目 之 互顶逻辑
场景:PC 直播 和 APP直播时 互顶。原创 2023-10-31 14:44:33 · 93 阅读 · 0 评论 -
网易互动直播2.0 开发 一 集成SDK
参考文档:https://dev.yunxin.163.com/docs/product/%E4%BA%92%E5%8A%A8%E7%9B%B4%E6%92%AD2.0/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/Windows网易互动2.0 SDK是使用VS2017编译的,推荐使用VS2017但是我的项目是VS2013的,涉及关联项目挺多,升级VS2017风险有点大,所以还是尝试VS2013下,调用互动SDK2.0一下载互动2.0 SD...原创 2020-11-26 19:01:51 · 423 阅读 · 2 评论 -
网易互动直播2.0 开发 二 进行互动连麦的主要流程
一 大体流程RTC real time communicationNERTC netease RTC 网易实时通信这里面最主要的是NERTC引擎的创建和使用createNERtcEngine()nertc::IRtcEngine::initialize "initialize"nertc::IRtcEngine::joinChannel "joinChannel"nertc::IRtcEngine::leaveCha...原创 2020-11-30 18:39:24 · 461 阅读 · 0 评论 -
网易互动直播2.0 开发 三 互动事件回调信息
一 SDK回调信息初始化参数时,有这么一项 IRtcEngineEventHandlerEx *event_handler; /**< 用于 SDK 向 App 发送回调事件通知。*/SDK向APP发送的事件通知,由此处理1.1基本回调信息我们比较关注,SDK有哪些信息可以回调给我们,以下是最基本的回调信息namespace nertc{/** IRtcEngineEventHandler 回调接口类用于 SDK 向 App 发送回调事件通知,Ap...原创 2020-11-30 18:39:41 · 320 阅读 · 0 评论 -
网易互动直播2.0 开发 四 设置本地视图和远端视图的方法
一互动连麦详细流程通常的使用方式:RTC引擎初始化后,要先显示自己的画面此时,需要开启本地视频采集 /** 开启或关闭本地视频采集和渲染 该方法启用本地视频采集功能。 @note 该方法设置内部引擎为启用状态,在 \ref IRtcEngine::leaveChannel "leaveChannel" 后仍然有效。 @param[in] enabled 是否启用本地视频: - true: 开启本地视频采集和渲染 (默认...原创 2020-12-02 09:54:01 · 347 阅读 · 0 评论 -
网易互动直播2.0 开发 五 VS2013互动直播1.0老项目,引入VS2017编译的SDK 测试
一 SDK下载https://yunxin.163.com/interact-demo二 SDK放置目录这里采用1.0相同的路径放置,以方便兼容处理2.1头文件2.2 lib文件关联项目2.3 dll三代码整合3.1 互动2.0头文件添加在stdafx.h头文件中,加入2.0所需的头文件3.2编译错误如果编译成功,则不用理会这一段...原创 2020-12-07 14:55:47 · 255 阅读 · 0 评论 -
网易互动直播2.0 开发 六 接口封装类 总体规划 及引擎管理功能
网易云信给出了一个QT的示例,但是这个不能直接在我的项目中使用,因为我是使用duilib开发的,没有QT,所以需要重写一下。 先不考虑具体如何实现,首先考虑下,我们定义的这个类应该做什么,要有什么功能 首先 1) 封装的这个类要有管理互动引擎的功能:创建引擎、初始化引擎、使用引擎、销毁引擎 2) 其次,这个类应该有设备管理功能: 主要是使用 SDK提供的音频设备管理接口...原创 2020-12-10 14:23:59 · 201 阅读 · 0 评论 -
网易互动直播2.0 开发 七 接口封装类 设备管理功能
一 设备管理功能SDK中提供了音频设置 、视频设备管理接口nertc_audio_device_manager.hnertc_video_device_manager.h1.1 音频设备管理接口nertc_audio_device_manager.h1) SDK音频设备接口定义/** 音频设备管理方法。 IAudioDeviceManager 接口类提供用于管理音频设备的相关接口。可通过实例化 IAudioDeviceManager 类来获取 I...原创 2020-12-10 14:26:23 · 201 阅读 · 0 评论 -
网易互动直播2.0 开发 八 房间频道管理 功能
一 加入房间离开房间等互动基本功能1.1加入房间int NRTCEngine::joinChannel(const string& token, const string& roomid, const string& uid, bool autoStartVideo, bool autoStartAudio, int video_resolution){ int ret = kNERtcNoErr...原创 2020-12-10 14:28:23 · 139 阅读 · 0 评论 -
网易互动直播2.0 开发 九 接口封装类 之 推流功能
网易互动2.0, 连麦者进行互动和向外推流是分开的也就是说,连麦者可以只进行彼此互动连麦而不向外推流 也可以选择向外推流,让观众拉流看到推流有点繁琐,正式推流是在有人加入房间之后才能开始推流的,这也很好理解,毕竟有视频后才可以将视频推出去 但是,还有一些设置是需要在加入房间之前提前设置的,这应该是网易自己的逻辑顺序, 比如:设置直播...原创 2020-12-10 14:33:05 · 210 阅读 · 0 评论 -
网易互动直播2.0 开发 十 登录模块管理
一 登录管理模块1.1 原先的登录逻辑之前的互动SDK,是需要登录IM账号的,因此DEMO有关登录窗口在登录窗口初始化时,注册回调信息,登录成功后,创建主窗口1.1.1注册回调信息void LoginForm::InitWindow(){ this->RegLoginManagerCallback();}void LoginForm::RegLoginManagerCallback(){ nim_ui::OnLoginResult cb_resu...原创 2020-12-14 18:14:44 · 141 阅读 · 0 评论 -
网易互动直播2.0 开发 十一 进入房间模块管理
一原先进入互动房间逻辑1.1主播创建房间 nim::VChat::Opt2Callback cb = nbase::Bind(&ChatroomForm::CreateRoomCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); nim_comp::VideoManager::GetInstance()->Crea...原创 2020-12-17 10:39:52 · 236 阅读 · 0 评论 -
网易互动直播2.0 开发 十二 视频设备管理
序官方给出的例子是理想情况下的示例,理想情况下,预览视频,只需要如下调用就可以 void *hWnd = GetHWND(); m_engine->setupLocalVideo(hWnd); //设备本地画布 int nIndexT=m_engine->GetRtcEngine()->startVideoPreview(); //预览但是,实际测试时,发现startVideoPreview失败,后经查看LOG,确认是打开虚拟摄像头失败那么问题来了,怎么...原创 2020-12-18 17:47:25 · 479 阅读 · 0 评论 -
网易互动直播2.0 开发 十三 音频设备管理
网易互动直播2.0 开发 十三 音频设备管理上一篇文章主要介绍了视频设备管理的方式:获得视频设备信息,选择使用哪个设备、设置摄像头分辨率,以及直播SDK中摄像头管理:摄像头设备遍历、摄像头支持的分辨率、设置摄像头分辨率的方式。本章主要介绍音频设备管理,主要是麦克风设备的管理,因为互动肯定要说话,要说话就得管理好麦克风,某种意义上比视频设备管理还要重要。@[TOC](文章目录)一、互动2.0 音频管理1.1 音频设备遍历ListMap NRTCEngine::getRecordingD原创 2020-12-19 19:50:34 · 190 阅读 · 1 评论 -
网易互动直播2.0 开发 十四 如何布局及推流
推流布局对连麦者来说,其它连麦者的画面和声音是重要的对观众来说,各个连麦用户在整体画布上的布局,是重要的2.0SDK提供了新的布局,教1.0版更灵活,但是相对也更麻烦了些, 希望以后能兼容1.0的json设置模式@[TOC](文章目录)提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pand原创 2020-12-25 14:26:50 · 269 阅读 · 0 评论 -
网易互动直播2.0 开发 十五 自定义视频采集发送 及远端视频数据回调
自定义视频采集发送使用SDK提供的机制,只能简单的调用一个摄像头,无法处理较为复杂的场景,比如两个摄像头数据合成、比如屏幕和摄像头数据混合等。这些就需要我们自己处理视频数据,然后将合成后的视频数据发送出去就好。本节主要介绍自定义视频发送接口及使用,自定义数据采集回调、远端连麦者数据回调目录自定义视频采集发送一、自定义视频使用流程1.1使用的接口1.2使用的流程1)设置本地画布2)设置使用外部数据源3)加入房间后,定时向接口发送数据二、远端...原创 2020-12-31 18:47:57 · 231 阅读 · 0 评论 -
网易互动直播2.0 开发 十六 声音回调信息
文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结网络信息回调1.0时,都是在VideoManager::OnVChatEvent(nim::NIMVideoChatSessionType type, uint64_t channel_id, int code, const std::string& json)进行信息回调,现在需要将1.0改成2.0,就必须清楚1.0我们关注的那些回调...原创 2021-01-05 10:56:39 · 145 阅读 · 0 评论 -
网易互动直播2.0 开发 十七 播放器回调视频数据回调
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言网易提供了一个播放器SDK ,本文主要介绍播放器视频回调部分一、播放器视频回调流程1.1 注册视频回调CBnim_player::...原创 2021-01-18 16:03:18 · 146 阅读 · 0 评论 -
网易互动直播2.0 开发 十八 双屏逻辑
目录前言一、双屏设置二、几个关键点1.选择双屏布局时机2.向服务器发送切换布局信息总结前言本节和网易无关,主要梳理自己的双屏逻辑。一、双屏设置项目中,使用了两种视频源,把两种视频合成后,推流出去。二、几个关键点1.选择双屏布局时机1)在点击开始上课时,跳出布局选择对话框,并在选择后,向主进程发送开始上课消息SendCef_StartClass void ShowPhotoFrameDlg_startClass() //开始上课...原创 2021-01-25 10:15:55 · 166 阅读 · 0 评论 -
视频数据管理 及显示机制
场景互动直播过程中,我们可以得到摄像头采集的视频数据和连麦者传来的视频原始数据。我们要利用好这些数据,并将其显示出来,如果管理这些视频数据,便是本文所要探讨的。目录场景一 视频帧 的数据结构1.1基本数据结构1.2给其扩展给存储功能二 视频帧管理类2.1本机采集的视频2.2连麦者视频信息2.3 添加视频帧1)本机采集的视频处理方式2)连麦者视频处理方式2.4 获得视频帧2.5综上所述,视频管理类可这样设计三视频...原创 2020-12-31 16:24:15 · 371 阅读 · 1 评论