Android 常見的視訊播放器,ijkPlayer、VLC、ExoPlayer、MediaPlayer、SmartPlayer簡單對比:
1、MediaPlayer
在Android系統中對于視訊播放器有原生的實作MediaPlayer, 以及将MediaPlayer,SurfaceView封裝在一起的VideoView, 兩者都隻是使用硬解碼播放,
基本上隻支援本地和HTTP協定的視訊播放,擴充性都很差,隻适合最簡單的視訊播放需求。
2、ijkPlayer
ijkplayer 是Bilibili公司開源的播放器實作,整合了FFMpeg, ExoPlayer, MediaPlayer等多種實作,提供了類似于MediaPlayer的API,可以實作軟硬解碼自由切換,自定義TextureView實作,同時得益于FFMpeg的能力,也能支援多種流媒體協定(RTSP,RTMP,HLS等),多種視訊編碼格式(h264, mpeg4, mjpeg),具有很高的靈活性,可以定制實作自己特色的播放器(比如支援視訊縮放,視訊翻轉等)。
如果隻是使用它進行播放,內建也較為簡單,使用也和MediaPlayer差不多,但是要定制化需求,就有一定的門檻高度。
支援軟硬編解碼,支援倍速播放,可以定制化內建需要的功能,內建占用體積也很小。
優點:
1.ijkplayer結構比較簡單,基本以ffplay展開,開發難度較小;
2.ijkplayer包比VLC小一點,經過裁剪,約為4.2M左右;
缺點:
1.ijkplayer可擴充性較差,基本上沒有提供modules供開發者二次開發;
2.ijkplayer 官方維護力度小,版本更新很慢;
3、ExoPlayer
ExoPlayer 是google推出的開源播放器,主要是內建了Android 提供的一套解碼系統來解析視訊和音頻,将MediaCodec封裝地非常完善,并加入了對DASH和HLS等直播協定的支援,形成了一個性能優越,播放穩定性較好的一個開發播放器。
但也隻支援硬碼,如果項目中隻需要支援對H264格式、以及流媒體協定比較正常(比如HTTP,HLS),基于ExoPlayer定制也是不錯的選擇。
優點:
1.接入包小,1.1M;
2.維護團隊強大,更新速度快;
缺點:
1.不太适合直播;
2.視訊解碼無法接入軟解,可擴充性一般;
3.适合播放場景簡單的項目,播放過程中無切換碼流的情況
問題:ExoPlayer 會替代MediaPlayer成為Android平台上的預設播放器嗎?
不會,兩個原因:
-
Android 5.0 之後Android的Codec架構做了依次重大調整,放棄了AwesomePlayer
,使用NuPlayer架構,ExoPlayer 沒有做過多的相容;
- ExoPlayer 目前還是一個小而輕的播放器,如果要合成到系統中,它需要調整的東西太多,代碼量會變得很繁雜,很可能得不償失;
4、VLC Media Player
VLC 是VideoLAN 計劃所研發的工程,最早預1996年開始,是一個完全的跨平台播放器,适合Windows、Mac OS、Linux、Android、iOS等系統,目前完全的跨平台播放器很少,VLC是最受歡迎的一種播放器;目前累計下載下傳13億次,是真真正正的全球播放器;
VLC的整體架構是設計成一套module的管理機制,将功能分類并抽象成modules。
VLC main:player的main。初始化libVLC 并加載使用者界面。
libVLCcore:libvlc的核心,抽象出了一個libvlc_instance_t 對象,提供modules的裝載/解除安裝機制。
modules:modules提供具體的功能,比如上面的access,demux,decode就是以一個子產品的形式存在。
External libraries:外部開源庫。
優點:
1.跨平台,相容性好;
2.功能全面,支援rtsp、rtmp、ftp、http、https等協定;
3.代碼完全解耦,modules互相獨立,不影響,引入新modules友善;
4.維護團隊強大,更新頻繁;
缺點:
1.Android平台編譯出的包較大,有16M左右;
5、SmartPlayer
SmartPlayer系大牛直播SDK(Github)出品的全自研核心的RTSP和RTMP直播播放器SDK,跨平台(Windows、Android、iOS)、功能齊全、高穩定、超低延遲,超低資源占用,适用于安防、教育、單兵指揮等對延遲和穩定性要求比較苛刻的場景。
在機器性能沒有瓶頸的前提下,SmartPlayer的RTSP播放器和RTMP播放器延遲是業内為數不多毫米級的。
參考連結:
https://zhuanlan.zhihu.com/p/397425806