实时音视频开发浅谈-创新互联

1、发展简史

实时音视频概念很早就有,一直发展缓慢,直到2011年谷歌开源了webrtc,才算是从技术层面推动了实时音视频的发展,使得音视频技术开发周期大大缩短。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、虚拟主机、营销软件、网站建设、襄汾网站维护、网站推广。

但之后实时音视频还是不温不火,因为没什么市场需求,像短视频什么的都是4G/5G时代技术发展才带动起来的,通信宽带不支持的话,这种音视频通话体验效果肯定不好。而给音视频真正带来发展机遇的是2020年初的新冠疫情。就连我们常用的腾讯会议也是2020年1月24日才正式上线,在这之前,估计很多人和我一样都没听说过腾讯会议吧。疫情三年,各种远程会议、远程上课等需求为音视频带来了市场前景,从而推动音视频发展。并且2021年10月火起来的元宇宙、以及AR/VR概念把音视频通信进一步推动起来。

所以总的来说,实时音视频的历史还是很短,从各个大厂的校招官网也能看出一二,除了字节跳动有专门的音视频岗位外,其他大厂像阿里、腾讯、网易等,校招都没有这个岗位,只有社招才有这个岗位。说明音视频还是一个蓝海,目前大厂都没有形成成熟的培养体系。另外从B站的搜索也能发现一些信息,关于音视频的教程播放量基本都不到1万,播放量超过1万的基本是Android端的音视频开发。

言归正传,通过调研各个大厂招聘信息,发现音视频开发的招聘要求基本围绕着两个框架:FFmpeg和webrtc。下面简要谈谈这两个框架。

2、FFmpeg

FFmpeg其实不是专门用来做实时音视频开发的,而是用来做视频剪辑、合成、去水印、音频处理之类的,后来发现这个开源库在音视频通信方面很好使,就转而用上了。就连百度百科上对FFmpeg的定义是:一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

FFmpeg源码是用C++写的,官网链接是:http://ffmpeg.org/。FFmpeg的使用包括两种模式:命令行模式和源码模式。

2.1 命令行模式

命令行模式就是在终端敲命令完成功能,就像我们在Linux终端输入ls,pwd,cd一样,例如使用FFmpeg从一个视频文件中抽取一帧图像:

ffmpeg -y -i test.mp4 -ss 00:03:22.000 -vframes 1 -an test.jpg

敲这个命令就能一键完成。

命令行模式不需要编程基础,一些非软件开发人员也会用,所以多用于这些场景:非编程的多媒体工作人员剪辑视频音频、小公司快速开发一些简单的音视频编辑软件。

2.2 源码模式

所谓源码模式,就是在c++源码上做开发,也就是面向软件开发人员,把源码下载下来,进行裁剪、修改后编译使用。其实上面的命令行模式就是官方在源码上开发的示例软件,就像Linux下ls,cd,pwd也是一个个小程序软件一样。

源码模式开发是使用C++语言。那些大厂就是把ffmpeg 源码下载下来,进行修改开发,实现自己想要的功能,各个大厂自己维护着一个在ffmpeg基础上修改的框架,在这个框架上实现功能。

2.3 学习路线

关于ffmpeg 的学习,有网友建议先玩一下命令行模式,熟悉常见功能之后再入手源码,用源码实现某些功能。建议找一套视频教程,照着视频教程学一遍,整几个项目。

3、 webrtc

webrtc是真正的面向实时音视频通信的,webrtc的源码也是C++。webrtc的中文官网是:https://www.webrtc.org.cn/
谷歌为webrtc提供了多种形式的接口,webrtc的开发主要分为客户端和服务端。

3.1 客户端

webrtc客户端开发分为三种:web网页、Android、iOS。webrtc针对Android端提供了Java语言的API接口,为iOS端提供了objective -C语言的API,而web网页开发则使用html和JavaScript语言调用API。

3.2 服务端

服务端的开发,从B站的视频教程来看,主要是使用c++语言或者nodejs。使用c++也就是在源码基础上开发,使用nodejs就是使用谷歌提供的JavaScript语言的API接口。

3.3 学习路线

关于webrtc的学习,也是找一套好的视频教程,系统性学一遍。先学一下音视频通信的基础知识,再学一下教程里自带的项目,入门之后把几个经典开源框架学一下,例如:Janus、mediasoup等。最后如果想深入的话,入手源码。

4、 FFmpeg和webrtc对比

对于软件开发人员来说,学习其中一个就行。FFmpeg和webrtc是两套不同的技术栈,FFmpeg主要面向桌面端的软件开发,所以经常和Qt、MFC等软件开发框架结合,主要开发语言是C++。webrtc主要面向网页浏览器手机终端,主要开发语言依客户端而定,例如JavaScript、html、JAVA、objective C等,如果是服务端则是nodejs或者c++。

5、总结

对于二者的学习路线,先确定学习哪个技术栈,然后找一套好的视频教程,系统性的学一遍,写几个简单项目,再啃几个开源框架。目前B站的视频教程都不怎么样,建议去慕课买套付费的高质量教程学学。
音视频通信算是门槛比较高的领域,建议深耕两年,不然很难在这个领域做出成绩。并且有这个业务的公司也不多,小公司开发团队人员少,大多基于某个框架开发,一般不会涉及到C++源码。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:实时音视频开发浅谈-创新互联
URL地址:http://scyanting.com/article/ddgoio.html