18个实时音视频开发中会用到开源项目

实时音视频的开发学习有很多可以参考的开源项目。

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

我们今天汇总了一些能帮助到正在学习或进行音视频开发的实时音视频开发者们的开源项目与几个也在为开源社区贡献力量的商业服务。这些项目分为几类:音视频编解码类、视频前后处理、服务端类等。

音视频编解码类开源项目

视频编解码的作用,就是在设备的摄像头采集画面和前处理后,将图像进行压缩,进行数字编码,用于传输。编解码器的优劣基本在于:压缩效率的高低,速度和功耗。

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

WebRTC

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

官网地址:webrtc.org/

x264

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

官网地址:www.videolan.org/developers/…

FFmpeg

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

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

官网地址:ffmpeg.org/

ijkplayer

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

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

Github地址:github.com/Bilibili/ij…

JSMpeg

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

Github地址:github.com/phoboslab/j…

Opus

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

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

官网地址:opus-codec.org/

live555

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

官网地址:www.live555.com/

音视频前后处理开源项目

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

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

Github地址:github.com/seetaface/S…

GPUImage

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

Github地址:github.com/BradLarson/…

Open nsfw model

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

Github地址:github.com/yahoo/open_…

Soundtouch

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

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

服务端类开源项目

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

Jitsi

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

官网地址:jitsi.org/

JsSIP

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

Github地址:github.com/versatica/J…

SRS

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

Github地址:github.com/ossrs/srs

JRTPLIB

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

Github地址:github.com/j0r1/JRTPLI…

OPAL

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

代码地址:sourceforge.net/projects/op…

Kurento

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

Github地址:github.com/Kurento

Janus

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

Github地址:github.com/Kurento

其它商业服务

Callstats.io

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

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

Github地址:github.com/callstats-i…

Meetecho

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

Github地址:github.com/carlhuda/ja…

声网Agora

声网提供了从编解码到端到端传输的全套服务,开发者可以接入上文所述的音视频前后处理的开源项目,配合使用声网SDK可以建立高质量的实时音视频应用。在Web端,Agora Web SDK可以帮助WebRTC开发者解决服务端传输中会遇到的卡顿、延时、回声、多人视频不稳定等问题。同时,声网SDK还对多个系统平台的应用提供实时音视频通讯服务。

声网在Github上有许多可供开发者参考、实践的demo源码,覆盖了从网页端、iOS到Android平台,以及音视频直播、游戏连麦、企业会议、AR、直播答题、小程序等多种实时互动应用场景。

Github地址:github.com/AgoraIO-Com…

我们在这里列出了18个开源项目,以及3个能有效保证实时音视频传输质量的服务。不过篇幅有限,还有很多开源项目我们没有详细列出,比如在音视频方面,Xiph.org的Speex、FLAC,还有Xvid、libvpx、Lagarith、Daala、Thor等。欢迎大家继续补充。

最后给做音视频开发或希望学习 WebRTC 的开发者推荐一些视频教程:

WebRTC, ffmpeg, 个人介绍,领取

webrtc

ffmpeg

本文源自RTC 开发者社区,欢迎访问,与更多实时音视频开发者交流经验,参与更多技术活动。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • 18个实时音视频开发中会用到开源项目 实时音视频的开发学习有很多可以参考的开源项目。一个实时音视频应用共包括几个环...
    福later阅读 2,885评论 0 33
  • 这么多年过去了,我们终于可以像普通朋友一样约在一起出去吃饭聊天。 你很久没见到我了,很多年,你印象中的我应该还是那...
    嗨𠰋阅读 326评论 0 8
  • 001 怎么突然想起来家里的那头老牛呢? 那天陪孩子去奶牛牧场玩,平常本来是到了那就是去游戏区的,那天我说我带你去...
    王丽燕199阅读 853评论 0 6
  • 1993年2月,河南省新乡市,新年伊始。 一个农村里一户普通人家,户主彭海,妻子岳秀。这家住在村子最东头,这边相对...
    139aea786759阅读 279评论 0 2
  • 【一】原文 道生一,一生二,二生三,三生万物。万物负阴而抱阳,冲气以为和。人之所恶,唯孤、寡、不谷,而王公以为称,...
    吾宗老孙子阅读 799评论 0 1