项目地址: https://github.com/mobinsheng/toy_rtc
介绍
toy_rtc是一个玩具型的实时音视频通信demo,它实现了实时音视频基本的一些功能,包括:
- 协议
- 视频采集
- 音频采集(windows平台下)
- 视频编码
- 视频解码
- 音频编码
- 音频解码
- 视频播放
- 音频播放
- 音视频分包、组帧
- FEC
- NACK
- 视频jitterbuffer
- feedback
- 丢包率估算
- rtt估算
- 基于GCC的拥塞控制(还有缺陷)
- 码率分配(还有缺陷)
- pacer(还有缺陷)
- 各种码率信息的统计
- 基本的登录、退出
- 一个简单的中转服务器
- loopback功能(主要用来本地调试)
- 弱网模拟器(主要用来模拟弱网环境)
toy_rtc的缺陷和缺少的功能:
- 音频除了采集编解码之外的其他功能模块基本缺失,包括:3A算法、重采样、混音、音频jitterbuffer等(因为我对音频处理这方面还不够了解,无法下手)。
- 拥塞控制这块基本上还不能很好的运行,目前存在的最大问题是估算出来的带宽会在实际带宽的上下波动,而且波动比较厉害,常常出现拥塞的情况,后面可能需要对这一块最一些研究。
- 还有其他很多的功能。。。
toy_rtc还需要实现的功能:很多很多…,我的思路是学到什么就做什么。
做toy_rtc的原因
在这实时音视频这方面做了两年多,在这两年多的时间里,发现实时音视频通信确实博大精深,在这些技术的面前,我就像一只蝼蚁,为了让自己有更大的提升,我决定把我了解的一些知识做成一个demo,让自己了解自己的技术处于一个什么样的阶段,下一步该干什么。本系列文章不是为了炫耀技术,仅仅忠诚的记录自己的学习过程,因此文章可能会有很多错误或者不足,请大家批评指正。
用到的第三方框架
- FFmpeg
- SDL
- RtcBase(webrtc的底层库)
- OpenH264
- X264
- Opus
- 其他
开发环境
Windows+VS2017.其他根据需要自行配置。
toy_rtc的构成
- 一个客户端。这个客户端可以不用服务器直接跑起来(loopback模式),里面内置了一个udp server和一个网络模拟器,简单的模拟了媒体数据的收发和常见的弱网。
- 一个简单的中转服务器,功能很简单,对于媒体数据做转发。
温馨提示
本人很乐意大家使用toy_rtc的代码,但是由于里面bug很多,使用的可能会出现很多问题甚至crash,所以谨慎使用~