天天看點

ijkplayer、VLC Player、SmartPlayer、ExoPlayer播放器比較ExoPlayer

ijkPlayer

ijkPlayer是BiliBili公司維護的一個開源工程,基于ffmpeg開發的一個播放器軟體,支援Android和iOS平台,整個ijkplayer就是以ffplay為基礎,如果隻是使用它進行播放,內建也較為簡單,使用也和MediaPlayer差不多,但是要定制化需求,就有一定的門檻高度。支援軟硬編解碼,支援倍速播放,可以定制化內建需要的功能,內建占用體積也很小,更詳細的解釋參看下面官方介紹:

Features

  • Common
  • remove rarely used ffmpeg components to reduce binary size config/module-lite.sh
  • workaround for some buggy online video.
  • Android
  • platform: API 9~23
  • cpu: ARMv7a, ARM64v8a, x86 (ARMv5 is not tested on real devices)
  • api: MediaPlayer-like
  • video-output: NativeWindow, OpenGL ES 2.0
  • audio-output: AudioTrack, OpenSL ES
  • hw-decoder: MediaCodec (API 16+, Android 4.1+)
  • alternative-backend: android.media.MediaPlayer, ExoPlayer
  • iOS
  • platform: iOS 7.0~10.2.x
  • cpu: armv7, arm64, i386, x86_64, (armv7s is obselete)
  • api: MediaPlayer.framework-like
  • video-output: OpenGL ES 2.0
  • audio-output: AudioQueue, AudioUnit
  • hw-decoder: VideoToolbox (iOS 8+)
  • alternative-backend: AVFoundation.Framework.AVPlayer, MediaPlayer.Framework.MPMoviePlayerControlelr (obselete since iOS 8)

VLC Media Player

VLC 是一款自由、開源的跨平台多媒體播放器及架構,可播放大多數多媒體檔案,以及 DVD、音頻 CD、VCD 及各類流媒體協定。

Plays all formats

MPEG-1/2, DivX® (1/2/3/4/5/6), MPEG-4 ASP, XviD, 3ivX D4, H.261, H.263 / H.263i, H.264 / MPEG-4 AVC, Cinepak, Theora, Dirac / VC-2, MJPEG (A/B), WMV 1/2, WMV 3 / WMV-9 / VC-1, Sorenson 1/3, DV, On2 VP3/VP5/VP6, Indeo Video v3 (IV32), Real Video (1/2/3/4).

MPEG Layer 1/2, MP3 - MPEG Layer 3, AAC - MPEG-4 part3, Vorbis, AC3 - A/52, E-AC-3, MLP / TrueHD>3, DTS, WMA 1/2, WMA 3, FLAC, ALAC, Speex, Musepack / MPC, ATRAC 3, Wavpack, Mod, TrueAudio, APE, Real Audio, Alaw/µlaw, AMR (3GPP), MIDI, LPCM, ADPCM, QCELP, DV Audio, QDM2/QDMC, MACE.

DVD, Text files (MicroDVD, SubRIP, SubViewer, SSA1-5, SAMI, VPlayer), Closed captions, Vobsub, Universal Subtitle Format (USF), SVCD / CVD, DVB, OGM, CMML, Kate.

ID3 tags, APEv2, Vorbis comment.

Advanced formats

 Input Media

UDP/RTP Unicast, UDP/RTP Multicast, HTTP / FTP, MMS, TCP/RTP Unicast, DCCP/RTP Unicast, File, DVD Video, Video CD / VCD, SVCD, Audio CD (no DTS-CD), DVB (Satellite, Digital TV, Cable TV), MPEG encoder, Video acquisition.

 Input Formats

MPEG (ES,PS,TS,PVA,MP3), AVI, ASF / WMV / WMA, MP4 / MOV / 3GP, OGG / OGM / Annodex, Matroska (MKV), Real, WAV (including DTS), Raw Audio: DTS, AAC, AC3/A52, Raw DV, FLAC, FLV (Flash), MXF, Nut, Standard MIDI / SMF, Creative™ Voice.

 Miscellaneous

SAP/SDP announces, Bonjour protocol, Mozilla/Firefox plugin, ActiveX plugin, SVCD Menus, Localization, CD-Text, CDDB CD info, IGMPv3, IPv6, MLDv2, CPU acceleration.

SmartPlayer

SmartPlayer是大牛直播SDK(Github)開發的全自研跨平台(windows/android/iOS)流媒體核心,支援RTSP、RTMP,功能齊全、高穩定、超低延遲,超低資源占用,适用于安防、教育、單兵指揮等行業。如不單獨說明,系Windows、Android、iOS全平台支援。

  •  [支援播放協定]RTSP、RTMP;
  •  [多執行個體播放]支援多執行個體播放;
  •  [事件回調]支援網絡狀态、buffer狀态等回調;
  •  [視訊格式]支援H.265、H.264,此外,還支援RTSP MJPEG播放;
  •  [音頻格式]支援AAC/PCMA/PCMU;
  •  [H.264/H.265軟解碼]支援H.264/H.265軟解;
  •  [H.264硬解碼]Windows/Android/iOS支援特定機型H.264硬解;
  •  [H.265硬解]Windows/Android/iOS支援特定機型H.265硬解;
  •  [H.264/H.265硬解碼]Android支援設定Surface模式硬解和普通模式硬解碼;
  •  [RTSP模式設定]支援RTSP TCP/UDP模式設定;
  •  [RTSP TCP/UDP自動切換]支援RTSP TCP、UDP模式自動切換;
  •  [RTSP逾時設定]支援RTSP逾時時間設定,機關:秒;
  •  [RTSP 401認證處理]支援上報RTSP 401事件,如URL攜帶鑒權資訊,會自動處理;
  •  [緩沖時間設定]支援buffer time設定;
  •  [首屏秒開]支援首屏秒開模式;
  •  [複雜網絡處理]支援斷網重連等各種網絡環境自動适配;
  •  [快速切換URL]支援播放過程中,快速切換其他URL,内容切換更快;
  •  [音視訊多種render機制]Android平台,視訊:surfaceview/OpenGL ES,音頻:AudioTrack/OpenSL ES;
  •  [實時靜音]支援播放過程中,實時靜音/取消靜音;
  •  [實時音量調節]支援播放過程中實時調節音量;
  •  [實時快照]支援播放過程中截取目前播放畫面;
  •  [隻播關鍵幀]Windows平台支援實時設定是否隻播放關鍵幀;
  •  [渲染角度]支援0°,90°,180°和270°四個視訊畫面渲染角度設定;
  •  [渲染鏡像]支援水準反轉、垂直反轉模式設定;
  •  [等比例縮放]支援圖像等比例縮放繪制(Android設定surface模式硬解模式不支援);
  •  [實時下載下傳速度更新]支援目前下載下傳速度實時回調(支援設定回調時間間隔);
  •  [解碼前視訊資料回調]支援H.264/H.265資料回調;
  •  [解碼後視訊資料回調]支援解碼後YUV/RGB資料回調;
  •  [解碼前音頻資料回調]支援AAC/PCMA/PCMU資料回調;
  •  [音視訊自适應]支援播放過程中,音視訊資訊改變後自适應;
  •  [擴充錄像功能]支援和錄像SDK組合使用。

ExoPlayer

ExoPlayer 是google推出的開源播放器,主要是內建了Android 提供的一套解碼系統來解析視訊和音頻,将MediaCodec封裝地非常完善,形成了一個性能優越,播放穩定性較好的一個開發播放器。

ExoPlayer is an application level media player for Android. It provides an alternative to Android’s MediaPlayer API for playing audio and video both locally and over the Internet. ExoPlayer supports features not currently supported by Android’s MediaPlayer API, including DASH and SmoothStreaming adaptive playbacks. Unlike the MediaPlayer API, ExoPlayer is easy to customize and extend, and can be updated through Play Store application updates.

Documentation

  • The developer guide provides a wealth of information to help you get started.
  • The class reference documents the ExoPlayer library classes.
  • The release notes document the major changes in each release.

Using ExoPlayer

Via jCenter

The easiest way to get started using ExoPlayer is by including the following in your project's 

build.gradle

 file:

compile 'com.google.android.exoplayer:exoplayer:rX.X.X'      

where 

rX.X.X

 is the your preferred version. For the latest version, see the project's Releases. For more details, see the project on Bintray.

As source

ExoPlayer can also be built from source using Gradle. You can include it as a dependent project like so:

// settings.gradle
include ':app', ':..:ExoPlayer:library'

// app/build.gradle
dependencies {
    compile project(':..:ExoPlayer:library')
}      

As a jar

If you want to use ExoPlayer as a jar, run:

./gradlew jarRelease      

and copy 

library.jar

 to the libs folder of your new project.

總結

ijkplayer結構比較相對比較清晰,可擴充性較差,基本上沒有提供modules供開發者二次開發,官方更新比較慢,值得欣慰的是,好多開發者基于ijkplayer做了擴充,填了非常多的坑,往上資料非常多;

VLC對點播的支援比較好,但是工程龐大,接入或二次開發難度比較大;

SmartPlayer對RTSP和RTMP直播播放支援非常優秀,毫秒級延遲,穩定性比較好;

ExoPlayer不太适合直播,視訊解碼無法接入軟解,可擴充性一般,而且隻支援Android平台。