JCHub

  • Home
  • Category
    • A/V
    • WebRTC
    • Beauty of Programming
    • Linux
    • Windows
    • Moments of Life
    • Campus Life
  • Reference
    • API Reference
    • Utilities
    • AV Test
    • Doc
  • Message Board
  • About
JCHub
Code as My Sword, Lost in Obsession
Beauty of Programming

Google ProtoBuf协议介绍

Protocol buffers(简称protobuf)是谷歌提供的一种轻便高效的结构化数据存储格式,类似于xml与json,可用于结构化数据的序列化。protobuf是一种二进制格式,比xml更小,更快,更简洁。适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式,能够减少数据传输量。据了解微信(例如微信客户端蓝牙外设协议)与QQ也在使用protobuf,我目前在学习的百度开源的rpc框架brpc也在使用。protobuf目前提供了 C++、Java、Python、Go、C#五种语言的 API。 protobuf原理以及使用官方文档写的很详细了,我就不啰嗦了。具体可以参考谷歌开发者相关文档: 1)protobuf编码原理:https://developers.google.com/protocol-buffers/docs/encoding 2)protobuf使用教程:https://developers.google.com/protocol-buffers/docs/tutorials

2017年11月26日 0comments 2630hotness 3likes Jeff Read all
Information Technology

浅谈吃鸡游戏大地图加载

最近最火的游戏莫过于各种“吃鸡”,自己也是一个fps游戏爱好者,玩过很多枪战游戏,这次也玩了腾讯cf手游的荒岛特训模式以及网易的荒野行动。吃鸡类游戏都是一个开放的大地图,由于手机配置没PC高,而且容易发热,续航是问题,所以玩这两个游戏时,能明显感觉到地图是动态加载的。当角色移动时,前面的物体才逐渐加载出来,这样做也是为了节省内存,减少资源占用。 记得大学时,做碰撞检测写过一个虚拟场景漫游系统,那时我用到了大地图分块技术节省内存,建模时将3d场景切块分区,当人物靠近某块区域时,才加载某块对应场景。玩的这两个吃鸡游戏地面纹理都是一次性加载的,当人物移动时,视野范围内地面上的房屋建筑,植被才慢慢加载出来。这样做可以大大降低对手机配置要求,说是大地图,其实还是一个小场景。

2017年11月26日 0comments 2495hotness 2likes Jeff Read all
Windows

Win10任务管理器GPU信息

睡前更新了下Win10 秋季创意者1709版本,发现任务管理器多了GPU信息。如下是我自己电脑的双显卡信息。 可以查看视频解码,处理,拷贝等信息。对于做视频或者游戏渲染优化的十分有帮助。

2017年10月18日 0comments 2630hotness 1likes Jeff Read all
Windows

DXGI中的flip显示模型

从win8开始,就增加了flip显示模型,通过该显示模型,程序可以减少系统开销,同时增加性能。基于intel media sdk解码,d3d11渲染,在我自己的电脑上通过对比,该模型确实可以明显降低CPU负载,渲染时间几乎忽略不计。不过坑爹的是,在部分独显不同电脑上,该模型并没有发挥出来该有的作用,反而增加GPU很大的负载,得不偿失。在d3d12中只支持flip model渲染,我想这些坑爹的电脑也就不支持d3d12渲染显示了,没想到这个flip model跟显卡类型,驱动等关系很大。下面简单说下flip model渲染。 桌面窗口管理器 桌面窗口管理器是Vista以后的系统中的一个新组件:Desktop Window Manager(DWM)。常见的任务栏窗口的实时缩略图效果,aero效果都是是DWM提供的。DWM提供了基于硬件加速的渲染。DWM出现后,应用程序的显示不再是直接画到屏幕上,而是送到显存中的一个离屏Surface。DWM将这些Surface合成一幅图像显示到屏幕之上。所以现在我们看到的显示器所有内容都是DWM处理过的。 DXGI flip model 与BitBlt model对比 二者主要区别是后台缓冲如何送到WDM。对于bitblt model,调用一次IDXGISwapChain1::Present1,后台缓冲内容就被拷贝到DWM 中一个叫做redirection surface的地方。对于flip model,后台缓冲内容直接与DWM共享,少了拷贝操作,因此更高效。 如何使用 创建交换链时。DXGI_SWAP_CHAIN_DESC1结构体按如下要求填充: 1)SwapEffect:DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 2)BufferCount:2 3)Format:DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_B8G8R8A8_UNORM,DXGI_FORMAT_R8G8B8A8_UNORM之一; 4)SampleDesc.Count :1; 5)SampleDesc.Quality:0。 每一次调用Present1前,都要调用一次ID3D11DeviceContext::OMSetRenderTargets,因为Present1后,系统会把RenderTargetView解绑,所以每次都需要再调用OMSetRenderTargets设置RenderTargetView。 注意事项 1)一个窗口句柄只能绑定一个flip model交换链; 2)使用了flip model的句柄,就不能再使用其他api绘制了。在flip model中,只有flip model交换链传递到DWM中的Direct3D内容才可见,其他版本Direct3D 以及GDI内容更新将被忽略。

2017年9月28日 0comments 3209hotness 11likes Jeff Read all
Windows

CreateSwapChainForHwnd返回0x887A0001错误

IDXGIFactory2::CreateSwapChainForHwnd 创建交换链时,返回0x887A0001错误,也就是DXGI_ERROR_INVALID_CALL,查了下,原来是一个窗口句柄只能绑定一个flip显示模型交换链。附上MSDN上的解释: Because you can associate only one flip presentation model swap chain at a time with an HWND, the Microsoft Direct3D 11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see Deferred Destruction Issues with Flip Presentation Swap Chains.

2017年9月18日 0comments 2679hotness 0likes Jeff Read all
A/V

流媒体网络性能指标——抖动

有时候我们开发一个流媒体系统,做完了却不知道如何用数字描述我们的系统,体现我们的优势,作为客户来说,可以描述这套系统的数字指标是最直观的,尤其在网络性能这块。在流媒体网络中,影响流媒体服务质量(QOS)的因素有很多,而这些因素可以作为我们衡量流媒体网络性能的指标。 衡量流媒体网络性能的常见指标主要有: 带宽 吞吐量 延时 抖动 丢包率 本篇文章主要讲下抖动(jitter),以及如何处理抖动,本文主要针对语音通信。在网络中,每个包从发送端到接收端的时延是不相同的,而jitter就是用来衡量这种不同。在发送端数据包发送时间间隔是相同的,也就是均匀发送数据,但是由于各种情况,例如拥塞,因为网络错误导致的丢包等,接受端收到数据包间隔就会不一样了,可能一会大,一会小,这就是所谓的抖动,严重影响音质。 下面先了解下传统学术上的相关定义。 延时:记s(i), r(i)分别为第i个包的发送、接收时间戳,延时d(i) = r(i) – s(i) 抖动:jitter(i) = d(i+1) – d(i) 传统定义中,抖动仅能描述某个时刻的情况,而流媒体是持续的,我们更关注某个时间段上的情况,对比某时刻情况更实用。 为了更好描述某个时间段的抖动,我们按如下定义更实用的抖动指标(参考声网): 1)记s(i), r(i)为第i个包的发送与接收时间戳,延时d(i) = r(i) – s(i); 2)t秒为一个统计周期,集合D = {d(i) | i ∈ t秒内收到的包序号集合 }; 3)对集合D做从小到大排序,得到D(sorted); 4)对D(sorted)中每个元素,减去D中最小值min(D),得到新的集合 D(jitter)。 现在D(jitter)中元素含义就是,t秒内所有语音数据包传输延时,相对最快那个数据包的偏移,原来抖动定义是相对前一个包延时偏移。可知D(jitter)中最大元素表示传输延时最大的。 为了消除抖动,接收端要么丢帧,要么延时。一般都会引入一个缓冲区,也就是抖动缓冲(jitterbuffer)。引入了抖动缓冲后,我们可以这样处理抖动: 1)jitter > jitterbuffer length,丢帧处理; 2) jitter

2017年8月14日 5comments 6018hotness 8likes Jeff Read all
Moments of Life

对那些自称“精通c++”人的看法

工作三年了,碰到过各种层次的人,也因为一些原因看过很多人的简历。从中我发现有些人喜欢称自己精通C++,有些人在简历中除了C++,感觉没其他什么内容,有些人整天啃着C++语法,其他啥也不会。 就我自己,我从来不敢称自己精通C++,我只敢说熟悉,语言对我而言只是个工具,不懂得大不了去查。这世界上没有一个人精通C++,C++标准那么多,谁会精通,真精通的话,我觉得你一个人先写一个C++编译器给我看看。一般说精通C++的就我认识的基本都是些刚毕业的,如果工作多年还这么说基本是水平很差的,跟刚毕业的没啥区别。我刚毕业时确实比较在意C++,觉得要花大时间掌握C++语法,那时各种C++题目都很熟练,可是没多久就放弃了,因为我发现这纯粹是浪费时间,一点意义也没,实际用到的又有多少。对于语言工具能用的好就可以,更重要的是自己感兴趣,愿意钻研的领域,某个具体问题的解决,牛逼的技术都在语言之外。正是因为这样以及工作原因,我才会钻研音视频,喜欢研究一些音视频相关东西,以及一些技术背后原理。 记得有一个同事说了类似这样一句话:像我工作多年了,C++学得差不多了,你们年轻应该多花时间学习C++。当时我也只是笑了笑,只能呵呵。下面分享一个大牛在知乎上对此的看法:

2017年6月11日 0comments 2600hotness 1likes Jeff Read all
Windows

DirectX 9 到DirectX 11 API的对应

从DirectX 9到DirectX 11 API变化了很多,对于从DirectX 9升级到DirectX 11的项目可以参考如下文章,这样可以清楚知道如何升级: Map DirectX 9 features to DirectX 11 APIs

2017年6月11日 0comments 1607hotness 0likes Jeff Read all
1…7891011…26
Copyright Statement

Unauthorized reproduction or plagiarism in any form is strictly prohibited. For reprint requests, please contact via email.

Recent Comments
Addiea9 Published at 5 days ago(04 04202643001 08 08am26) Some called it luck. Then Sarah cashed 800K. Be ne...
snail Published at 2 weeks ago(03 03202633105 27 27pm26) 多谢,大佬。醍醐灌顶!
dongxuh Published at 9 months ago(07 07202573103 27 27pm25) 真心不错的博客,有机会能一起分享
南南 Published at 9 months ago(07 07202573103 15 15pm25) 写的超棒!
Jeff Published at 11 months ago(05 05202553105 15 15pm25) 2025-03-12的提交已经支持了
Ad

COPYRIGHT © 2026 jianchihu.net. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang