前言
音视频开发一定要学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的移植和高效稳定使用也需要开发者细心调试。笔者在学习过程中,由于C++和FFmpeg实在太难以理解曾无数次放弃又无数次重新拾起来,最后才慢慢入门,因此,本教程名字就叫做《C++音视频开发从放弃到入门》吧。
1.配置FFmpeg+OpenCV开发环境
2.用FFmpeg连接rtmp服务器
3.获取并显示视频流
4.获取并播放音频流
5.硬解的实现
第一章案例:
RTSP播放器(软解版)
1.读取本地MP4文件并显示
2.将MP4转推到RTMP服务器
3.将RTSP流转推到RTMP服务器
第二章案例:
1.捕获桌面图像数据并实现预览功能
2.捕获扬声器数据并推送到rtmp服务器
3.实现麦克风与扬声器混音功能
4.实现桌面与摄像头叠加
5.实现桌面与rtsp摄像头叠加
第三章案例:
1.实现一对一音视频聊天功能
2.回声抑制(3A)的实现
第四章案例:
1.配置安卓端FFmpeg+OpenCV开发环境
2.实现安卓端rtmp播放器
3.实现安卓端屏幕共享并推送到RTMP服务器
4.推送手机麦克风及扬声器数据
第五章案例:
1.有人经过时的检测
2.广告的触发播放
3.手势检测
4.动作检测
第六章案例:
智能广告大屏(可叠加透明广告)
1.虚拟摄像头的实现原理
2.引入RTSP或RTMP源
3.给摄像头加上声音
第七章案例:
1.iocp服务端实现
2.PC客户端与WEB播放端文本聊天及表情的实现
3.PC客户端推送音视频到服务器WEB端RTC播放器实现
第八章案例:
多对多聊天系统的实现
其他案例
PC端软件:
1.
桌面共享工具(RTMP推流工具、投屏工具、播放工具)EXE,非源码)(水印版,不喜勿下)_rtmp推流软件-直播技术文档类资源-CSDN下载
3.一对一音视频对话webRTC实时回声抑制(AEC+AGC+ANS)范例。
安卓手机端软件: