本文分享音视频领域最常用的开源项目,包括FFmpeg、grafika、ijkplayer、android-gpuimage、vlc-android、mp4parser、SopCastComponent等11个人开源项目,欢迎大家补充。
1 ffmpeg
https://github.com/FFmpeg/FFmpeg
ffmpeg应该是音视频入门必须要掌握的开源项目,涉及到音视频从生产到消费的完整过程,ffmpeg是一个综合性项目,涉及到非常多的知识点。
ffmpeg 从模块上划分可以分为下面几个模块:
- libavutil:ffmpeg中通用的工具库,其他模块的通用功能会调用到这儿;
- libavformat:音视频封装格式处理模块,可以用于解封和封装;
- libavcodec:音视频编码解码的库,是ffmpeg的核心库;
- libavfilter:滤镜特效处理的库;
- libavresample:这个库已经废弃,可以忽略;
- libpostproc:音视频后期加工的库;
- libswresample:音频采样数据格式转化;
- libswscale:视频像素数据格式转换;
- libavdevice:控制各种设备的输入输出,如果需要外接设备的话,一般情况下用不到;
2 grafika
https://github.com/google/grafika
grafika是google推出的Android 平台的图形图像处理的库;
- 给出camera处理的例子;
- opengl es处理的例子;
- 视频转码的例子;
3 ijkplayer
https://github.com/bilibili/ijkplayer
ijkplayer 是哔哩哔哩公司基于ffplay开发的一个音视频播放库,目前应用的比较广泛;
- 可以支持所有的音频、视频格式,封装格式;
- 全编译出来的库约9.2M;
- 实现软解码和硬解码之间的切换;
- 实现ffmpeg很多定制的option选项;
ijkplayer支持的软解码让播放画面更加优秀;还可以解决直播流过程中切换码流导致的花屏和黑屏问题。
4 android-gpuimage
https://github.com/cats-oss/android-gpuimage
gpuimage是基于opengl es 2.0的开源的图像处理库,可以用来给图像、实时camera、视频、电影等添加滤镜;
目前gpuimage支持很多滤镜,具体的可以参考一下github的上面显示的filter。
5 vlc-android
https://github.com/videolan/vlc-android
vlc-android是videolan 研究机构推出的一个播放框架;这个播放框架的思路和ijkplayer是完全不一样的,ijkplayer是基于ffplay,整体架构比较简单,因为核心的功能都由ffmpeg的ffplay模块帮忙实现了,但是vlc整体是pipeline实现的,编码解码以及解封的模块都是videolan自己实现的,和ffmpeg是两种演进思路;
- vlc 整体效率感觉更好一些;
- vlc-android编译出来的包过大,约20M,这是工程开发无法忍受的;
- vlc的更新节奏非常快,不像ijkplayer,目前基本上没有太多bilibili公司的人维护了;
6 mp4parser
https://github.com/sannies/mp4parser
mp4parser是读、写mp4 封装格式的库,只是操作封装格式,不是操作编码、解码格式,这个有很大的不同,想要熟悉mp4封装格式的同学,可以读一下mp4parser的源码;
7 SopCastComponent
https://github.com/LaiFeng-Android/SopCastComponent
这是优酷的“来疯”团队推出的一个完全Java层实现的直播sdk;
- 可以实现camera本地推流操作;
- 可以实现线上camera rtmp推流;
- 实现camera 滤镜 推流;
8 ExoPlayer
https://github.com/google/ExoPlayer
ExoPlayer是google开源的一个播放器库,是基于MediaPlayer的一个扩展,核心原理是分离音频和视频流,然后基于MediaCodec硬解码解析数据,目前的稳定性比较好,而且效率较高;如果你的视频源本身比较简单或者播放过程中不涉及码流的切换等等,建议还是选择ExoPlayer,播放效果更佳;
9 MediaSDK
https://github.com/JeffMony/MediaSDK
这是本人开发的一个视频边下边播的工具;
- 封装了ijkplayer、exoplayer、mediaplayer 三种播放器;
- 实现了视频下载队列化处理,m3u8和非m3u8视频下载;
- 实现m3u8、非m3u8视频边下边播功能;
- 本地代理实现边下边播功能;
10 AndroidVideoCache
https://github.com/danikula/AndroidVideoCache
这是github上非常火的一个mp4边下边播的库,也是基于本地代理的,可以参考起来使用;
11 LiTr
https://github.com/linkedin/LiTr
这是LinkedIn公司推出的一个轻量级的基于硬件加速的视频、音频编码解码的工具软件,封装的非常好,很值得学习。
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。