前言

音视频开发一定要学C++吗?答案是肯定的。虽然其它语言也能搞音视频开发,甚至使用起来更简单,但“语言越高级,离真相就越远”,当你的功能需求日益增多,程序的性能需求越来越迫切,你想进一步了解程序实现的细节时,使用其它语言往往会面临“无法解决”的困境,最后不得不使用C++来解决问题,我们何不从一开始就使用C++呢?

FFmpeg及OpenCV是开源、跨平台的音视频开发SDK,搞音视频开发基本都需要用到它。因为C及C++都是跨平台的开发语言,因此,基于C和C++开发的FFmpeg+OpenCV应用代码只需做少量修改就可以从一个平台移植到另一个平台而无需担心性能有所下降,如从PC移植到Android就是如此。下面的应用都是基于这个思想开发的,开发的原则就是用最少的代码实现最核心的功能,方便使用者二次开发,方便跨平台移植。

FFmpeg做音视频开发主要涉及的业务需求有:推流、拉流、双向音视频交流如视频会议等,推流从简单的推摄像头和麦克风到比较复杂的推桌面和混音,播流从简单的播mp4到比较复杂的播rtmp流或rtsp流等,推播混合从一对一音视频通讯到多对多音视频通讯等。由于C及C++的跨平台特性,基本可以实现"Write once to anywhere"的理想。有了FFmpeg为什么还要拉上OpenCV呢?因为OpenCV有图像处理上的优势,而且现在很多人工智能应用都与OpenCV息息相关,将两者结合起来能生发出很多有实际意义的应用。

开发工具用的VS2013,因为它在老机器上也能跑的很好。界面用的MFC,选择MFC的原因就是因为它快,比其它任何一种UI框架都快,而且我们的学习重点并不是在UI上。为了美化UI,笔者试了很多UI框架,总之该试的都试过了,包括QT,但就慢那么一点点就成为放弃的理由,MFC自绘反而更容易上手。利用MFC的自绘功能,做个类似QQ的UI也不是什么难事儿,这也是微软多年不更新MFC的原因吧,当然QT设计UI更方便,我们这里基本只关注核心功能的实现,从VS移植到QT甚至Android的时候核心代码基本没太大改变。

当然,要搞好这些开发也需要开发者付出艰辛的努力,C和C++的学习成本比其它语言高许多,FFmpeg的移植和高效稳定使用也需要开发者细心调试。

第一章 播放端的实现

第1课 配置FFmpeg+OpenCV开发环境

第2课 使用FFmpeg读取rtmp流并用openCV显示视频

第3课 使用FFmpeg获取并播放音频流

第4课 FFmpeg读取本地mp4文件并显示

第5课 使用FFmpeg将rtmp流再转推到rtmp服务器

第二章 推流端的实现

第6课 使用openCV捕获摄像头并实现预览功能

第7课 用window API捕获麦克风数据并加入队列备用

第8课 利用FFmpeg将摄像头画面与麦克风数据合成后推送到rtmp服务器

第三章 将推流端和播放端合并为一对一视频聊天

第9课 将推流端与播放端合并为一对一音视频聊天功能

第10课 实现多对多音视频会议功能

第四章 桌面共享功能的实现

第11课 利用windows API捕获桌面图像并通过FFmpeg分享

第12课 实现桌面与摄像头叠加

 第五章 拉取RTSP摄像头流并加入AI(人工智能)

第13课 利用openCV检测物体是否运动了

第14课 用openCV数豆豆

第15课 利用openCV实现人脸识别

第16课 利用FFmpeg和openCV开发一个rtsp流播放器

第17课 为rtsp流加入移动检测功能

第六章 将工程移植到Android端

第18课 移植FFmpeg和openCV到Android环境

第19课 在Android环境中使用FFmpeg和openCV进行开发的一般步骤

​第20课 在Android Native开发中加入新的C++类

第21课 在Android Native开发中架起java与c++互通的桥梁

第22课 在视频会议中加入共享白板

 部分案例:

桌面共享工具(软编版)

桌面共享工具(DXGI硬编版)

智能广告大屏(可叠加透明广告)

Android手机屏幕RTMP推流工具(推麦克风版)

Android手机屏幕RTMP推流工具(推扬声器版)

多路转码推流工具

RTSP摄像头集中监控系统

可以播放声音的虚拟摄像头

FlashCam虚拟摄像头(桌面、RTSP摄像头、二分屏、三分屏)

多功能(桌面、RTSP摄像头、USB摄像头)视频录制系统

视频语音通讯系统(支持PC与WEB互通)

Logo

致力于链接即构和开发者,提供实时互动和元宇宙领域的前沿洞察、技术分享和丰富的开发者活动,共建实时互动世界。

更多推荐