文章目录
- 1、流媒体相关
- 2、Android开源框架
- 2.1、开源音频、视频框架
- 视频播放(media palyer, video player):
- 视频缓存(边看边播)
- 视频编辑(video edit):
- 音频:
- 视频编码器:
- 2.2、视频播放器总结
- 1、原生VideoView
- 2、JiaoZiVideoPlayer(饺子、节操)
- JiaoZiVideoPlayer源码分析
- 3、GSYVideoPlayer
- 4、~~NiceVieoPlayer~~
- 5、ijkplayer解析
- 6、对比
- 2.3、短视频SDK
- 3、直播
1、流媒体相关
计算机网络知识
流媒体及流媒体传输协议
2、Android开源框架
2.1、开源音频、视频框架
开源播放器内核比较:ijkPlayer、VLC、ExoPlayer、MediaPlayer、SmartPlayer
视频播放(media palyer, video player):
- ijkplayer(c语言):https://github.com/Bilibili/ijkplayer
- Exoplayer:https://github.com/google/ (google开源)
- GSYVideoPlayer:https://github.com/CarGuo/GSYVideoPlayer
- Jiaozi(饺子、节操):https://github.com/lipangit/JiaoZiVideoPlayer (坑多)
- Vitamio(强大):https://www.vitamio.org/
- awesomeplayer:https://github.com/filipebezerra/AwesomePlayer (5.1已经弃用)
- nuplayer:https://github.com/timsheu/NuPlayer-Android (没有star)
- mpv(c语言):https://github.com/mpv-player/mpv (基于MPlayer/mplayer2)
- VideoPlayerManager:https://github.com/danylovolokh/VideoPlayerManager
- PLDroidPlayer(七牛):https://github.com/pili-engineering/PLDroidPlayer
- SmarterStreaming(大牛):https://github.com/daniulive/SmarterStreaming (付费)
- jjdxm_ijkplayer:https://github.com/jjdxmashl/jjdxm_ijkplayer
- NiceVieoPlayer:https://github.com/xiaoyanger0825/NiceVieoPlayer
开源控件总结
- ijkplayer只是一个播放器内核,并没有封装好控制界面。
- GSYVideoPlayer 翻改至 JiaoZiVideoPlayer ,二者都是基于 ijkplayer 的二次开发。
视频缓存(边看边播)
https://github.com/danikula/AndroidVideoCache
视频编辑(video edit):
https://github.com/Zhaoss/WeiXinRecordedDemo
https://github.com/pili-engineering/PLDroidShortVideo
https://github.com/LanSoSdk/LanSoEditor_common
https://github.com/aiyaapp/AiyaEffectsAndroid
https://github.com/yangjie10930/EpMedia
https://github.com/rdsdk/rdVideoEditSDK-for-Android
音频:
- UniversalMusicPlayer:https://github.com/googlesamples/android-UniversalMusicPlayer
- JamsMusicPlayer:https://github.com/psaravan/JamsMusicPlayer
- Timber: https://github.com/naman14/Timber
- StylishMusicPlayer:https://github.com/ryanhoo/StylishMusicPlayer
- JamsMusicPlayer:https://github.com/psaravan/JamsMusicPlayer
- Music-Player:https://github.com/andremion/Music-Player
- SmarterStreaming:https://github.com/daniulive/SmarterStreaming
视频编码器:
- MediaCodec
- FFmpeg
最简单的基于FFmpeg的移动端例子:
2.2、视频播放器总结
1、原生VideoView
v2.6.4及以前(VideoPlayActivity.java)
- 适合最简单的视频播放,存在兼容问题
- 需要新打开Activity来播放
Android MediaPlayer的生命周期
2、JiaoZiVideoPlayer(饺子、节操)
JieCao 是作者最开始开发的,后面更新为Jiaozi 视频。
https://github.com/lipangit/JieCaoVideoPlayer
implementation('fm.jiecao:jiecaovideoplayer:5.5.4')
<fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard
android:id="@+id/jc_video"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
https://github.com/lipangit/JiaoZiVideoPlayer
compile 'cn.jzvd:jiaozivideoplayer:6.2.7'
<cn.jzvd.JZVideoPlayerStandard
android:id="@+id/videoplayer"
android:layout_width="match_parent"
android:layout_height="200dp"/>
https://github.com/Jzvd/JZVideo
- 在Fragment中无法监听返回键和画面切换,所有需要特殊处理。
注意:
- 一般不需要新开activity来播放视频。
- activity关闭时注意回收播放器。
@Override
protected void onPause() {
super.onPause();
JZVideoPlayer.releaseAllVideos();
}
@Override
public void onBackPressed() {
if (JZVideoPlayer.backPress()) {
return;
}
super.onBackPressed();
}
- activity的配置问题(竖向、转动)-
JiaoZiVideoPlayer源码分析
饺子播放器源码解析与评估
该播放器的核心实现类为以上几个。
- JZVideoPlayer为继承自FrameLayout实现的一个组合自定义View来实现了视频播放器的View相关的内容。
- JZVideoPlayerStandard则是继承自JZVideoPlayer实现了一些自身的功能。
- JZMediaManager是用来对于MediaPlayer的管理,对于MediaPlayer的一些监听器方法的回调和TextrueView的相关回调处理。
- JZVideoPlayerManager管理JZVideoPlayer
JZ提供两种播放引擎
- JZMediaSystem(默认、基于MediaPlayer)
- JZMediaIjkplayer(基于IjkMediaPlayer)
补充说明:JZMediaIjkplayer集成了ijkplayer(tv.danmaku.ijk.media.player.IMediaPlayer).
3、GSYVideoPlayer
https://github.com/CarGuo/GSYVideoPlayer
视频播放器(IJKplayer、ExoPlayer、MediaPlayer),HTTPS,支持弹幕,字幕,支持滤镜、水印、gif截图,片头广告、中间广告,多个同时播放,支持基本的拖动,声音、亮度调节,支持边播边缓存,支持视频自带rotation的旋转(90,270之类),重力旋转与手动旋转的同步支持,支持列表播放 ,列表全屏动画,视频加载速度,列表小窗口支持拖动,动画效果,调整比例,多分辨率切换,支持切换播放器,进度条小窗口预览,列表切换详情页面无缝播放,rtsp、concat、mpeg。
4、NiceVieoPlayer
https://github.com/xiaoyanger0825/NiceVieoPlayer
整个功能有参考节操播放器,但是自己这样封装和节操播放器还是有很大差异:
- 用IjkPlayer/MediaPlayer + TextureView封装,可切换IjkPlayer、MediaPlayer.
- 支持本地和网络视频播放.
- 完美切换小窗口、全屏,可在RecyclerView中无缝全屏.
- 手势滑动调节播放进度、亮度、声音.
- 支持清晰度切换.
- 可自定义控制界面.
5、ijkplayer解析
Android ijkplayer的使用解析
常用类:IMediaPlayer,IjkMediaPlayer,IjkTimedText
6、对比
库名 | 支持support的版本 | 支持AndroidX的版本 | Start数 |
ExoPlayer | v2.9.6 | v2.10.0 + | 18.1K |
GSYVideoPlayer | v6.0.3 | v7.0.0 + | 16.6K |
JzVideo | v7.2.0 | v7.2.1 + | 10.4k =>1.8K |
DKVideoPlayer | v3.0.3 | v3.0.4+ | 3.6K |
3、直播
Android直播实现(Android端推流、播放)