实时音视频开发中,开源项目为开发者提供了丰富的资源和解决方案。一个实时音视频应用通常包括采集、编码、前后处理、传输、解码、缓冲、渲染等环节。每个环节都涉及多种技术模块,例如,前后处理环节包含了美颜、滤镜、回声消除、噪声抑制等技术;采集环节则可能涉及麦克风阵列的使用;编解码环节则包括VP8、VP9、H.264、H.265等标准。本文将介绍在实时音视频开发中常用的开源项目。
音视频编解码类开源项目主要关注视频编解码的作用,即在设备摄像头采集画面和前处理后,将图像进行压缩,进行数字编码,用于传输。编解码器的优劣主要体现在压缩效率、速度和功耗等方面。目前主流的视频编码器分为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在实时音视频应用中基础功能完善,但在服务端设计和部署方面有所欠缺,因此在实际应用中往往需要结合Janus等服务端类开源项目。
x264和x265是用于产生符合H.264和H.265标准的视频编码器,提供了命令行接口与API,广泛应用于图形用户接口和调用FFmpeg、Handbrake等软件。FFmpeg是一个提供了编码、解码、转换、封装等功能,以及剪裁、缩放、色域等后期处理的综合工具,支持几乎所有音视频编码标准。衍生的libav项目中包含了视频解码器LAV,许多播放软件可调用LAV进行解码,并支持利用显卡进行视频硬解。FFmpeg被广泛应用于视频播放器和浏览器等应用中,并且许多开发者基于FFmpeg进行二次开发并开源。
ijkplayer是一个轻量级的iOS/Android视频播放器,基于ffplay.c实现,易于集成,并且编译配置可裁剪以控制安装包大小。它支持视频软解和硬解,但在播放过程中无法切换解码方式。在iOS和Android上,视频硬解分别采用VideoToolbox和MediaCodec实现。ijkplayer仅支持音频软解。
JSMpeg是一个基于JavaScript的MPEG1视频解码器,适用于移动端的音视频直播场景。在H5端的音视频直播中,JSMpeg用于视频解码,是目前流行的移动端解码策略之一。
Opus是一个用C语言开发的高灵活度音频编码器,适用于ARM和x86平台,采用fix-point实现。它同时支持语音与音乐编码,比特率为6k-510k,融合了SILK和CELT编码方法。虽然Opus取代了Speex,但Speex中的一些功能,如回声消除,Opus并未涵盖。因此,如果需要实现回声消除功能,可以结合WebRTC的AEC和AECM模块进行二次开发。
live555是一个C++流媒体开源项目,提供了传输协议(SIP、RTP)、音视频编码器(H.264、MPEG4)等组件,是流媒体项目的首选,并且其中的传输模块值得视频会议开发者参考。
音视频前后处理开源项目关注的是通过应用不同技术提升视频质量。Seetaface是用于人脸检测、对齐和验证的完整方案,基于C++实现,适用于学术和工业界。GPUImage是一个在iOS端实现美颜效果、加水印的工具,内置125种渲染效果,支持脚本自定义,处理效果基于GPU实现。Open nsfw model是雅虎开源的图片鉴别模型,用于识别不适合工作时间浏览的图片,基于Caffe框架训练。Soundtouch是一个开源音频处理框架,用于实现音频变速、变调效果,支持实时处理,并提供32位浮点或16位定点处理,支持单声道或双声道,采样率范围为8k - 48k。
服务端类开源项目如Jitsi提供了在线视频会议功能,支持文档共享和即时消息。JsSIP是基于WebRTC的JavaScript SIP协议实现,可以在浏览器和Node.js中运行,支持与多种SIP Server集成。SRS是一个国产的RTMP/HLS直播服务器,支持FLV模式,并具备实时性和适应性。JRTPLIB是一个开源的RTP协议实现库,支持多线程和自定义扩展传输协议,但不支持TCP传输和音视频分包,需要开发者自行实现。OPAL是实现SIP协议的开源项目,继承了OpenH323协议。Kurento是一个基于WebRTC的媒体服务端,提供了一系列API,简化了实时视频应用的开发。Janus是一个WebRTC媒体网关,用于构建流媒体、视频会议、录制等服务。
除了上述项目,还有Callstats.io等服务提供实时通信质量监控,帮助用户提升通话质量。Meetecho提供基于Janus开发的技术咨询与部署服务。声网Agora提供了从编解码到端到端传输的服务,开发者可以接入音视频前后处理的开源项目,配合声网SDK建立高质量实时音视频应用。
本文列举了18个开源项目,以及3个服务端类项目,但还有很多其他开源项目未详细列出。读者如需了解更多开源资源,欢迎在评论区分享和补充。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。