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的移植和高效稳定使用也需要开发者细心调试。笔者在学习过程中,由于C++和FFmpeg实在太难以理解曾无数次放弃又无数次重新拾起来,最后才慢慢入门,因此,本教程名字就叫做《C++音视频开发从放弃到入门》吧。
第一章 播放端的实现
1.配置FFmpeg+OpenCV开发环境
2.用FFmpeg连接rtmp服务器
3.获取并显示视频流
4.获取并播放音频流
5.硬解的实现
第一章案例:RTSP播放器(硬解版)
第二章 推流端的实现
1.打开摄像头获取图像数据并实现预览功能
2.把图像数据推送到rtmp服务器
3.捕获麦克风数据并推送到rtmp服务器
4.硬编的实现
第二章案例:桌面共享工具(DXGI硬编版)
第三章 一对一视频聊天功能的实现
1.实现一对一音视频聊天功能
2.回声抑制(3A)的实现
第三章案例:FlashMeeting(回声抑制)
第四章 桌面共享功能的实现
1.捕获桌面图像数据并实现预览功能
2.捕获扬声器数据并推送到rtmp服务器
3.实现麦克风与扬声器混音功能
4.实现桌面与摄像头叠加
5.实现桌面与rtsp摄像头叠加
第四章案例:桌面共享工具(软编版)
第五章 将工程移植到Android端
1.配置安卓端FFmpeg+OpenCV开发环境
2.实现安卓端rtmp播放器
3.实现安卓端屏幕共享
4.推送手机麦克风及扬声器数据
第五章案例:Android手机屏幕RTMP推流工具
第六章 利用FFmpeg+OpenCV实现智能广告大屏
1.有人经过时的检测
2.广告的触发播放
第七章 PC端与WEB端实现通讯
1.iocp服务端实现
2.PC客户端与WEB播放端文本聊天及表情的实现
3.PC客户端推送音视频到服务器WEB端RTC播放端实现
其他案例
PC端软件:
1.
桌面共享工具(RTMP推流工具、投屏工具、播放工具)EXE,非源码)(水印版,不喜勿下)_rtmp推流软件-直播技术文档类资源-CSDN下载
2.播放rtmp流,显示图像+播放声音。
3.一对一音视频对话webRTC实时回声抑制(AEC+AGC+ANS)范例。
安卓手机端软件:
1.Android下ffmpeg+opencv开发模板(Eclipse版本)
2.推屏幕+麦克风到rtmp服务器
3.播放rtmp流,显示图像+播放声音
C++音视频开发从放弃到入门(基于FFmpeg+OpenCV)相关推荐
- 音视频开发之旅(34) - 基于FFmpeg实现简单的视频解码器
目录 FFmpeg解码过程流程图和关键的数据结构 mp4通过FFmpeg解码YUV裸视频数据 遇到的问题 资料 收获 一.FFmpeg解码过程流程图和关键的数据结构 FFmpeg解码涉及的知识点比较多 ...
- 音视频开发5. ZLMediaKit库入门使用 编译安装
音视频开发5. ZLMediaKit库入门使用 编译安装 一. ZLMediaKit 库简介 二.编译 三.生成物 1. MedisServer 2. SDK (c语言) 3. 测试程序 4. 问题处 ...
- 【音视频开发系列】一学就会,快速掌握音视频开发的第一个开源项目FFmpeg
快速掌握音视频开发的第一个开源项目:FFmpeg 1.为什么要学FFmpeg 2.FFmpeg面向对象思想分析 3.FFmpeg各种组件剖析 视频讲解如下,点击观看: [音视频开发系列]一学就会,快速 ...
- 音视频开发(8)---nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/redstarofsle ...
- 音视频基础学习之【01.基于ffmpeg的简单播放器demo实现】
目录 1.项目配置 2.显示界面设计 3.视频解码显示 流程描述 4.演示 最近在学习音视频基础知识,在这里感谢雷神留下的一系列指引新手入门的宝贵资源,虽然他英年早逝,但他的硕果永存.不由感慨真是天妒 ...
- Android 音视频开发入门指南
最近收到很多网友通过邮件或者留言说想学习音视频开发,该如何入门,我今天专门写篇文章统一回复下吧. 音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整 ...
- C++音视频开发核心知识,小白入门必看基础知识
经常收到一些网友的来信或者留言,反馈如下这样的困惑: "我是一名应届毕业生,该如何快速地成长起来" "我只懂 C/C++,是学 Android 开发有前途,还是 iOS ...
- 做音视频开发,你读对书了吗?(内有福利)
相比于易学难精的很多技术,音视频开发可以说是难入门.更难精通了,尤其是那些查无可查的bug想想都头痛,就算是从业十多年的老兵或许都还有很多棘手的案例,"音视频开发--从入门到弃坑" ...
- 音视频开发成长之路与音视频知识点总结
音视频涉及语音信号处理.数字图像处理.信息论.封装格式.编解码.流媒体协议.网络传输.渲染.算法等.在现实生活中,音视频发挥着越来越重要的作用,如视频会议.直播.短视频.播放器.语音聊天等.所以从事音 ...
最新文章
- JavaScript函数式编程学习
- Facebook人工智能实验室提出「全景分割」,实现实例分割和语义分割的统一
- Blend学习资料总结
- MySQL:行锁、表锁、乐观锁、悲观锁、读锁、写锁
- 使用swipecard实现卡片视图左右滑动监听以及点击监听
- spring mvc学习(31):原生api
- html lineheight div,html – Chrome上的文本输入:line-height似乎有最小值
- VS Code配置java环境
- 六种电平转换的优缺点
- JS—— 常用图片后缀正则校验
- COCI 2016/2017 Round 4 C dp
- 熤星传媒:抖音这些方面要注意!
- 下载后端传来的excel文件
- 面试题65:什么是虚拟dom
- Universal Serial Bus (USB) - 通用串行总线
- 数据库系统原理选择题总结
- 乐视网暂停上市成定局:去年净资产为负30亿 债务难解
- Android系统启动(上篇)
- numpy的文件存储 .npy .npz 文件
- Ubuntu操作-03 设置开机自启
热门文章
- 前端知识点之浏览器原理
- 网站PHP框架之Laravel5.5(十二)使用Seeder方式向数据库填充数据
- java utf-8编码后判断字符串长度_Java经典算法:UTF-8验证
- window7 cmd无法输入汉字问题、无效代码页问题的解决
- 《ESPnet2-TTS: Extending the Edge of TTS Research》
- 每天5分钟玩转Kubernetes | Kubernetes网络模型
- 【数据结构与算法】哈希算法的原理和应用详解!
- 达人评测 锐龙r5 5600h和酷睿i7 11800h相差多少
- 用php实现计算两人名字之间的缘分
- php 数组去除相同元素,php如何去除数组的重复元素