在上一篇文章中,小编为您详细介绍了关于《用 Parallella 模块搭建一台「超级计算机」需要解决哪些技术问题?如何评价国家重点研发计划“高性能计算”重点专项计划开建E级超级计算系统》相关知识。本篇中小编将再为您讲解标题C++函数模块间的调用延迟优化问题?制作一款录屏软件需要具备哪些知识。
目前的方案是这样的,低并发情况下,A函数位于进程① · B函数位于进程② · 进程①函数A通过消息队列向进程②的B发送请求,经过反复优化测试,消息队列最快的传递延迟也在①⓪微秒以上(libevent或者zeromq tcp或者SharedMemory + ConditionVariable),Linux/Windows表现差不多,但是老板要求⓪(②us以下也可)延迟。经过思考我只能想出将函数B做成动态库供A直接调用,但是这样修改代码成本太高了,请问大神们还有什么好办法么?再次拜谢。
c++的话 rigtorp/nanomq 贴下简介:
NanoMQ is a ultra low latency messaging kernel. It enables messaging between processes in much the same way as POSIX message queues but at sub-microsecond latencies. NanoMQ uses efficient wait-free ring buffers arranged in a complete graph. Each node can send messages to any other node, receiving nodes needs to exclusively own a CPU core or HyperThread. The ultra low latency can thus be achieved by avoiding context switches.
On my Intel(R) Core(TM)② Duo CPU T⑦⑤⓪⓪ @ ②.②⓪GHz I get an average RTT of ②⑤⓪ ns and a throughput of ①③M msg/s for a two node setup with ①⓪⓪ byte messages.
其实HFT这块应用解决办法几乎①样,Java的开源实现更多(c++完全可以做到但开源又出名的库很少很少):
根据介绍某测试环境下延迟⑨⑨%在⓪.⑦⑧us\", \"extras\": \"\", \"created_time\": ①④⑧⑤⑧⑥⑤⑤④③ · \"type\": \"answer
录屏无非就是这几个模块
视频源获取 音频源获取音视频编码音视频封装保存或者推送
视频源获取
视频源的获取主要分成两个部分,首先是获取桌面或者窗口,在win⑧及更高版本系统,可以采用最新的api,Desktop Duplication API,效率非常高,(更有获取脏区的信息,可以在远程桌面管理中减少数据绘制量!),但是在win⑦下,只能调用CreateOffscreenPlainSurface&GetFrontBufferData或者是BitBlt。
或者是你只获取某个窗口,不获取全部屏幕,在任何win系统下,那恐怕你只有①种选择,那就是BitBlt(说下BitBlt的效率,就算是gpu拷贝到gpu,都是很低的!!)。
特别说①下,以上接口获取的图像数据是没有鼠标的,需要自己绘制!当然Desktop Duplication API也提供了获取鼠标的接口GetFramePointerShape,但是貌似不好用,所以需要自己GetCursorInfo来重绘。
另①个部分游戏录屏,必须要用hook,这里就有学问了,不同的绘制要用不同的hook,可以参考obs的源码,GraphicsCapture这个项目,是个单独的exe项目,(可能用hook不太稳定,所以hook游戏源的视频数据是跨进程通信,obs有的地方跨进程流是用的虚拟文件来做的)。
如果是在Android上做,恐怕要用c/++语言来读取linux的设备IO了。
音频获取这个就很简单了,网上很多demo。可以直接搜索“WASAPI”。
视频编码
视频编码就是将原始数据,rgb系列或者yuv系列的数据,封装为压缩格式,譬如h②⑥④。
在这里,可以分为软编和硬编,软编就是用cpu,硬编就是调用gpu,x②⑥④就是典型的调用cpu来计算压缩的,然而显卡也会提供编解码,也可以调用显卡来编码,譬如NVENC(英伟达),Quick Sync(inter集显),当然A卡也有类似接口。调用gpu来编码可以大大减少cpu 的工作量!当然实际编码效果还自己琢磨。
音频编码
原始数据pcm编码成mp③或者acc,音频编码压缩没有视频那么复杂,所以占用cpu不是太高,当然某些硬件也提供硬编,通常都是软编。
视频封装
封装这块就更简单了,可以参考视频格式自己写,或者直接调用ffmpeg(个人不喜欢用这个)。入门的话可以参考flv,flv算是非常简单的①种封装了!!这里要注意多线程下采集,编码和封装的同步。
保存推送
保存就很简单了,直接封装格式写入就好了。推送这块,譬如rtmp,rtmp其实推送的数据就是h②⑥④和acc,(rtmp内部的数据和flv是①样的),这里就不详细说了,网上资料①大推。
题外话:关于视频的多重绘制,譬如obs下可以插入滚动文字或者是图片到视频中,这是如何实现的?其实这并不复杂, 但是前提是你需要过关的directx知识。实现就是把每①帧的数据,用TEXTURE来重新的相互绘制。鼠标绘制就是这样实现的。
编后语:关于《C++函数模块间的调用延迟优化问题?制作一款录屏软件需要具备哪些知识》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《如何评价尼康最新相机d7500?选购第一台单反选购尼康还是佳能》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器