音视频开发领域常用的9大开源项目,你值得关注!

开源技术
766
0
0
2022-04-03

音视频领域有很多经典的音视频开源库,做播放器开发的,比如暴风影音;做视频客户端软件开发的,比如爱奇艺客户端、腾讯视频客户端、优酷视频客户端;做短视频开发的,比如抖音和快手;做视频会议和视频监控的,比如海康威视和浙江大华,他们都会或多或少的使用到这些开源的音视频库。

音视频开发领域常用的9大开源项目,你值得关注!

一个实时音视频应用软件一般都会包括这样几个环节:音视频采集、音视频编码(压缩)、前后处理(美颜、滤镜、回声消除、噪声抑制等)、网络传输、解码渲染(音视频播放)等。每一个细分环节,还有更细分的技术模块。今天就简单的介绍一些与这些环节相关的音视频开源项目,给正在学习或进行音视频软件开发的同学提供一个参考。

1、FFmpeg

音视频开发领域常用的9大开源项目,你值得关注!

鼎鼎大名的音视频多媒体处理库FFmpeg,做过音视频编解码开发的同学基本都用过,即便没做过这方面开发的,也会听说过这个开源库。

FFmpeg是目前最全面的开源音视频编解码库,包括常用的音视频编码协议 H265、H264、MPEG4、H263、G.721、G.726、G.729等,并且它提供了一整套的音视频处理解决方案,包括音视频采集与编码、音视频解码、视频格式转换、视频抓图、给视频加水印等。

FFmpeg虽然是基于Linux的开源项目,但可以通过交叉编译的方式在多个系统下运行,其项目加入了很多优化效率的代码,如采用汇编替代C,大大提高了代码的运行效率。在音视频处理的代码中,插入部分汇编代码提高代码的运行效率,是常有的事!

几乎所有的视频播放器都使用到了FFmpeg的音视频解码功能,比如国内知名的暴风影音、腾讯视频、爱奇艺视频等。

FFmpeg内部支持多种音视频格式之间的相互转换,很多音视频转化软件都用到了FFmpeg的音视频转换功能,比如大家常用的格式工厂、狸窝视频转换器等。

相关网站:https://ffmpeg.org/

2、WebRTC

音视频开发领域常用的9大开源项目,你值得关注!

WebRTC是一个由Google发起的开源音视频实时通讯解决方案,其中包括音视频的采集、编解码、网络传输、解码显示等,我们可以通过该技术快速地构建出一个音视频通讯应用。

虽然其名为WebRTC,但是实际上它不光支持Web之间的音视频通讯,还支持Windows、Android以及iOS等移动平台。WebRTC底层是用C/C++开发的,具有良好的跨平台性能。WebRTC因为其较好的音视频效果及良好的网络适应性,目前已被广泛的应用到视频会议系统中,比如视频会议厂商华为、ZOOM、小鱼易连、科达均支持了WebRTC方式的音视频转发会议。

WebRTC的起源,要从 2010 年 Google 以 6820 万美元收购 VoIP 软件开发商 Global IP Solutions 的 GIPS引擎谈起,在经过收购之后没多久,Google 将该引擎改名为“WebRTC”,并宣布开发者开源。

相关网站:https://webrtc.org/

3、x264

音视频开发领域常用的9大开源项目,你值得关注!

x264是一个开源的H.264/MPEG-4 AVC视频编码函数库,是最好的有损视频编码器之一。H264是目前应用最广的码流标准,x264则能够产生符合H264标准的码流的编码器,它可以将视频流编码为H264、MPEG4 AVC格式。它提供了命令行接口与API,前者被用于一些图形用户接口例如Straxrip、MeGUI,后者则被FFmpeg、Handbrake等调用。当然,既然有x264,就有对应HEVC/H.265的x265。

相关网站:

https://www.videolan.org/developers/x264.html

4、Live555

音视频开发领域常用的9大开源项目,你值得关注!

Live555是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了标准流媒体传输,是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。

Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括H265、H264、MPEG4、H.263+ 、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持。

Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、MPlayer。Live555内部还包含流媒体服务器的例子,是流媒体项目的首选。短视频和直播领域应该会用到这个开源库。

相关网站:http://www.live555.com/

5、SDL

音视频开发领域常用的9大开源项目,你值得关注!

SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器、视频会议系统等产品开发中。

相关网站:https://www.libsdl.org

6、Opus

音视频开发领域常用的9大开源项目,你值得关注!

Opus是用C语言开发的一个高灵活度的音频编码器,针对ARM、x86有特殊优化,fix-point实现。Opus在各方面都有着明显优势。它同时支持语音与音乐的编码,比特率为6k-510k。它融合了SILK编码方法和CELT编码方法。SILK原本被用于Skype中,基于语音信号的线性预测分析(LPC),对音乐支持并不好。而CELT尽管适用于全带宽音频,但对低比特率语音的编码效率不高,所以两者在Opus中形成了互补。

Opus有着良好的网络适应性,在低带宽场景下,有着良好的抗丢包抗抖动的特性,被广泛的应用于用于互联网环境的音视频项目中。

相关网站:https://opus-codec.org/

7、ffplay

音视频开发领域常用的9大开源项目,你值得关注!

ffplay是ffmpeg的一个子工具,所以其开源代码也是内置在FFmpeg项目中的。ffplay内部使用了FFmpeg和 SDL库,是一个简单的可移植的媒体播放器。它具有强大的音视频解码播放能力,目前它广泛被各种流行播放器(QQ影音、暴风影音……)集成应用。作为一款开源软件,ffplay囊括Linux、Windows、Ios、Android等众多主流系统平台,十分适合进行二次开发。

相关网站:

http://ffmpeg.org/ffplay.html

8、VLC

音视频开发领域常用的9大开源项目,你值得关注!

VLC是一款自由、开源的跨平台多媒体播放器及框架,它可以播放来自网络、摄像头、磁盘、光驱的文件,支持包括MPEG4、H264、H265、DivX、WMV、Vorbis、AC3等多种音视频协议。VLC最为突出的就是流媒体文件的功能,VLC支持各种流媒体协议,能直接播放远端的流媒体视频,只要输入一个视频文件的网址即可,无需下载到本地。此外,VLC还可以直接播放没有下载完成的文件。

VideoLanServer(VLS)的功能已经合并到VLC中,所以VLC不仅仅是一个音视频播放器,它也可以作为小型的视频服务器或流媒体服务器使用,可以一边播放一边转码,把视频流发送到网络上。

在Windows和Linux上的VLC是使用C++/Qt编写的,提供了一致的用户体验。同时VLC还专门为OS X提供了原生版本,OS X版的 VLC的用户界面使用Cocoa框架编写,在OS X下拥有卓越的原生体验。

VLC原先是几个法国的大学生做的项目,后来他们把VLC作为了一个开源的项目,吸引了来自世界各国的很多优秀程序员来共同编写和维护VLC,才逐渐变成了现在这个样子。

相关网站:https://www.videolan.org/

9、ijkplayer

音视频开发领域常用的9大开源项目,你值得关注!

在介绍ijkplayer播放器之前,要先提到FFmpeg中的ffplay。ffplay是一个使用了FFmpeg和SDL库的可移植的媒体播放器。ijkplay是国内知名的视频弹幕网站Bilibili开源的基于ffplay.c实现的轻量级iOS/Android视频播放器,API易于集成,且编译配置可裁剪,利于控制安装包大小。

在编解码方面,ijkplayer支持视频软解和硬解,可以在播放前配置,但在播放过程中则不能切换。iOS和Android上视频硬解可分别使用大家熟悉的VideoToolbox和MediaCodec。但ijkplayer对音频仅支持软解。

相关网站:

https://github.com/Bilibili/ijkplayer