2、FFmpeg实战
(一)FFmpeg命令
- 音频PCM/AAC文件提取
- 视频YUV/H264文件提取
- 解复用、复用
- 音视频录制
- 视频裁剪和合并
- 图片/视频转换
- 直播推流和拉流
- 水印/画中画/九宫格滤镜
注:掌握FFmpeg的目的
- 1.快速掌握FFmpeg能做什么;
- 2.加深对音视频的理解
(二)SDL跨平台
- 多媒体开发库实战
- SDL环境搭建
- SDL事件处理
- SDL线程处理
- 视频YUV画面渲染
- 音频PCM声音输出
注: SDL兼容Win、Ubuntu、Mac三大平台,主要用于后续项目的画面显示和声音输出
(三)FFmpeg基石精讲
- FFmpeg框架
- FFmpeg内存引|用计数模型
- 解复用相关AVFormat XXX等
- 编解码相关AVCodec XXX等
- 压缩数据AVPacket
- 未压缩数据AVFrame
- FFmpeg面向对象思想
- Packet/Frame数据零拷贝
注:目的熟悉FFmpeg常用结构体和函数接口
(四)FFmpeg过滤器
- FFmpeg过滤chain框架
- 音频过滤器框架
- 视频过滤器框架
- 多路音频混音amix
- 视频水印watermark
- 视频区域裁剪和翻转
- 视频添加logo
(五)FFmpeg音视频解复用+解码
- 解复用流程
- 音频解码流程
- 视频解码流程
- FLV封装格式分析
- MP4封装格式分析
- FLV和MP4 seek有什么区别
- 为什么FLV格式能用于直播
- 为什么MP4不能用于直播
- MP4能否用来做点播
- AAC ADTS分析
- H264 NALU分析
- AVIO内存输入模式
- 音频重采样实战
- 重采样后的数据播放时长是否一致
- 重采样后PTS如何表示
- 视频解码后YUV内存对齐问题
- 音频解码后PCM排列格式问题
- 硬件解码dxva2/nvdec/cuvid/qSV
- 硬件gpu数据转移到cpu
- H265解码
注: FFmpeg API学习:视频解复用->解码->编码->复用合成视频
(六)ffplay播放器
- 掌握ffplay.c的意义
- ffplay框架分析
- 解复用线程
- 音频解码线程
- 视频解码线程
- 声音输出回调
- 画面渲染时间间隔
- 音频重采样
- 画面尺寸格式变换
- 音频、视频、外部时钟同步区别
- 以视频为基准时音频重采样补偿
- 音量静音、调节大小的本质
- 音视频packet队列大小限制
- 音视频packet队列线程安全
- 音视频frame队列大小限制
- 音视频frame队列线程安全
- 暂停、播放实现机制
- seek播放导致的画面卡住问题.
- seek播放数据队列、同步时钟处理
- 如何做到逐帧播放
- 播放器退出的流程要点
注: ffplay.c是ffplay命 令的源码,掌握fplay对于我们自己开发播放器有事半功倍的效果
(七)FFmpeg音视频编码+复用合成视频
- AAC音频编码
- H264视频编码
- PCM+ YUV复用合成MP4/FLV
- H264编码原理
- IDR帧和帧区别
- 动态修改编码码率
- GOP间隔参考值
- 复用合成MP4音视频不同步问题
- 编码、复用timebase问题
- MP4合成IOS不能播放问题
- 重采样后PTS如何表示
- 视频编码YUV内存对齐问题
- 硬件编码dxva2/nvenc/cuvid/qsv
- H265编码原理
- H264、H265编码互转
(八)ffmpeg多媒体
- 视频处理工具
- 掌握fmpeg.c的意义
- ffmpeg框架分析
- 音视频编码
- 封装格式转换
- 提取音频
- 提取视频.
- logo叠加
- 音视频文件拼接
- filter机制
- 命令行解析流程
- MP4转FLV不重新编码逻辑
- MP4转FLV重新编码逻辑
- MP4转FLV scale
注: ffmpeg.c是ffmpeg命令的源码,掌握ffmpeg.c的大体框架对于我们要实现一些不知道怎么编写代码的功能(用ffmepg命令行可以但不知道怎么调用ffmpeg api时可以参考ffmepg.c的逻辑)有极大的帮助,比如要裁剪视频长度。
(九)FFmpeg+ QT播放器
- 常见开源播放器分析
- CUVID/D3D11VA硬解
- 界面和播放核心分离框架分析
- 音量频谱展示
- 播放器模块划分
- 音频均衡器
- 解复用模块
- 画面旋转、翻转
- 音视频解码
- 画面亮度、饱和度调节
- 播放器控制
- 画面4:3 16:9切换
- 音视频同步
- 码流信息分析
3、流媒体客户端
(一)RTMP推拉流项目实战
- RTMP协议分析
- wireshark抓包分析
- H264 RTMP封装
- AAC RTMP封装
- RTMP拉流实战
- H264 RTMP解析
- AAC RTMP解析
- RTMP推流实战
- 0没有MetaData能否播放
- RTMP推流是否会导致延迟
- RTMP推流如何动态调整码率
- RTMP推流如何动态调整帧率
- RTMP拉流是否会导致延迟
- 如何检测RTMP拉流延迟
- 如何解决RTMP播放延迟
- ffplay. vlc能否用来测试播放延迟
- ffplay、vlc能否用来测试播放延迟
- RTMP拉流播放变速策略设置
(二)RTSP流媒体实战
- RTSP协议分析
- RTP协议分析
- H264 RTP封装
- H264 RTP解析
- AAC RTP封装
- AAC RTP解析
- RTCP协议分析
- RTSP流媒体服务器搭建
- RTSP推流实战
- RTSP拉流实战
- wireshark抓包分析
- RTP头部序号的作用
- RTCP的NTP和RTP的TS的区别
- RTP头部序号的作用
- RTCP的NTP和RTP的TS的区别
- RTSP交互过程
- 花屏可能的原因
- SPS PPS如何发送
- SDP封装音视频信息
(三)HLS拉流分析
- HLS协议分析
- HLS拉流实战
- HTTP协议分析
- FFmpeg HLS源码分析
- TS格式分析
- HLS多码率机制
- m3u8文件解析
- 如何解决HL S延迟高的问题
- wireshark抓包分析
注:理解HL .S的拉流机制,有助于我们解决HL .S播放延迟较高的问题
4、流媒体服务器
(一)SRS源码剖析协程
- 整体框架分析
- 连接和协程的关系
- RTMP推流分析
- 如何更快速掌握SRS源码
- RTMP拉流分析
- 流媒体服务器是否导致延迟
- HLS拉流分析
- 如何降低流媒体服务器的延迟
- HTTP-FLV拉流分析
- 怎么获取流媒体服务器推流信息
- FFmpeg转码分析
- 怎么获取流媒体服务器拉流信息
- 首屏秒开技术分析
- 首屏秒开能降低延迟吗
- forward集群源码分析
- 推流->服务器转发->拉流延迟分析
- edge集群源码分析
- 负载均衡部署方式
注:对于SRS流媒体服务器,我们长期更新,从3.0->4.0->5.0
(二)ZLMediaKit源码剖析
- 整体框架分析
- 数据转发模型
- 线程模块划分
- SDP解析
- RTSP推流连接处理
- RTP H264解析
- RTSP拉流连接处理
- RTP AAC解析
注: ZLMediaKit主要讲解RTSP流媒体服务器相关的模块,其他模块RTMP/HLS等参考SRS。
5、WebRTC项目实战
(一)WebRTC中级开发手把手写代码
- WebRTC通话原理分析
- WebRTC开发环境搭建
- coturn最佳搭建方法
- 如何采集音视频数据
- 一对一通话时序分析
- 信令服务器设计
- SDP分析
- Candidate类型分析
- Web-对一通话
- Web和Android通话
- AppRTC快速演示
- 如何设置编码器优先级
- 如何限制最大码率
- 信令服务器的本质是什么
- Web和Android的SDP差异
- A要和B通话, A怎么知道B的存在
- 新增C++、IOS客户端两大版本
注:学习WebRTC建议从web端入手,可以直接调用js接口(千万别刚接触WebRTC就忙着去编译WebRTC源码) , 对WebRTC通话流程有清晰的理解再考虑其他端。
(二)WebRTC高级开发-SRS 4.0/5.0源码分析
- RTMP转发WebRTC逻辑
- WebRTC转发RTMP逻辑
- WebRTC音视频一对一通话
- WebRTC多人通话
- WebRTC SFU模型分析
- SRTP分析
- RTCP分析
- SDP分析
- NACK分析
- turn分析
- stun分析
- 拥塞控制算法
- FEC
- jitter buffer
(三)WebRTC高级开发-MESH模型多人通话
- 自定义摄像头分辨率
- 码率限制
- 调整编码器顺序
- Mesh模型多方通话分析
- 多人通话信令服务器开发
- 动态分配stun/turn服务器
- Web客户端源码
- Android客户端源码
(四)WebRTC高级开发-Janus SFU模型多人通话
- Janus框架分析
- Janus信令设计
- 基于Janus实现会议系统
- Janus Web客户端源码分析
- Janus Android客户端源码分析
- Janus Windows客户端源码分析
- 基于Full ICE的部署
- 基于Lite ICE的部署
- Full ICE和Lite ICE的区别
- 发布订阅模型
6、Android NDK
(一)Android NDK开发基础
- So库适配总结
- GDB调试技巧
- Makefile_ I程组织
- CMake工程组织
- 生成指定CPU平台的so库
- JNI基础和接口生成
- JNI Native层构建Java对象
- JNI异常处理
(二)Android FFmpeg编译和应用
- 编译x264
- 编译x265
- 编译mp3
- 编译fdk-aac
- 编译FFmpeg
- 使用ffmpeg实现mp4转格式
- 使用FFmpeg开发播放器
(三)Android RTMP推拉流
- RTMP推流协议实现
- RTMP拉流协议实现
- RTMP拉流音视频同步
- MediaCodec硬件编码
- MediaCodec硬件解码
- OpenSL ES播放音频数据
- MediaCodec硬件解码
- OpenGL ES Shader显示视频
(四)Android Ijkplayer源码分析
- 编译jkplayer和实践
- 项目框架分析
- 播放状态转换
- 拉流分析
- 解码分析
- 音频播放流程
- 视频渲染流程
- OpenSL ES播放音频数据
- MediaCodec硬件解码
- OpenGL ES Shader显示视
- 变速播放实现原理
- 低延迟播放实现
- 缓存队列设计机制分析
7、IOS音视频开发
(一)IOS FFmpeg6.0编译和应用
- xcode调试FFmpeg
- IOS调用FFmpeg
- QT调试FFmpeg
(二)IOS FFmpeg RTMP推拉流
- AVFoundation视频采集
- Metal视频渲染
- Audio Unit音频采集
- Audio Unit音频播放
- FFmpeg推流
- FFmpeg拉流
- 直播延迟和解决方法
(三)VideoToolbox硬件编解码
- VideoToolbox框架的流程
- 硬件编解码步骤
- CVPixelBuffer解析
- 如何获取SPS/PPS信息
- 判断是否关键帧
- 编码参数优化
(四)IOS jkplayer编译和应用
- 本地视频播放
- RTMP拉流播放
- HTTP点播
- 音频播放流程
- 视频渲染流程
(五)IOS ijkplayer编译和应用
- 基于Mesh一对一通话
- 基于SFU多人通话
8、音视频项目实战
(一)0voice播放器
支持播放/暂停,上一/下一视频,变速播放,文件seek播放进度显示,截屏,调节音量,播放列表,显示缓存时间实现直播低延迟播放
(二)0voice录制推流软件
支持屏幕+麦克风RTMP直播,支持本地文件推送;支持录制保存到本地,支持录制预览功能,支持添加图片水印功能;支持文字水印功能,支持屏幕+摄像头同时捕获,支持降噪功能。
(三)0voice低延迟拉流直播
实现500毫秒~1秒的低延迟直播
以上是系统学习课程大纲,需要系统学习请扫码添加小雯老师(备注911)领取专属大额优惠券。
帮助大家全面掌握FFmpeg的核心技术点:
- 本课程为音视频全栈开发技术提升体系
- 原理,源码分析,案例分析,项目实战全包含
- 详细技术点参考音视频第6代课程大纲
- 全新升级FFmpeg6.0-全网唯一
9、适宜工程师人群(本课程涵盖最主流的音视频全栈开发技术,适合各类技术人员)
- 从事音视频岗位开发,但没有时间系统学习的在职工程师
- 从事嵌入式方向开发,想转入音视频开发的在职工程师
- 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
- 从事Android/IOS移动开发,想往音视频方向发展的在职工程师
- 从事C/C+ +后台开发,想往流媒体服务器方向发展的在职工程师
- 自己研究学习速度较慢,不能系统构建音视频知识体系的开发人员
- 计算机相关专业想进入大厂的在校生(本科及以上学历,有c/C+ +基础)
音视频自学难点音视频自学非常困难,网上通俗易懂的难找到。
网上部分资源是对应的开源版本较低,比如雷霄骅(雷神)博客的FFmpeg版本较低
音视频涉及大量的开源库和协议:
- 1、比如ffmpeg的编译,如果不熟悉各种编译报错
- 2、Janus编译涉及各种开源组件编译不通过
- 3.比如WebRTC涉及的RTP、RTCP、SDP、STUN等协议
部分嵌入式音视频的朋友技术面窄, 技术不深入。比如有同学做了2年的音视频驱动, 一帧音频能持续播放多久都不明白。
至于学习效果怎么样?👇
10、补录:webrtc入门到精通
- (1)WebRTC入门
- (2)WebRTC开发环境搭建
- (3)Coturn穿透和转发服务器搭建
- (4)音视频采集和播放
- (5)Nodejs实战
- (6)手把手实现音视频一对一通话(包含信令协议设计、Web to Web、Android to Web、 Android to Android)
- (7)开源方案介绍
- (8)AppRTC开源方案搭建
DPDK高性能专家
DPDK使用了轮询(polling)而不是中断来处理数据包。在收到数据包时,经DPDK重载的网卡驱动不会通过中断通知CPU,而是直接将数据包存入内存,交付应用层软件通过DPDK提供的接口来直接处理,这样节省了大量的CPU中断时间和内存拷贝时间。
还不熟悉的朋友,这里可以先领取一份dpdk新手学习资料包(入坑不亏)
本文介绍下DPDK进阶到高性能专家的学习路线,整个学习路线,直接对标DPDK资深架构师岗位,知识点包括dpdk、储存、网关开发、网络协议栈、网络安全、TRex、vpp、OVS、DDos、虚拟化技术等等 。其次你把整个内容,全部消化,是完全可以胜任任何DPDK资深架构师岗位招聘,DPDK开发招聘。
1、DPDK网络专栏
(1)dpdk基础知识
- 1.多队列网卡,vmxnet/e1000
- 2.igb_ uio与vfio模块
- 3.kni模块
- 4.hugepage的理解
- 5.零拷贝
- 6.dpdk与netmap区别
- 7.dpdk的工作环境
(2)网络协议栈
- 1.dpdk-arp
- 2.netsh静态arp表设置
- 3.dpdk-icmp
- 4.udp协议格式分析
- 5.udp协议sendto, recvfrom实现
- 6.dpdk-ip
- 7.dpdk-tcp
- 8.tcp协议栈bind,listen, accept实现
- 9.tcp协议栈recv, send, close的实现
- 10.tcp三次握手实现
- 11.tcp四次挥手实现
- 12.tcp acknum与seqnum的确认机制实现
- 13.tcp的并发连接设计
- 14.epoll并发的实现
- 15.tcp协议栈与epoll之间的回调实现
(3)dpdk组件项目
- 1.dpdk-ac
- 2.dpdk-kni
- 3./dev/ kni的原理分析
- 4.kni_ dev的流程
- 5.kni的t缓冲区,rx缓冲区
- 6.kni的用户空间与内核空间映射
- 7.mbuf如何转化为kernel的sk_ buff
- 8.dpdk- timer
- 9.bpftrace的使用
- 10.dpdk- bpf源码流程
(4)dpdk经典项目
- 1.dpdk- dns
- 2.dpdk- gateway
- 3.dpdk-ddos熵计算源码
- 4.ddos attach检测精确度调试
- 5.ddos attach测试T具hping3
- 6.布谷鸟hash原理与使用
2、储存技术专栏
(1)高效磁盘io读写spdk(C)
- 1.存储框架spdk,为技术栈打开扇存储的大门
- 2.spdk运行环境与vhost
- 3.NVMe与PCl的关系
- 4.手把手实现spdk_ server
- 5.nvme与pcie以及手写nvme读写操作
- 6.bdev与blob之间的关系
- 7.实现blob异步读写
- 8.blobstore的读写操作实现与rpc的关系
- 9.fio性能测试性能对比libaio,io_ uring,psync
- 10.fio plugin工作流程
- 11.fio plugin开发
(2)spdk文件系统的实现
- 1.文件系统功能拆解
- 2.spdk_ env_ init与spdk_ app init的差别
- 3.spdk_ _thread_ poll实现rpc回调
- 4.fs_ operations结构体定义
- 5.file_ operations结构体定义
- 6.dir_ operations结构体定义
- 7.syscall的hook实现
- http://8.io内存管理
- 9.基数树对文件系统内存管理
- 10.spdk_ blob的open,read,write,close
- 11.测试用例与调试入口函数
(3)spdk kv存储的实现
- 1.KV存储拆解Set, Get, Mod, Del
- 2.app/.a库/so库对于kv存储的选择
- 3.bdev与blob对于kv存储的选择
- 4.kv service启动blob资源操作
- 5.kv service关闭blob资源回收
- 6.kv service接口set,get,modify,delete
- 7.kv遍历与查找实现
- 8.page存储chunk的管理
- 9.pagechunk的get与put
- 10.page单查找与多页查找
- 11.btree, artree, hashmap,radixtree, rbtree之间的选择
- 12.slab的实现
- 13.slab分配slot与释放slot
- 14.为kv加上conf文件
- 15.测试用例与性能测试
3、安全与网关开发专栏
(1)可扩展的矢量数据包处理框架vpp(c/c++)
- 1.vpp命令详解
- 2.mac/ip转发plugin
- 3.load_ balance plugin
- 4.flowtable plugin
- 5.vpp源码之间的差异
- 6.多网卡数据接收与转发
- 7.解决plugin编译加载
- 8.vpp启动load so的流程
- 9.vpp的结构体vlib_ _main实现分析
- 10.vpp的结构体vnet_ main
- 11.vector的操作实现
- 12.vpp vcl库与LD_ PRELOAD实现分析
- 13.vcl原理讲解
- 14.vcl tcpserver实现原理
- 15.vcl tcpclient实现原理
- 16.vcl与iperf3的客户端与服务器
- 17.vcl与nginx的wrk性能测试
- 18.vcl与haproxy的性能测试
- 19.vpp 1801版本与vpp 2206版本
- 20.vpp httpserver的实现源码
- 21.vpp plugin quic源码分析
- 22.vpp plugin hs_ app的源码
- 23.vpp plugin rdma的实现分析
- 24.vpp plugin loadbalance
- 25.vpp plugin nat的源码分析
- 26.vpp host-stack tcp协议实现
- 27.vpp plugin的测试用例实现
(2)golang的网络开发框架nff-go(golang)
- 1.nff-go实现的技术原理
- 2.nff-go/low.h实现分析
- 3.nff- go数据接收的实现
- 4.nff-go数据发送的实现
- 5.ipsec协议解析与strongswan的ipsec
- 6.nff go的缺陷与不足
4、虚拟化与云原生专栏
(1)DPDK的虚拟交换机框架OvS
- 1.ovs编译安装,ovs核心组件内容
- 2.ovs-vswitchd的工作原理
- 3.ovs-vswitchd与dpdk的关系
- 4.ovs-vsctl的网桥,网口操作
- 5.qemu-system-x86_ 64构建多子网
- 6.ovs与qemu数据流分发
- 7.ovs搭建docker跨主机通信
- 8.ovsdb server与ovsdb协议
- 9.json-rpc为控制面提供开发
- 10.ovs-tcpdump/ovs-l3ping
- 11.OvS 4种数据路径
- 12.VXL AN数据协议
- 13.ovs流量统计
(2)高性能4层负载均衡器DPVS
- 1.dpvs的技术组件与功能边界
- 2.lvs+keepalived配置高可用server
- 3.dpvs与|lvs+ keepalived的关系
- 4.dpvs.conf的配置文件
- 5.dpvs的FNat/NAT/SNAT模式
- 6.dpvs的DR模式
- 7.dpvs的tun模式
- 8.通过quagga配置ospf
- 9.dpvs的tc流控操作与源码实现
- 10.dpvs代码架构分析
- 11.dpvs测试用例ipset, tc,mempool
5、测试工具专栏
(1)perf3
- 1.vpp vcl的perf3接口hook
- 2.perf3测网络带宽
- 3.tcp吞吐量测试
- 4.udp丢包与延迟测试
- 5.json测试结果输出
(2)TRex
- 1.TRex的运行原理
- 2.TRex与dpdk
- 3.构建TRex测试系统
- 4.t-rex -64- debug gdb调试
- 5.bg-sim- 64模拟单元测试
- 6.YAML文件编写
- 7.流编排与自动化框架
- 8.报文变量设置
(3)dpdk-pktgen
- 1.pktgen命令讲解
- 2.default.cfg配置文件分析
- 3.120M bits/s的转发速率
(4)fio
- 1.ioengine的实现
- 2.ioengine_ ops的分析
- 3.iodepth的分析
- 4.spdk_ nvme的fio分析
- 5.spdk_ bdev的fio分析
- 6.spdk_ blob的ioengine实现
- 7.psync,io_ uring, libaio性能对比
6.性能测试专栏
(1)性能指标
- 1.吞吐量bps
- 2.拆链/建链pps
- 3.并发
- 4.最大时延
- 5.最小时延
- 6.平均时延
- 7.负载
- 8.包速fps
- 9.丢包率
(2)测试方法
- 1.测试用例
- 2.vpp sandbox
- 3.perf3灌包
- 4.rfc2544
以上是系统学习课程大纲,需要系统学习请扫码添加小雯老师(备注911)领取专属大额优惠券。
7、适学人群
- 工作中技术没有挑战,工作中接触不到新技术的在职工程师
- 从事嵌入式开发对网络存储底层感兴趣在职工程师
- 自己研究学习速度较慢,不能系统构建知识体系的开发人员
- 从事网络存储安全的工程师,想深入了解底层技术原理
8、课程目标岗位
- 高级网络开发工程师
- DPDK开发工程师
- 云基础开发工程师
- NFV开发工程师
- 高性能优化工程师
- 云产品研发工程师
- SDN开发工程师
学习成果检验
C++游戏后端开发
1、TrinityCore CMake项目构建
(一)CMake的使用
- 什么是 CMake,CMake的工作流程
- CMakeLists.txt的编写规则
- 静态库生成以及链接
- 动态库生成以及链接
- 嵌套CMake
(二)Windows和Linux下编译调试环境搭建
- cmake和graphviz生成目标依赖图
- linux vscode编程环境搭建
- cmake和clangd实现精俳跳转
- C/C++插件实现调试
- vs2019 windows下编译调试搭建
2、TrinityCore数据库模块
(一)连接池设计概要
- 什么是连接池
- 为什么需要复用连接
- 为什么固定连接数
- 主要应用场景
(二)同步连接池实现
- 同步连接池的线程模型
- 同步连接池接口封装
- 同步连接池接口使用
- 同步连接池应用场景
(三)异步连接池实现
- 异步连接池的线程模型
- 异步连接池接口封装
- 异步连接池接口使用
- 异步连接池应用场景
(四)事务处理
- 什么是事务
- 什么情况下讨论事务
- 事务操作
- TrinityCore 中事务处理封装
- TrinityCore 中事务处理案例
(五)数据库模块实践
- 剥离可复用数据库模块
- 应用同步连接池案例
- 异步连接池-单SQL语句的使用
- 异步连接池-多SQL语句chain式应用
- 异步连接池-多SQL语句holder式应用
- 异步连接池-多SQL语句transaction式应用
3、TrinityCore日志模块
(一)日志模块概要
- 日志模块的作用
- 日志模式核心抽象: logger和appender
- logger规则:继承关系、日志级别、以及appender列表
- appender如何定义日志打印目的地
(二)日志模块实现
- 日志模块单例构建
- 采用宏定义定制日志使用接口
- 如何扩展appender
- appender中设计模式-模板模式
- 同步日志方式实现
- 异步日志方式实现
- 异步日志线程模型
(三)日志模块实践
- 剥离可复用日志模块
- 为什么推荐使用异步日志
- 异步日志日志安全分析及测试
4、TrinityCore网络模块
(一)阻塞io 网络模型编程
- 什么是阻塞io网络模型
- 阻塞io解决连接建立的问题
- 阻塞 io解决连接断开的问题
- 阻塞io解决数据接收的问题
- 阻塞io解决数据发送的问题
- 阻塞 io解决网络问题的弊端
(二)reactor 网络模型编程
- 什么是reactor?
- reactor构成部分
- reactor解决连接建立的问题
- reactor解决连接断开的问题
- reactor解决数据接收的问题
- reactor解决数据发送的问题
- reactor解决网络问题的特征: io同步,事件异步
(三)windows iocp 网络编程
- 什么是完成端口
- 重叠io的作用
- iocp解决连接建立的问题
- iocp解决连接断开的问题
- iocp解决数据接收的问题
- iocp解决数据发送的问题
- iocp编程步骤
- iocp与reactor在编程处理io时的差异
(三)boost.asio 网络编程
- boost.asio跨平台网络库
- cmake如何在项目中引入boost.asio
- boost.asio中核心命名空间
- boostasio中核心对象: io_context、socket、endpoint
- boost.asio中异步io接口
- asio解决连接建立的问题
- asio解决连接断开的问题
- asio解决数据接收的问题
- asio解决数据发送的问题
(四)网络缓冲区设计
- 为什么需要在用户层实现网络缓冲区
- 读缓冲区的工作原理
- 写缓冲区的工作原理
- 手撕缓冲区实现
(五)网络模块实践
- 剥离可复用网络模块
- AsyncAcceptor职责与实现
- NetworkThread职责与实现
- Socket职责与实现
- 手撕多线程模式下网络模块的应用
5、TrinityCore地图模块
(一)地图模块概要
- 哪些功能模块需要用到地图模块
- 地图模块的功能构成
- 地冬对象抽象:map、area、grid、cell
- 网络数据驱动地图模块
- 定时更新驱动地图模块
(二)地图模块AOI核心算法
- AOI有哪些实现方式
- AOI静态数据工具生成
- AOI静态数据数据划分
- AOI静态数据组织方式
- AOI动态数据组织方式
- AOI动态数据驱动方式
- AOI地图数据加载
- grid 网格状态机以及状态转换
- AOl地图数据卸载
- 采用访问者模式实现地图数据与算法的隔离
(三)AABB算法实现碰撞检测
- 轴对称边界盒算法-AABB算法
- TrinityCore中AABB算法实现
- AABB算法优化
- 碰撞检测接口封装以及应用
(四)A*寻路算法
- A*寻路算法概述
- recast-detour开源车
- recast根据模型生成导航数据
- detour利用导航网格做寻路
- 寻路接口封装以及应用
6、TrinityCore战斗模块专栏
(一)技能设计
- 技能设计概述
- 技能数据库表设计(配置)
- 技能触发:距离、冷却时间、消耗等
- 技能效果:伤害计算、增益效果等
- 技能释放流程
(二)AI设计
- AI设计概述
- 基于行为树的Al设计
- Al类继承层次关系
- 04.Al攻击目标选择
- AIl攻击方式选择
- Al移动方式选择
- AI基于事件的驱动机制
(三)怪物管理
- 怪物数据库设计(配置)-属性和行为
- 怪物刷新规则设计-时间间隔以及范围
- 怪物属性、技能、掉落、Al
(四)战场副本设计
- 创建和加载 battlegrounds场景地图数据
- battlegrounds规实现
- battlegrounds队伍匹配、队伍平衡以及角色分配
- battlegrounds奖励系统和排名机制
7、TrinityCore mmorpg核心功能与玩法
(一)任务系统设计
- 任务系统数据库设计(配置)
- 玩家数据库状态存储
- 任务类型设计
- 任务触发机制
(二)背包设计
- 背包数据结构设计以及数据库表设计
- 背包容量控制
- 背包格子管理
- 背包交互功能实现
(三)工会系统设计
- 数据库表结构设计
- 工会创建逻辑实现
- 工会成员管理
- 工会资源管理及分配机制
- 工会活动与事件
- 工会排名实现
- 工会权限控制
8、语言专栏
(一)lua程序设计
- lua基础
- lua错误处理
- lua编译与预编译
- lua模块与包
- 元表与元方法
- 环境
- lua/c接口编程
(二)c++新特性
- 智能指针shared_ptr, unique _ptr
- 函数对象以及闭包
- 右值引用
- 原了操作与锁: atomic、mutex、condition_variable
- 多线星环竟队列设计:MPSCQueue、ProducerConsumerQueue
(三)C++设计模式
- 单例模式
- 工厂模式
- 模板模式
- 访问者模式
- 责任链模式
以上是系统学习课程大纲,需要系统学习请扫码添加小雯老师(备注911)领取专属大额优惠券。
9、适宜工程师人群
- 从事游戏后端岗位开发,但没有时间系统学习的在职工程师
- 从事嵌入式方向开发,想转入游戏后端开发的在职工程师
- 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
- 从事C/C++后台开发,想往游戏服务器方向发展的在职工程师
- 自己研究学习速度较慢,不能系统构建游戏开发知识体系的开发人员
- 计算机相关专业想从事游戏开发的在校生(本科及以上学历)
Qt开发工程师
Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
还不熟悉的朋友,这里可以先领取一份qt开发新手学习资料包(入坑不亏)
本文介绍下qt开发从入门到高级进阶的学习路线,整个学习路线,直接对标qt工程师开发岗位,知识点包括语言编程基础、Qt编程入门到精通专栏、Qt高级进阶专栏、Qt项目开发实战专栏、Qt开发工程师提升专栏等 。其次你把整个内容,全部消化,是完全可以胜任任何qt开发招聘,C++ qt开发招聘。
1、Qt C++语言编程基础专栏
(一)Qt C++语言编程基础
- Visual Studio 2022安装
- C++语言基础概述
- C++指针与引用
- C++类与对象(一)
- C++类与对象(二)
- 类的基它特性
- 构造函数&析构函数&拷贝构造函数
- C++友元与动态内存
- 函数重载与运算符重载
(二)Qt C+ +语言进阶
- 单继承
- 多继承
- 虚继承及其它特性
- 虚函数与抽象类
- 命名空间与模板
- C+ +I0流类库
- STL(vector & deque & stack)
- STL(queue & set & map)
- C+ +异常处理,
(三)Qt C+ +语言新特性
- 类型推导: auto & decltype
- 序列for循环
- lambda表达式
- 构造函数:委托构造和继承构造
- 容器: array & forward list & tuple
- 垃圾回收机制
- 正则表达式基础
- 智能指针: shared_ ptr & unique_ ptr & weak_ ptr
- 关键字: nullptr & constexpr
- 共享内存&互斥量mutex
- C++11: STL hashmap
- 关联容器: unordered_ map
- atomic flag & atomic应用
- 条件变量: condition variable
- 异常处理: exception
- is integral应用实战
- is_ rvalue_ reference应用实战
- is_ arithmetic应用实战
- is volatile应用实战
- is class应用实战
- 变量模板
- inline应用实战
2、Qt编程入门到精通专栏
(一)Qt开发基础体系
- Qt下载与安装配置
- Windows Qt环境安装
- Linux Qt环境安装
- Qt Creator工具介绍与使用.
- Qt信号与槽机制
- Qt字符串&数据类型&容器类
- 字符串类应用与常见数据类型
- 常用容器类
- QMap类& QHash类& QVector类
- QList类& QLinkedList类
- QVariant类应用
- 常用算法及正则表达式
(二)Qt开发常用控件详解
- Layouts & Spacers
- Buttons & Containers
- Item Views
- Item Widgets
- Input Widgets
- Display Widgets
(三)Qt布局及对话框详解
- 布局管理
- QLayout & QStackedWidget类
- QSplitter类& QDockWidget类
- 对话框
- 文件对话框
- 颜色对话框
- 字体对话框
- 输入对话框
- 消息对话框
- 自己定义消息框
(四)Qt图形&模型&视图
- 绘图原理双缓冲机制
- Graphics View特性详解
- Mode & View & Delegate
(五)Qt文件操作及事件处理
- 目录操作及文件系统
- QCoreApplication类
- QFilelnfo类
- QDir类
- QTemporaryDir
- QTemporaryFile
- 获取文件特性实现
- 鼠标及键盘事件
- 事件过滤处理分析
(六)Qt服务应用操作
- INI文件操作
- JSON文件操作
- XML文件操作
(七)Qt网络及多线程
- 套接字编程API函数详解
- UDP协议工作原理
- TCP服务器设计
- TCP客户端设计
- TCP协议工作原理
- UDP服务器设计
- UDP客户端设计
- 多线程编程
- 互斥量
- 信号量
- 多线程C/S模型项目实战
- HTTP协议编程技术
- Websocket原理及编程技术
(八)Qt数据分析:图表详解
- Qt图表基础知识
- Qt ChartView详解
- Qt常用图表类型
- 曲线图
- 拆线图
- 柱形图
- 饼状图
(九)Qt应用程序打包及发布
- 打包QT应用程序
- 发布QT应用程序
3、Qt高级进阶专栏
(一)MySQL数据库编程技术
- 数据库基础知识
- MySQL基本操作
- MySQL运算符
- 数据类型及存储引擎
- 表数据增&删&改&查&高级查询
- MySQL流程控制语句
- SQL语句详解
- 索引
- 视图
- 存储过程和函数
- 触发器
- 事件
- MySQL备份与恢复
- Qt操作MySQL数据库实战
(二)sQLite数据库编程技术
- SQLite下载与安装配置
- sQLite创建数据库
- SQL ite附加&分离数据库
- SQLite数据类型
- SQLite创建表&删除表
- SQLite insert into语句详解
- SQLite select & update & delete语句
- sQLite Distinct & Orderby & Groupby
- SQLite触发器
- sQLite索引
- SQLite视图
- sQLite事务
- Qt操作SQLite数据库实战
(三)OpenCV编程开发常用技术
- OpenCV与VS2022环境搭建
- OpenCV常见API及绘图详解
- OpenCV图像读写技术
- OpenCV视频读写技术
- OpenCV图像滤波技术
- OpenCV视频录制技术
- OpenCV图像翻转技术
- OpenCV图像旋转技术
- OpenCV实现窗口置顶
- OpenCV边缘检测技术1
- OpenCV边缘检测技术2
- OpenCV向上向下采样
- OpenCV形态学之膨胀
- OpenCV图像浮雕技术
- OpenCV图像人脸识别
(四)C++ 23种设计模式
- 创建型模式(5种)
- 工厂模式
- 抽象工厂模式
- 原型模式
- 单例模式
- 建造者模式
- 结构型模式(7种)
- 适配器模式
- 桥接模式
- 组合实体模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
- 行为模式(11种)
- 责任链模式
- 中介者模式
- 策略模式
- 模板模式
- 状态模式
- 观察者模式
- 备忘录模式
- 命令模式
- 访问者模式
- 解释器模式
- 迭代器模式
4、Qt项目开发实战专栏
(一)文字编辑: Word处理软件
- Word文字编辑软件架构设计分析
- 菜单栏工具栏状态栏功能模块设计
- 菜单栏工具栏状态栏动作与实现
- 系统模块整体功能关联与实现
- Word文件编辑软件调试及测试
(二)音频项目实战: MP3播放器搜索引擎(Qt5+SQLite)
- MP3音乐播放器搜索引 |擎设计与实现
- SQLite数据库 数据表设计与实现歌曲搜索
- HTTP下载音乐数据解析Json显示歌词
- 上一曲播放暂停下一 曲循环播放实现
- 音乐搜索引|擎关于皮肤更换系统托盘
(三)信息管理项目:库存管理系统(Qt5+ MySQL)
- 商品数据库设计及配置测试
- 库存新增商品和查询商品
- 商品入库与商品出库
- 商品删除与导出数据
- 数据汇总及数据备份
(四)即时通讯项目:腾讯QQ客户端软件
- 即时通讯项目简介
- QQ客户端登录设计
- QQ登录窗口翻转效果实现
- IP地址控件设置
- 主界面及窗口移动实现
- QQ登录逻辑业务处理分析
- 项目全局类定义与实现
- 完善MainWindow及托盘技术
- QQ好友组及U|效果实现
- QQ聊天窗口和排版设计
- 头像裁剪技术
- 音频技术分析与实现
- QQ添加好友逻辑业务处理
- QQ聊天逻辑处理分析
- 消息时序图和头像截图处理技术
- 即时通讯群组功能实现
- QQ表情与gif图片处理技术
- 文件上传功能实现
- QQ文件传输技术
- QQ头像显示与添加好友显示实现
(五)视频项目实战:视频播放器(Qt+ FFmpeg)
- 播放器项目需求分析
- Player UI主界面设计
- 播放文件Title设计实现
- 控制条CtrlBar设计实现
- 播放文件列表Playlist实现
- 播放器模块分析与设计
- 打通UI到播放器核心的通道消息队列
- 打通Ul到播放器核心的通道类名和接口
- 状态处理: stream open和stream close
- 解复用&数据读取read thread设计
- 解码线程Decoder封装
- 音频输出及视频渲染输出
- 音视频同步原理与技术详解
5、Qt开发工程师提升专栏
(一)Qt开发工程师提升: Quick编程常用技术
- QML基础知识
- QML语言基础
- QML元素1: Image & Rectangle & Text
- QML元素2: ButtonStyle & ltem & BusyIndicator
- Quick事件处理
- 键盘事件
- 鼠标事件
- 定时器
- Quick组件及元素布局
- Component & Loader
- 定位器及布局管理器
- Quick开发常用元素及Canvas(画布)
- TextField & TextArea & TextInput
- CheckBox & GroupBox & TabView
- Canvas(画布)绘制图形
- 动画及.Mode & View
- 动画常用元素
- Animation & PropertyAnimation & NumberAnimation
- ColorAnimation & PathAnimation & SpringAnimation
- 组合动画部分: ParallelAnimation & SequentialAnimation
- 动画协同元素: Behavior & ParentAnimation & AnchorAnimation
(二)Qt开发工程师提升: QSS编程常用技术
- QSS实战开发1: QSS作用及应用场景
- QSS实战开发2: QSS常用基本语法
- QSS实战开发3: QSS控件样式QL abel & QLineEdit & QPushButton
- QSS实战开发4: QSS控件样式QComboBox
- QSS实战开发5: QSS控件样式QTableWidget
- QSS实战开发6: QSS控件样式QProgressBar
- QSS实战开发7: QSS控件样式QSlider
- QSS实战开发8: QSS控件样式CheckBox
- QSS实战开发9: Ubuntu系统控件风格
- QSS实战开发10: Mac系统控件风格
(三)Qt开发工程师提升:核心技术模块
- QtConcurrent线程处理(过滤和映射)
- Qt之QWebEngineView框架分析
- Qt生成及读取XML文件及应用实战
以上是系统学习课程大纲,需要系统学习请扫码添加小雯老师(备注911)领取专属大额优惠券。
6、Qt参考书籍资料
- 《Qt C+ +编程从入门到实战》主编:彭源
- 《Qt 5编程入门第2版》编著:程梁霍亚飞
- 《嵌入式Qt开发项目教程》编著:王浩著王浩
- 《Qt Quick核心编程》编著:安晓辉
- 《零基础学Qt 4编程》作者:吴迪著
- 《C+ +并发编程实战(第2版)》作者: [英]安东尼:威廉姆
- 《C+ +20实践入门](第6版)》作者: [比]艾弗霍尔顿(Ivor Horton)
- 《OpenCV算法精解》 作者:张平编著
- 《Qt圾Qt Quick开发实战精解》编著:霍亚飞
- 《C++ GUIQt 4编程第二版》作者: Jasmin Blanchette & Mark Summerfield
至于学习效果怎么样?👇
自学的弊端:网上资料繁杂,知识零碎,看过之后容易很快就忘掉,遇到问题只能自己钻研,有些很简单的问题不知不觉就浪费了很多时间,除非你是定力耐心毅力非常强的人,不然学习起来会没有方向感,盲目的看书枯燥乏味耗时比较长,会导致没有学习积极性失去信心与坚持下去的决心等等。总的来说自学不能说完全不行,只是适合少数人,自学的难度比报班系统学习一定是困难很多很多倍,多付出很多很多倍的。
反之报班学习的优势在于:
节约时间,知识串联:视频学习老师会提取知识点讲解出来比看书快了很多倍,并且理解起来比枯燥乏味的读书更有意思,尤其计算机相关的理论知识更是繁琐复杂交错依附,报班会让你更加系统的学习,知道前因后果来龙去脉,老师会把知识串联起来交给你,配套的资料发给你,而不是独立零散的知识点学习,对于提升来说,是高效且快速的。
老师答疑:遇到不懂得问题,老师会在自己看到的第一时间给到解答,24小时的答疑服务,会大大节约了你的学习时间。老师在知识体系,课程内容上,简历书写,面试指导,谈薪技巧等等方面都有着丰富的经验,课程内容也是由简到难,源码分析勾画重点,不做无用功,会提供配套的学习资料,图文并茂,讲解上通俗易懂,技术慢慢深入串联,学员通过和老师的沟通交流从而轻松学习,来达到自己想要达到的目标。
时间自由学习高效:很多在职的开发人员除了日常上班大部分时间还要加班,对于提升自己都是挤时间,没有完整的学习时间,这样其实给自学增添了很大的难度,跟着视频学习每日定好进度下班以后有固定的学习时间学习内容,或者周末抽几个小时整时间学习,有方向感且高效。
要说报班学习的弊端,那我只能想到一个,就是会有金钱上的一个付出,但是技术学会了是会跟随你一辈子的,现在的付出可能就是以后你一个月的涨薪部分,这个账怎么算都不会亏。投资自己 是风险最低 收益最高的,在大环境中安于现状才是井底之蛙,不断学习提升自己才是程序员最需要做的,提升工作竞争力,让自己在现在的公司被需要!
现如今各行各业内卷都很严重,不要说行业不行,而是大家越来越专业,这个是行业发展的必然性,优胜劣汰适者生存,时代在改变,不提高自己的核心竞争力就要出局。
最后:
给校招的小伙伴一句话:第一份工作不亚于一次高考,珍惜校招,社招的竞争是你目前想象不到的。能去大厂觉不妥协,IT行业第一份工作背景越好,起点越高,后续发展空间越好!
给那些1-3年的安于现状的伙伴一句话:
不要抱怨市场,不要安于现状,在低端,往中端领域看,在中端往高端领域看。认知以及对自身的要求,都会有所改变。
给那些担心35岁的伙伴一句话:
决定上限的不是年纪,而是技术。最后:希望学习路线对你有所帮助,希望码农的我们越来越好!
精品文章推荐阅读: