Windows实时视频通话功能实现流程(实时视频系列四)

实时视频通话系列第四篇。上一篇我们介绍了在Windows环境下如何集成即构音视频SDK,回顾《Windows实时视频通话SDK集成指引》,这一篇将介绍视频直播功能实现流程。

还是以 2 人间的实时视频为例,主要流程如下:
这里写图片描述
请注意:

上面流程中以 2 名房间成员间的实时视频为例,实际上 Zego SDK 支持多人实时视频。建议开发者按需设计。

为了便于开发者更快理解 VideoTalk 中的逻辑,下述每节会将功能核心源码片段挑出来并加以讲解。开发者亦可直接阅读 VideoTalk 源码,两者是一致的。

1、登录房间

用户间进行实时视频对话前,需要先登录到同一个房间。

VideoTalk 中登录相关源码片段演示如下,仅供参考:

ZegoVideoTalkDialog.cpp// 执行登录房间操作,成功后将在回调中发布直播
if (!LIVEROOM::LoginRoom(m_pChatRoom->getRoomId().toStdString().c_str(), role))
{QMessageBox::information(NULL, tr("提示"), tr("进入房间失败"));
}//LoginRoom 的回调函数 OnLoginRoom
void ZegoVideoTalkDialog::OnLoginRoom(int errorCode, const QString& strRoomID, QVector<StreamPtr> vStreamList)
{if (errorCode != 0){addLogString(tr(登录房间失败. error: %1").arg(errorCode));QMessageBox::information(NULL, tr("提示"), tr("登录房间失败. error: %1").arg(errorCode));this->close();return;}addLogString(tr("登录房间成功. roomID: %1").arg(strRoomID));//加入房间列表roomMemberAdd(m_strCurUserName);//登录房间成功即推流以及拉流StartPublishStream();for (auto& stream : vStreamList){StartPlayStream(stream);}}

2、开始视频通话

登录房间成功后,即可开始走推流、拉流流程,以推送己方画面和观看对方画面。

VideoTalk 中开始视频通话(即推流、拉流)相关源码片段演示如下,仅供参考:

ZegoVideoTalkDialog.cpp// 同意视频通话,房间成员开始推流
void ZegoVideoTalkDialog::StartPublishStream()
{QTime currentTime = QTime::currentTime();//获取当前时间的毫秒int ms = currentTime.msec();QString strStreamId;
#ifdef Q_OS_WINstrStreamId = QString("s-windows-%1-%2").arg(m_strCurUserID).arg(ms);
#elsestrStreamId = QString("s-mac-%1-%2").arg(m_strCurUserID).arg(ms);
#endifm_strPublishStreamID = strStreamId;StreamPtr pPublishStream(new QZegoStreamModel(m_strPublishStreamID, m_strCurUserID, m_strCurUserName, "", true));m_pChatRoom->addStream(pPublishStream);//推流前调用双声道LIVEROOM::SetAudioChannelCount(2);if (m_avaliableView.size() > 0){int nIndex = takeLeastAvaliableViewIndex();pPublishStream->setPlayView(nIndex);addAVView(nIndex);if (theApp.GetBase().getUseSurfaceMerge()){
#if (defined Q_OS_WIN) && (defined USE_SURFACE_MERGE) StartSurfaceMerge();
#endif}else{LIVEROOM::SetVideoFPS(m_pAVSettings->GetFps());LIVEROOM::SetVideoBitrate(m_pAVSettings->GetBitrate());LIVEROOM::SetVideoCaptureResolution(m_pAVSettings->GetResolution().cx, m_pAVSettings->GetResolution().cy);LIVEROOM::SetVideoEncodeResolution(m_pAVSettings->GetResolution().cx, m_pAVSettings->GetResolution().cy);//配置ViewLIVEROOM::SetPreviewView((void *)AVViews.last()->winId());LIVEROOM::SetPreviewViewMode(LIVEROOM::ZegoVideoViewModeScaleAspectFill);LIVEROOM::StartPreview();}QString streamID = m_strPublishStreamID;m_anchorStreamInfo = pPublishStream;addLogString(tr("创建流成功, streamID: %1").arg(streamID));if (LIVEROOM::StartPublishing(m_pChatRoom->getRoomName().toStdString().c_str(), streamID.toStdString().c_str(), LIVEROOM::ZEGO_JOIN_PUBLISH, "")){m_bIsPublishing = true;addLogString(tr("开始直播,流ID: %1").arg(streamID));}}
}// 推流成功,开始拉流,观看房间其他成员画面
void ZegoVideoTalkDialog::StartPlayStream(StreamPtr stream)
{if (stream == nullptr) { return; }m_pChatRoom->addStream(stream);if (m_avaliableView.size() > 0){int nIndex = takeLeastAvaliableViewIndex();qDebug() << "playStream nIndex = " << nIndex << " play stream id is " << stream->getStreamId();stream->setPlayView(nIndex);addAVView(nIndex);//配置ViewLIVEROOM::SetViewMode(LIVEROOM::ZegoVideoViewModeScaleAspectFill, stream->getStreamId().toStdString().c_str());LIVEROOM::StartPlayingStream(stream->getStreamId().toStdString().c_str(), (void *)AVViews.last()->winId());}
}

3、结束视频通话

视频通话结束后的操作主要是停止推流、停止拉流、清理视图、登出房间等,开发者可按需调用。

VideoTalk 中结束视频通话相关源码片段演示如下,仅供参考:

ZegoVideoTalkDialog.cpp// 停止预览,停止推拉流,清理 view
void ZegoVideoTalkDialog::cleanBeforeGetOut()
{//离开房间时先把混音功能和声卡采集关闭
#ifdef Q_OS_WINif (m_isUseDefaultAux)EndAux();else{AUDIOHOOK::StopAudioRecord();LIVEROOM::EnableAux(false);AUDIOHOOK::UnInitAudioHook();}
#elseEndAux();
#endifif (ui.m_bCapture->text() == tr("停止采集"))
#ifdef Q_OS_WINLIVEROOM::EnableMixSystemPlayout(false);
#endiffor (auto& stream : m_pChatRoom->getStreamList()){if (stream != nullptr){if (stream->isCurUserCreated()){StopPublishStream(stream->getStreamId());}else{StopPlayStream(stream->getStreamId());}}}roomMemberDelete(m_strCurUserName);LIVEROOM::LogoutRoom();if (timer != nullptr)timer->stop();//释放堆内存delete m_cbMircoPhoneListView;delete m_cbCameraListView;delete m_memberModel;delete m_cbMircoPhoneModel;delete m_cbCameraModel;delete timer;delete gridLayout;//指针置为空m_cbMircoPhoneListView = nullptr;m_cbCameraListView = nullptr;m_memberModel = nullptr;m_cbMircoPhoneModel = nullptr;m_cbCameraModel = nullptr;timer = nullptr;gridLayout = nullptr;
}

4、 API 调用时序图

实时视频 API 调用时序图如下:
这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26800.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三篇,私有化部署微信的语音电话,视频聊天IM聊天APP开发源码

前面发布两篇文章&#xff0c;有需要的朋友可以回头看一下&#xff0c;希望可以帮到大家的学习和使用。程序采用了uniapp开发&#xff0c;后端采用PHP&#xff0c;数据库采用MySQL的&#xff0c;程序代码开源&#xff0c;可任意二次开发部署等。 计划实现的功能列表 1、发布消…

Windows语音通话SDK集成及功能实现(实时语音通话四)

实时语音通话系列文章四。本篇讲述Windows环境下集成即构科技语音通话SDK&#xff0c;实现语音通话功能流程。 一、SDK集成指引 1、准备环境 请确保开发环境满足以下技术要求&#xff1a; Visual Studio 2013以上版本 Windows7、Windows8、Windows10或以上版本 麦克风、摄像…

微信原生组件|基于小程序实现音视频通话

1 微信小程序原生推拉流组件功能简介 本文将介绍如何使用微信小程序原生推拉流组件 <live-pusher> 和 <live-player> 进行推拉流&#xff0c;快速实现一个简单的实时音视频通话。 由于微信小程序原生推拉流组件使用起来比较复杂&#xff0c;推荐开发者使用即构封…

Python利用微软Azure免费的语音合成TTS源码分享

我敢保证,用过微软的语音合成后,你就会发现这是世界上最好的语音合成软件。99.99%接近人声自然流程。语调也非常自然,结合其独特的sml标记语言,合成过程中可控制主播声色和音调,以及停顿等各种的内容。 再多的介绍,自己可以百度去了解,本文讲解如何使用免费的方法合成语…

【新知实验室--音视频通话】腾讯云TRTC-实时音视频---多人会议视频通话SDK基础搭建

&#x1f996;我是Sam9029&#xff0c;一个前端 Sam9029的CSDN博客主页:Sam9029的博客_CSDN博客-JS学习,CSS学习,Vue-2领域博主 &#x1f431;‍&#x1f409;&#x1f431;‍&#x1f409;恭喜你&#xff0c;若此文你认为写的不错&#xff0c;不要吝啬你的赞扬&#xff0c;求收…

微软MFC下做speech sdk语音识别,消息响应的版本

网上虽然有很多语音识别的教程&#xff0c;但是很多是却少一些部分&#xff0c;笔者在综合了几篇之后&#xff0c;做成功了语音识别&#xff0c;下面是教程。 网上的语音识别分成几种&#xff0c;把语音识别消息放入队列中的是一种&#xff0c;笔者认为这个效率比较高&#xf…

腾讯云TRTC服务实现小程序语音/视屏会议

腾讯云TRTC服务的入门 TRTC 是腾讯云主打全平台互通的多人音视频通话和低延时互动直播解决方案。TRTC服务有多种客户端的支持&#xff0c;对于IOS、Android、React native等都支持的比较好&#xff0c;我们主要在于 IOS、Android、Web三端进行处理&#xff0c;其中 TRTC Web S…

【VS开发】【智能语音处理】Windows下麦克风语音采集

简介 这是我很早以前的大学毕业设计,忽然间找到贴出来以纪念自己的纯真年代...但是因为CSDN不给面子所以导致短短的一篇文章贴了足足7次..他老提时说文章超过了64K,老大,拜托,那是算上了里面的图片大小吧...:-( 本文简单介绍了声卡的工作原理 , 录音的原理以及数字音频的基本知…

【实时语音转文本】PC端实时语音转文本(麦克风外音系统内部音源)

语音转文字这个功能可以应用在视频动态字幕&#xff0c;语音快速输入&#xff0c;实时记录通话内容&#xff0c;高级应用可以在人工智能&#xff0c;语音识别&#xff0c;智能助手方面&#xff0c;还需要一点机器学习可以做出一些好玩的东西&#xff0c;比如PC端AI助理&#xf…

使用微软的语音识别引擎Microsoft Speech API进行语音控制

以下代码来自&#xff1a;http://mmcheng.net/zh/imagespirit/ 本人仅作提取&#xff1a; SREngine语音识别引擎封装类&#xff1a; #pragma once/************************************************************************/ /* Notice: this project is used to support sp…

微软语音合成(tts)服务申请和调用

1、申请账户&#xff1a; https://azure.microsoft.com/zh-cn/free/ 这里有个视频教程&#xff0c;根据此完成申请流程&#xff1a; https://www.bilibili.com/video/BV15a4y1W7re?vd_sourcebf07f28d37849885d215dc3aea189eba 申请完成后&#xff0c;就可以到这里申请资源&am…

英超引入 AI 球探,寻找下一个足球巨星

By 超神经 内容提要&#xff1a;球探对于很多人来说是一个略显神秘的群体&#xff0c;他们对一个球队的建设和发展至关重要。为了提高球探的工作效率&#xff0c;英超伯恩利足球俱乐部最近启用了 AI 球探。 关键词&#xff1a;AI 球探 计算机视觉 姿态识别 最近&#xff0c;中国…

通过whoscored网站对转会球员的评分来比较五大联赛水平高低

我是一个八年级的学生&#xff0c;上学期学习了Python和包括标准差在内的数据统计方法。参考“怕砍不留名”在soccer.hupu.com上的帖子&#xff0c;并且在爸爸的指导下我尝试对欧洲五大足球联赛&#xff08;英超、德甲、西甲、意甲、法甲&#xff09;水平高低做一个比较。 五大…

看卡塔尔世界杯,diff一下足球比赛与软件开发

diff一下足球比赛与软件开发 吐槽世界杯E组&#xff01;类比软件开发与足球比赛教练与架构师的作用 新技术——半自动越位技术世界杯冠军 吐槽世界杯E组&#xff01; 最近博主看了多场世界杯比赛&#xff0c;看的我心力交瘁&#xff0c;欲哭无泪。 从日本与哥斯达黎加那场比赛开…

一个值得关注的技术公众号「腾讯云开发者」

今天向大家推荐的是腾讯云技术社区的公众号&#xff0c;是腾讯官方推出的技术知识分享阵地&#xff0c;每周公开腾讯最新的技术工程方案&#xff08;如微信、健康码、王者荣耀等知名业务的技术架构&#xff09;、ChatGPT 等行业前沿热点解读、研发经验和工作方法等干货&#xf…

踩坑小总结

本来想总结一下自己工作到现在踩过的坑&#xff0c;实在是太多了&#xff0c;自己之前也年轻不懂事&#xff0c;没有记录的习惯&#xff0c;想到多少写多少吧。 1.前、后端分离框架&#xff1a;刚进入工作的时候采用的是easyuissh的框架&#xff0c;前后端一体&#xff0c;后来…

如何调教一个定制化的ChatGPT私人助理,接入自家知识库

大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 我在之前的文章里介绍过&#xff0c;如何利用 OpenAI 开放的 API&#xff0c;将 ChatGPT 接入自己开发的程序&#xff1a; 把 ChatGPT 加到你自己的程序里 当时开放的模型还是 text-davinci-003。 文章发布后没多久…

ROS (roslaunch turtle_tf turtle_tf_demo.launch)报错-已解决(利用CHAT-GPT修bug)

在使用古月居的ROS入门21讲时&#xff0c;使用turtle_tf包学习tf功能时出现报错&#xff0c;网上的报错都是由于python版本的问题&#xff0c;修改后而无法解决。最后利用CHAT-GPT的修bug提示&#xff0c;最后发现是ros缓存导致报错。在文章的最后还会提供修改python版本的链接…

chatgpt赋能python:Python代码扫描:如何编写高质量的代码

Python 代码扫描&#xff1a;如何编写高质量的代码 如果你是一位有着10年的 Python 编程经验的工程师&#xff0c;你一定知道写出高质量的 Python 代码是多么的重要。但是&#xff0c;即使你是一名经验丰富的 Python 开发者&#xff0c;你的代码仍然可能存在一些隐藏的漏洞和低…

福成股份很忙:实控人李福成被罚8万,新董事长李良则要打官司

最近&#xff0c;福成股份&#xff08;SH:600965&#xff09;比较忙。 7月6日&#xff0c;河北福成五丰食品股份有限公司&#xff08;下称“福成股份”&#xff09;发布公告称&#xff0c;其近日收到证监会河北监管局&#xff08;下称“河北证监局”&#xff09;的《行政处罚决…