C++音视频开发从放弃到入门 (基于FFmpeg+OpenCV)

前言

音视频开发一定要学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.1 配置FFmpeg+OpenCV开发环境

1.2 使用FFmpeg读取rtmp流并用openCV显示视频

1.3 使用FFmpeg获取并播放音频流

1.4 FFmpeg读取本地mp4文件并显示

1.5 使用FFmpeg将rtmp流再转推到rtmp服务器

第二章 推流端的实现

2.1 使用openCV捕获摄像头并实现预览功能

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

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

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

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

3.2 WEBRTC回声抑制(AEC+AGC+ANS)的实现

3.3 实现多对多音视频会议功能

3.4 在视频会议中加入共享白板

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

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

4.2 实现桌面与摄像头叠加

4.3 远程桌面控制的实现

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

5.1 利用openCV检测物体是否运动了

5.2 用openCV数豆豆

5.3 利用openCV实现人脸识别

5.4 利用FFmpeg和openCV开发一个rtsp流播放器

5.5 为rtsp流加入移动检测功能

第六章 将工程移植到Android端

6.1 移植FFmpeg和openCV到Android环境

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

6.3 在Android Native开发中加入新的C++类

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

 部分案例:

桌面共享工具(软编版)

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

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

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

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

多路转码推流工具

RTSP摄像头集中监控系统

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

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

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

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

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西部秋虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值