文章目录

  • 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

开源控件总结

视频缓存(边看边播)

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的移动端例子:

微信Android视频编码爬过的那些坑

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端推流、播放)