技术福利:最全实时音视频开发要用到的开源工程汇总

本文内容引用了公众号声网Agora的文章,感谢原作者的分享。

1、前言

实时音视频的开发学习有很多可以参考的开源项目。一个实时音视频应用共包括几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等很多环节。每一个细分环节,还有更细分的技术模块。比如,前后处理环节有美颜、滤镜、回声消除、噪声抑制等,采集有麦克风阵列等,编解码有VP8、VP9、H.264、H.265等。 

典型的实时音视频应用数据流转过程如下:

下面这张图可能更具体一点:

本文汇总了一些能帮助到正在学习或进行实时音视频开发的同行们的开源工程,这些工程分为几类:音视频编解码类、视频前后处理、服务端类等,希望能加速您的学习或研究过程。

学习交流:

- 即时通讯开发交流群:320837163[推荐] - 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM

(本文同步发布于:http://www.52im.net/thread-1395-1-1.html

2、音视频编解码类开源工程

视频编解码的作用就是:在设备的摄像头采集画面和前处理后,将图像进行压缩、进行数字编码、用于传输。

编解码器的优劣基本在于:压缩效率的高低、速度和功耗。

目前,主流的视频编码器分为3个系列:

1)VPx(VP8,VP9): VPx系列是由Google开源的视频编解码标准。在保证相同质量情况下,VP9相比VP8码率减少约50%; 2)H.26x(H.264,H.265):H.26x系列在硬件支持上比较广泛,H.265的编码效率能比上一代提高了30-50%,但是复杂度和功耗会比上一代大很多,所以纯软件编码实现的话有一定瓶颈,现有的技术下,还是需要依靠硬件编解码为主; 3)AVS(AVS1.0,AVS2.0): AVS是我国具备自主知识产权的第二代信源编码标准,目前已经发展到第二代。

2.1 WebRTC工程

首先会用到的肯定是WebRTC,是一个支持网页浏览器进行实时语音对话或视频对话的开源项目。它提供了包括音视频的采集、编解码、网络传输、显示等功能。如果你想基于WebRTC开发实时音视频应用,需要注意,由于WebRTC缺少服务端设计和部署方案,你还需要将WebRTC与Janus等服务端类开源项目结合即可。

官网地址:https://webrtc.org/

更多WebRTC的技术文章请见:

开源实时音视频技术WebRTC的现状》 《简述开源实时音视频技术WebRTC的优缺点》 《访谈WebRTC标准之父:WebRTC的过去、现在和未来》 《良心分享:WebRTC 零基础开发者教程(中文)[附件下载]》 《WebRTC实时音视频技术的整体架构介绍》 《新手入门:到底什么是WebRTC服务器,以及它是如何联接通话的?》 《WebRTC实时音视频技术基础:基本架构和协议栈》 《浅谈开发实时视频直播平台的技术要点》 《[观点] WebRTC应该选择H.264视频编码的四大理由》 《基于开源WebRTC开发实时音视频靠谱吗?第3方SDK有哪些?》 《开源实时音视频技术WebRTC中RTP/RTCP数据传输协议的应用》 《简述实时音视频聊天中端到端加密(E2EE)的工作原理》 《实时通信RTC技术栈之:视频编解码》 《开源实时音视频技术WebRTC在Windows下的简明编译教程》 《网页端实时音视频技术WebRTC:看起来很美,但离生产应用还有多少坑要填?》 >> 更多同类文章 ……

2.2 x264工程

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

官网地址:https://www.videolan.org/developers/x264.html

2.3 FFmpeg工程

FFmpeg大家应该不陌生,提供了编码、解码、转换、封装等功能,以及剪裁、缩放、色域等后期处理,支持几乎目前所有音视频编码标准(由于格式众多,我们就不一一列列举了,可以在Wikipedia中找到)。

同时,FFmpeg还衍生出了libav项目,从中诞生了视频解码器LAV,许多播放软件都可调用LAV进行解码,并且LAV本身也支持利用显卡进行视频硬解。很多主流视频播放器中都以FFmpeg作为内核播放器。不仅仅是视频播放器,就连Chrome这类可以播放网页视频的浏览器也受益于FFmpeg。很多开发者也基于FFmpeg做过很多开发并开源出来,比如大神雷霄骅(代码可见他的sourceforge)。

官网地址:http://ffmpeg.org/

2.4 ijkplayer工程

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

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

Github地址:https://github.com/Bilibili/ijkplayer

2.5 JSMpeg工程

JSMpeg是一个基于JavaScript的MPEG1视频的解码器。如果要做H5端的视频直播,可以考虑使用JSMpeg在移动端进行解码。在H5端做音视频直播,可以使用JSMpeg进行视频解码,这也是最近比较火的H5抓娃娃的主流策略。

Github地址:https://github.com/phoboslab/jsmpeg

2.6 Opus音频编码器

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

Opus是“取代”了Speex。但是Speex中有的功能,Opus却没有,比如回声消除。这个功能已经从编码器中独立出来。所以如果想实现好的回声消除,可以配合WebRTC的AEC和AECM模块做二次开发。

官网地址:https://opus-codec.org/

2.7 live555工程

live555是一个C++流媒体开源项目,其中不仅包括了传输协议(SIP、RTP)、音视频编码器(H.264、MPEG4)等,还包括流媒体服务器的例子,是流媒体项目的首选,里面的传输模块是非常值得视频会议开发作为参考的。

官网地址:http://www.live555.com/

3、音视频前后处理开源工程

前后处理包含很多细分技术,应用正确的话,对视频质量或多或少都有提升。不过每增加一个处理环节,必然会增加运算量与延时,所以如何取舍,还要大家各自斟酌。

3.1 Seetaface工程

Seetaface是由中科院山世光老师开源的一套完整的人脸检测,人脸对齐和人脸验证方案。代码基于C++实现,开源协议为BSD-2,可供学术界和工业界免费使用。且不依赖于任何第三方的库函数,在使用对齐好的LFW图片上,检测对齐全部使用该开源软件的情况下可达到97.1%。

Github地址:https://github.com/seetaface/SeetaFaceEngine

3.2 GPUImage工程

现在在iOS端做美颜效果、加水印,基本都会采用GPUImage,它内置了125种渲染效果, 还支持脚本自定义。该项目实现了图片滤镜、摄像头实时滤镜。它优势在于处理效果是基于GPU实现,相对于CPU处理性能更高。

Github地址:https://github.com/BradLarson/GPUImage

3.3 Open nsfw model工程

Open nsfw model是雅虎开源项目,全名是Open Not suitable for work model,专门鉴别不适合工作时间浏览的图片(言而言之就是小黄图)。它是基于Caffe框架训练的模型,用于音视频后处理。不过,它还不能鉴别恐怖、血腥图片。

Github地址:https://github.com/yahoo/open_nsfw

3.4 Soundtouch工程

Soundtouch是一个开源的音频处理框架,主要功能对音频变速、变调,实现变声的效果。同时,它也能对媒体流实时处理。采用32位浮点或者16位定点,支持单声道或者双声道,采样率范围为8k - 48k。

官网地址:http://www.surina.net/soundtouch/

4、服务端类开源项目

正如开始时我们所说,WebRTC缺少服务端的设计与部署,利用MCU、SFU实现多人聊天,提高传输质量,都需要开发者自己动手。而下面这些开源项目能够帮到你。

4.1 Jitsi工程

Jitsi是开源的视频会议系统,可以实现在线视频会议,文档共享和即时消息的分享。它支持网络视频会议,使用SFU模式实现视频路由器功能。开发语言是Java。它支持SIP帐号注册电话呼叫。不仅支持单机本地安装方式,还支持云平台安装。

官网地址:https://jitsi.org/

4.2 JsSIP工程

JsSIP是基于WebRTC的JavaScript SIP协议实现的库,可以在浏览器和Node.js中运行。它可以与 OverSIP、Kamailio、Asterisk、OfficeSIP等SIP Server一起运行。

Github地址:https://github.com/versatica/JsSIP

4.3 SRS工程

SRS是一个采用MIT协议授权的国产的简单的RTMP/HLS 直播服务器。最新版还支持FLV模式,同时具备了RTMP的实时性,以及HLS中属于HTTP协议对各种网络环境高度适应性,并且支持更多播放器。它的功能与nginx-rtmp-module类似, 可以实现RTMP/HLS的分发。

Github地址:https://github.com/ossrs/srs

4.4 JRTPLIB工程

JRTPLIB 是一个开源的 RTP协议实现库,支持Windows和unix平台。它支持多线程,处理性能较好。它还支持RFC3550、UDP IPV6,支持自定义扩展传输协议。但它不支持TCP传输,这需要开发者自己来实现。同时,它也不支持音视频的分包,代码要你自己来实现。

Github地址:https://github.com/j0r1/JRTPLIB

4.5 OPAL工程

OPAL是OpenH323的下一个版本,继承了Openh323协议,其新包含了SIP协议栈,是实现SIP协议的首选,缺点是参考例子较少。

代码地址:http://sourceforge.net/projects/opalvoip/files/

4.6 Kurento工程

Kurento是一个基于WebRTC的媒体服务端,并包含了一系列API,可以简化web与移动端实时视频应用的开发。

官网地址:http://www.kurento.org/

Github地址:https://github.com/Kurento

4.7 Janus工程

Janus是一个WebRTC媒体网关。不论是做流媒体、视频会议、录制、网关,都可以基于Janus来实现。

Github地址:https://github.com/Kurento

5、其它资源

5.1 Callstats公司

实时通信过程中的,延时、丢包、接通率、掉线率等质量问题,都影响用户体验。商用项目尤其需要关注。Callstats是一家通过对WebRTC呼叫进行专业监测,来帮助用户搜集通讯数据,提升通话质量的服务商。

Callstats也通过Github开放很多案例,可供使用Jitsi-videobridge,、turn-server、JsSIP的开发者参考。

官方地址:https://www.callstats.io/

Github地址:https://github.com/callstats-io

5.2 Meetecho团队

Meetecho是著名的开源WebRTC网关项目Janus的开发团队。他们还提供基于Janus开发的技术咨询与部署服务、建立视频会议直播与录制服务等。

官网地址:https://github.com/carlhuda/janus

附录:更多实时音视频开发资料

即时通讯音视频开发(一):视频编解码之理论概述》 《即时通讯音视频开发(二):视频编解码之数字视频介绍》 《即时通讯音视频开发(三):视频编解码之编码基础》 《即时通讯音视频开发(四):视频编解码之预测技术介绍》 《即时通讯音视频开发(五):认识主流视频编码技术H.264》 《即时通讯音视频开发(六):如何开始音频编解码技术的学习》 《即时通讯音视频开发(七):音频基础及编码原理入门》 《即时通讯音视频开发(八):常见的实时语音通讯编码标准》 《即时通讯音视频开发(九):实时语音通讯的回音及回音消除概述》 《即时通讯音视频开发(十):实时语音通讯的回音消除技术详解》 《即时通讯音视频开发(十一):实时语音通讯丢包补偿技术详解》 《即时通讯音视频开发(十二):多人实时音视频聊天架构探讨》 《即时通讯音视频开发(十三):实时视频编码H.264的特点与优势》 《即时通讯音视频开发(十四):实时音视频数据传输协议介绍》 《即时通讯音视频开发(十五):聊聊P2P与实时音视频的应用情况》 《即时通讯音视频开发(十六):移动端实时音视频开发的几个建议》 《即时通讯音视频开发(十七):视频编码H.264、VP8的前世今生》 《实时语音聊天中的音频处理与编码压缩技术简述》 《网易视频云技术分享:音频处理与压缩技术快速入门》 《学习RFC3550:RTP/RTCP实时传输协议基础知识》 《基于RTMP数据传输协议的实时流媒体技术研究(论文全文)》 《声网架构师谈实时音视频云的实现难点(视频采访)》 《浅谈开发实时视频直播平台的技术要点》 《还在靠“喂喂喂”测试实时语音通话质量?本文教你科学的评测方法!》 《实现延迟低于500毫秒的1080P实时音视频直播的实践分享》 《移动端实时视频直播技术实践:如何做到实时秒开、流畅不卡》 《如何用最简单的方法测试你的实时音视频方案》 《技术揭秘:支持百万级粉丝互动的Facebook实时视频直播》 《简述实时音视频聊天中端到端加密(E2EE)的工作原理》 《移动端实时音视频直播技术详解(一):开篇》 《移动端实时音视频直播技术详解(二):采集》 《移动端实时音视频直播技术详解(三):处理》 《移动端实时音视频直播技术详解(四):编码和封装》 《移动端实时音视频直播技术详解(五):推流和传输》 《移动端实时音视频直播技术详解(六):延迟优化》 《理论联系实际:实现一个简单地基于HTML5的实时视频直播》 《IM实时音视频聊天时的回声消除技术详解》 《浅谈实时音视频直播中直接影响用户体验的几项关键技术指标》 《如何优化传输机制来实现实时音视频的超低延迟?》 《首次披露:快手是如何做到百万观众同场看直播仍能秒开且不卡顿的?》 《Android直播入门实践:动手搭建一套简单的直播系统》 《网易云信实时视频直播在TCP数据传输层的一些优化思路》 《实时音视频聊天技术分享:面向不可靠网络的抗丢包编解码器》 《P2P技术如何将实时视频直播带宽降低75%?》 《专访微信视频技术负责人:微信实时视频聊天技术的演进》 《腾讯音视频实验室:使用AI黑科技实现超低码率的高清实时视频聊天》 《微信团队分享:微信每日亿次实时音视频聊天背后的技术解密》 《近期大热的实时直播答题系统的实现思路与技术难点分享》 《福利贴:最全实时音视频开发要用到的开源工程汇总》 >> 更多同类文章 ……

(本文同步发布于:http://www.52im.net/thread-1395-1-1.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯社交用户体验设计

教你爱的正确姿势-QQ红包520项目总结

28330
来自专栏Sign

微信小游戏开发技巧

之前有幸收到掘金邀请去分享小游戏开发相关的技术主题,正好公众号一直也没有比较全面的和大家聊如何从技术层面做游戏,这里整理一下之前的分享ppt。

88550
来自专栏BestSDK

苹果iOS10系统正式发布,开放Siri SDK

编辑导语 北京时间6月14日凌晨01:00,苹果在旧金山举行一年一度的苹果全球开发者大会(WWDC)。WWDC 2016大会上,iOS 10被放在了最后一位压轴...

24990
来自专栏MixLab科技+设计实验室

DIY一个人工智能设计师_v0.0.1

本文包含了两个系列的内容: 《设计师会编程,程序员懂艺术》 《写给设计师的人工智能指南》 在这里给设计师介绍人工智能在设计领域的应用,也亲手实现了一个融合设计、...

43260
来自专栏腾讯社交用户体验设计

基于任务的导航设计 - 腾讯ISUX

13130
来自专栏腾讯社交用户体验设计

QQ音乐V5 : 星设定 - 腾讯ISUX

16720
来自专栏即时通讯技术

七牛云技术分享:使用QUIC协议实现实时视频直播0卡顿!

不做任何开发,就能实现弱网环境下实现实时视频直播零卡顿,听上去是不是天方夜谭?看完这篇文章你就知道,我们是如何做到的。

23220
来自专栏web前端教室

学习前端开发,不知道怎么做,不知道问什么了,怎么办

我刚开始搞培训的时候,不是很懂学生的心理。我想法很简单,你不会,我教你,你努力学,学会就挣钱,很清晰。但人本身是复杂的,他会受很多外在因素的影响。 他会想,我学...

21980
来自专栏编程微刊

网站二次开发的总结

17660
来自专栏编程微刊

初中级前端开发工程师如何提升个人能力?

16020

扫码关注云+社区

领取腾讯云代金券