FFmpeg进阶: 音视频常用开源库


在音视频应用开发过程中我们会用到各种各样的开源库来提升开发效率,这里对各种常用的开源库进行了汇总,方便大家参考使用。

多媒体处理

FFmpeg

FFmpeg是一个开源的音视频处理库和工具集,可以进行音视频编码、解码、转码、剪辑等操作,支持众多音视频格式和协议。各个模块:
封装模块AVFormat
AVFormat中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如MP4、FLV、KV、TS等文件封装格式,RTMP、RTSP、MMS、HLS等网络协议封装格式。

编解码模块AVCodec
AVCodec中实现了目前多媒体领域绝大多数常用的编解码格式,既支持编码,也支持解码。AVCodec除了支持MPEG4、AAC、MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如H.264(AVC)编码,需要使用x264编码器;H.265(HEVC)编码,需要使用x265编码器;MP3(mp3lame)编码,需要使用libmp3lame编码器。

滤镜模块AVFilter
AVFilter库提供了一个通用的音频、视频、字幕等滤镜处理框架。在AVFilter中,滤镜框架可以有多个输入和多个输出。

视频图像转换计算模块swscale
swscale模块提供了高级别的图像转换API,例如它允许进行图像缩放和像素格式转换,常见于将图像从1080p转换成720p或者480p等的缩放,或者将图像数据从YUV420P转换成YUYV,或者YUV转RGB等图像格式转换。

音频转换计算模块swresample
swresample模块提供了高级别的音频重采样API。例如它允许操作音频采样、音频通道布局转换与布局调整。

Gstreamer

GStreamer是一个基于管道的多媒体框架,基于GObject,以C语言写成。凭借GStreamer,程序员可以很容易地创建各种多媒体功能组件,包括简单的音频回放,音频和视频播放,录音,流媒体和音频编辑。基于流水线设计,可以创建诸如视频编辑器、流媒体广播和媒体播放器等等的很多多媒体应用。

libav

Libav是一个FFmpeg的分支,提供了类似的功能,但有一些不同的实现方式和API。

流媒体传输

WebRTC

WebRTC(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流/音频流或者其他任意数据的传输。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。

Live555

是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了标准流媒体传输,是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+ 、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持。Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、MPlayer。

开源播放器

ijkplayer

ijkplayer是一个基于FFPlay源码的轻量级Android/iOS视频播放器,实现了跨平台的功能,API易于集成;编译配置可裁剪,⽅便控制安装包大小。接口和结构会直接借鉴IJKPlayer和ffplay。IJKPlayer和ffplay接口都是可以做到商用,可以使用这2种接口快速开发,如果做音视频的人很少,那可以直接基于这些接口开发。达到一个ijkplayer的效果。
项目地址:
https://github.com/bilibili/ijkplayer

exoplayer

Exoplayer是一个android平台的播放器,支持格式比android系统的mediaplayer更好,确定性更好,mediaplayer是可以进行厂家定制的,各平台一致性比较差。

vlc

VLC多媒体播放器(VLC media player),最初名为VideoLAN Client,是VideoLAN计划的开放源代码多媒体播放器。支持众多音频与视频解码器及文件格式,并支持DVD影音光盘、VCD影音光盘及各类流协议。它也能作为单播或多播的流服务器在IPv4或IPv6的高速网络连线下使用。调用FFmpeg计划的解码器与libdvdcss程序库使其有播放多媒体文件及加密DVD影碟的功能。

编解码

av1

AOMedia Video 1(简称AV1)是一个开放、免专利的视频编码格式,专为通过网络进行流传输而设计。它由开放媒体联盟(AOMedia)开发,目标是取代其前身VP9,该联盟由半导体企业、视频点播供应商和网页浏览器开发商于2015年成立。2018年,Facebook进行接近真实使用环境条件测试,测试结果显示AV1资料压缩率与x264 main profile、x264 high profile和libvpx-vp9相较之下,分别提升50.3%、46.2%和34.0%。与VP9类似,但与H.264/AVC和HEVC不同的是,AV1具有买断式授权模式,不会阻碍开源项目的采用。

vp8、vp9

VP8是一个开放的影像压缩格式,最早由On2 Technologies开发,随后由Google发布。同时Google也发布了VP8编码的实现库:libvpx,以BSD授权条款的方式发行,随后也附加了专利使用权。经过一些争论之后,最终VP8的授权确认为一个开放源代码授权。

VP9是谷歌公司为了替换老旧的VP8影像编码格式并与动态专家图像组(MPEG)主导的高效率视频编码(H.265/HEVC)竞争所开发的免费、开源的影像编码格式。VP9主要被用于Google旗下著名的影音分享网站YouTube。VP9一般与Opus音频编码一起以WebM格式封装。相比于高效率视频编码,许多浏览器都支持VP9视频格式。Google持有VP9视频格式的部分专利,但Google保证在互惠的条件下(例如用户避免参与专利诉讼)可免费使用。

aac、opus

高级音频编码(Advanced Audio Coding,AAC)是有损音频压缩的专利数字音频编码标准,由Fraunhofer IIS、杜比实验室、贝尔实验室、Sony、Nokia等公司共同开发。出现于1997年,为一种基于MPEG-2的标准,2000年,MPEG-4标准在原本的基础上加上了PNS(Perceptual Noise Substitution)等技术,并提供了多种扩展工具。为了区别于传统的MPEG-2AAC又称为MPEG-4 AAC。其作为MP3的后继者而被设计出来,在相同的比特率之下,AAC相较于MP3通常可以达到更好的声音质量。

Opus是一个有损音频压缩的数字音频编码格式,由Xiph.Org基金会开发,之后由互联网工程任务组(IETF)进行标准化,目标是希望用单一格式包含声音和语音,取代Speex和Vorbis,且适用于网络上低延迟的即时声音传输,标准格式定义于RFC 6716文件。Opus格式是一个开放格式,使用上没有任何专利或限制。
Opus具有非常低的算法延迟(默认为22.5 ms),非常适合用于低延迟语音通话的编码,像是网络上的即时声音流、即时同步声音旁白等等,此外Opus也可以透过降低编码比特率,达成更低的算法延迟,最低可以到5ms。在多个听觉盲测中,Opus都比MP3、AAC、HE-AAC等常见格式,有更低的延迟和更好的声音压缩率

音频处理

speex

SPEEX是一种开源的音频编解码库,它可以压缩和解压缩高质量语音数据。它是一个适应性编码器,可以根据输入信号调整编码参数,以获得更好的压缩效率和音质。
SPEEX库的主要优点是:
高压缩比:SPEEX具有比其他音频编解码器更高的压缩比,可以将语音数据压缩到相对较小的文件中。
高音质:SPEEX使用宽带音频信号进行编码和解码,可以保留更多高音质的语音数据。
自适应编码:SPEEX采用自适应编码技术,可以根据输入信号的动态范围和特征来自动调整编码参数,以提高编码效果和音质。
可定制性高:SPEEX提供了多种编码参数和配置选项,可以根据需求进行灵活的设置。
SPEEX库被广泛应用于语音通信、语音编解码、语音信号处理等领域,特别是在开源社区、VoIP通信协议和应用程序中得到了广泛的应用。

sox

SoX是一种常用的开源音频处理库和工具,可以进行各种音频格式的转换、采样率调整、音量调节、混音、滤波、效果处理等,支持多种音频格式。
SoX库的主要优点是:
高质量:SoX可以保证高质量的音频处理效果,可以进行多种质量级别的重采样和滤波,同时支持高阶滤波器,以最大程度地减少失真。
可定制性高:SoX提供了多种音频处理选项和效果,可以根据需求实现灵活的音频处理。
支持多种音频格式:SoX支持多种音频格式,包括WAV、AIFF、AU、RAW、FLAC、MP3等。
跨平台:SoX可以运行在多种操作系统上,包括Linux、Windows、macOS等。
SoX库被广泛应用于音频处理、音频编辑、音频转换和转码、语音信号处理等领域,特别是在音频编辑和语音处理软件中得到了广泛的应用。

soundtouch

SoundTouch是一种开源的音频处理库,可以进行时间和音调的变速处理,以及声音特效的混响等处理。SoundTouch库使用非常方便,对于需要进行时间和音调的变速处理特别有用,例如音频剪辑、广播音乐、DJ等应用场景。
SoundTouch库的主要优点是:
高质量:SoundTouch使用高质量的时间和音调变换算法,以保持变速后的音频质量。
高效:SoundTouch具有较高的处理速度,可以在很短的时间内完成音频处理,并且与常见音频编解码库相兼容。
简单易用:SoundTouch以库的形式提供,通过简单的API可以轻松地将其集成到相应的项目中。
跨平台:SoundTouch支持多种操作系统,包括Windows,Linux和Mac OS X等。
SoundTouch库被广泛应用于音频处理、电影、音乐等领域。

流媒体服务器

SRS

SRS(Simple-RTMP-Server)是一个完全开源的RTMP服务器软件,支持直播流媒体推流、转码、录制、回放等功能。
SRS优点:
高性能:SRS可以处理大量的RTMP流媒体数据,支持高并发读写操作。
安全性:SRS支持基本的RTMP鉴权模式,可以在不允许非法用户访问媒体流时提供一定的安全性。
堆栈可定制性:SRS支持多种开源协议和协议栈,可以根据需要自定义视频和音频编码,同时支持HLS、HTTP-FLV和RTSP等流媒体协议。

开源:SRS完全开源,用户可以根据需要自定义开发,提供更加广泛的使用场景。
SRS被广泛应用于直播流媒体、网络会议等领域,可作为企业直播、教育直播、游戏直播、社交直播等方案的服务器端解决方案。

Janus

Janus是一个开源的WebRTC网关服务器,它提供了一个面向WebRTC的统一接口,允许WebRTC客户端与其他WebRTC对等端以及传统的线路电话网络、SIP和H.323等其他通信网络相互连接。
Janus的主要特点包括:
支持多种流媒体协议:Janus支持多种流媒体协议,例如WebRTC、SIP、RTP、RTSP等。
可扩展性:Janus的架构非常灵活,允许用户实现自定义插件,可以定制不同的功能,例如视频会议、直播流媒体、视频点播等。
易于部署:Janus是用C语言编写的,可以轻松地在各种平台上进行部署。
开源:Janus完全开源,并且能够与其他开源软件进行集成,例如GStreamer、Opus、VP8等。

Janus被广泛应用于视频会议、直播流媒体、语音/视频电话等领域,尤其是在开源社区以及VoIP通信协议和应用程序中得到了广泛的应用。

视频渲染

GPUImage

GPUImage是一个基于iOS和macOS平台的开源图像和视频处理库,它基于OpenGL ES 2.0技术,可以对实时视频、照片和静态图像进行高效的处理和渲染。
GPUImage的主要特点包括:
高效性:GPUImage使用OpenGL ES 2.0技术,可以利用GPU的并行处理能力,实现高效的图像和视频处理。
灵活性:GPUImage支持多种图像和视频处理效果,如滤镜、色彩增强、卷积操作等,同时还提供了自定义滤镜的接口,可以根据需要实现自定义滤镜效果。
可扩展性:GPUImage提供了一个可扩展的框架,可以支持自定义的OpenGL ES 2.0片段着色器,开发者可以根据需要进行扩展,实现更丰富的图像和视频处理效果。
容易使用:GPUImage提供了简单易用的API接口,开发者可以轻松地将其集成到自己的项目中,并实现各种图像和视频处理效果。
GPUImage被广泛应用于实时图像和视频处理、照片编辑、视频编辑等领域,特别是在视频直播、短视频、社交网络等应用中,得到了广泛的应用。

Grafika

Grafika是一个开源的Android图形和媒体编解码库,它提供了一系列Android中的图形和媒体操作示例,包括OpenGL、SurfaceTexture、MediaCodec等。
Grafika的主要特点包括:
支持OpenGL ES 2.0和3.0:Grafika提供了OpenGL ES 2.0和3.0的示例,可以帮助开发者更好地理解OpenGL ES的工作原理。
支持SurfaceTexture:Grafika提供了SurfaceTexture示例,可以实现高效的视频渲染和流媒体播放。
支持MediaCodec:Grafika提供了MediaCodec示例,可以实现高效的视频编解码。
可扩展性:Grafika提供了一个可扩展的框架,可以支持自定义的OpenGL ES片段着色器和顶点着色器,开发者可以根据需要进行扩展,实现更丰富的图形和媒体效果。
Grafika被广泛应用于Android图形和媒体编解码、游戏开发等领域,在实时视频处理、图像流输出、后处理等领域得到了广泛的应用。

LearnOpenGL

LearnOpenGL是一个免费的在线学习OpenGL编程的资源,它提供了全面的OpenGL编程教程和示例代码,以帮助初学者更好地掌握OpenGL编程技术。

猜你喜欢

转载自blog.csdn.net/yang1fei2/article/details/129966544