一、各播放器簡(jiǎn)述
1、ExoPlayer
ExoPlayer 是 Google 推出的開源播放器,主要是集成了Android 提供的一套解碼系統(tǒng)來解析視頻和音頻,將 MediaCodec 封裝地非常完善,并加入了對(duì) DASH 和 HLS 等直播協(xié)議的支持,形成了一個(gè)性能優(yōu)越,播放穩(wěn)定性較好的一個(gè)開發(fā)播放器。
Github : https://github.com/google/ExoPlayer
star | fork | issue |
---|---|---|
20.5k | 5.9k | 723 |
跨平臺(tái)特性:只支持 Android
優(yōu)點(diǎn):
- 接入包體積小,1.1M
- 護(hù)團(tuán)隊(duì)強(qiáng)大,更新速度快
缺點(diǎn):
- 不跨平臺(tái),不太適合直播
- 可擴(kuò)展性一般,視頻軟解接入較麻煩
- 適合播放場(chǎng)景簡(jiǎn)單的項(xiàng)目,播放過程中無切換碼流的情況
2、ijkplayer
ijkplayer 是 Bilibili 公司開源的播放器,基于 FFmpeg 開發(fā), 支持 Android 的 MediaCodec、iOS 的 VideoToolBox 硬解碼,可以實(shí)現(xiàn)軟硬解碼自由切換,同時(shí)得益于 FFmpeg 的能力,也能支持多種流媒體協(xié)議,多種音視頻編碼格式,具有很高的靈活性,可以定制實(shí)現(xiàn)自己特色的播放器。
Github : https://github.com/bilibili/ijkplayer
star | fork | issue |
---|---|---|
31.2k | 8k | 2.7k |
跨平臺(tái)特性:跨平臺(tái),支持 Android/iOS
優(yōu)點(diǎn):
- 結(jié)構(gòu)比較簡(jiǎn)單,基本以 ffplay 展開,入手相對(duì)簡(jiǎn)單
- 包體積比 VLC 小
- 應(yīng)用比較廣泛, issue 和資料比較豐富
缺點(diǎn):
- 可擴(kuò)展性較差,基本上沒有提供 modules 供開發(fā)者二次開發(fā)
- 官方目前基本不維護(hù),不更新
3、VLC
VLC 是 VideoLAN 計(jì)劃所研發(fā)的工程,最早于 1996 年開始,是一個(gè)完全的跨平臺(tái)播放器。VLC 的整體框架是設(shè)計(jì)成一套 module 的管理機(jī)制,將功能分類并抽象成 modules。
Github : https://github.com/videolan/vlc
star | fork | issue |
---|---|---|
10.5k | 3.3k | / |
跨平臺(tái)特性:跨平臺(tái),支持 Android/iOS/MacOS/Windows/Linux/BSD/Haiku
優(yōu)點(diǎn):
- 跨平臺(tái),兼容性好
- 功能全面,支持 rtsp、rtmp、ftp、http、https 等協(xié)議
- 代碼完全解耦,modules 相互獨(dú)立,不影響,引入新 modules 方便
- 維護(hù)團(tuán)隊(duì)強(qiáng)大,更新頻繁
缺點(diǎn):
- Android 平臺(tái)編譯出的包較大,有 16M 左右;
- 在 Android 平臺(tái)上可能存在性能問題,需要優(yōu)化
4、GStreamer
GStreamer 是一個(gè)跨平臺(tái)的多媒體框架,應(yīng)用程序可以通過管道(Pipeline)的方式,將多媒體處理的各個(gè)步驟串聯(lián)起來,達(dá)到預(yù)期的效果。每個(gè)步驟通過元素(Element)基于GObject對(duì)象系統(tǒng)通過插件(plugins)的方式實(shí)現(xiàn),方便了各項(xiàng)功能的擴(kuò)展。
Github :https://github.com/GStreamer/gstreamer
star | fork | issue |
---|---|---|
1.6k | 458 | / |
跨平臺(tái)特性:跨平臺(tái),支持 Android/iOS/Windows/Linux
優(yōu)點(diǎn):
- GStreamer 框架是基于插件的,它的可插入組件能夠很方便的接入到任意的管道當(dāng)中
- 結(jié)構(gòu)清晰,具有靈活的可擴(kuò)展性:所有的 GStreamer 對(duì)象都可以采用 GObject 繼承的方法進(jìn)行擴(kuò)展,所有的插件都可以被動(dòng)態(tài)裝載。
缺點(diǎn):
- 使用起來較為復(fù)雜
- 性能差,包體積較大
5、SmarterPlayer
SmarterPlayer 是大牛直播出品的業(yè)內(nèi)為數(shù)不多致力于極致體驗(yàn)的超強(qiáng)全自研跨平臺(tái)流媒體內(nèi)核,通過模塊化自由組合,支持實(shí)時(shí) RTMP/RTSP 推流、RTMP/RTSP 播放器、錄像、多路流媒體轉(zhuǎn)發(fā)、音視頻導(dǎo)播、動(dòng)態(tài)視頻合成、音頻混音、直播互動(dòng)、內(nèi)置輕量級(jí) RTSP 服務(wù)等,比快更快,業(yè)界真正靠譜的超低延遲直播 SDK(1 秒內(nèi),低延遲模式下 200~400ms)。
Github : https://github.com/daniulive/SmarterStreaming
star | fork | issue |
---|---|---|
1.4k | 2.7k | 5 |
跨平臺(tái)特性:跨平臺(tái),支持 Android/iOS/Windows/Linux
優(yōu)點(diǎn):
- 支持多種常見的流媒體協(xié)議,例如 HLS、RTMP、FLV 等
- 提供了多種播放器皮膚和自定義選項(xiàng)
- 支持 P2P 網(wǎng)絡(luò)協(xié)議,可以實(shí)現(xiàn)點(diǎn)播和直播功能
缺點(diǎn):
- SmartPlayer 是商業(yè)軟件,需要購(gòu)買授權(quán)才能使用
- 在某些特定的硬件和軟件平臺(tái)上可能存在兼容性問題
二、播放器選型結(jié)論
在選型上我個(gè)人比較傾向于選擇 ijkplayer,理由如下:文章來源:http://www.zghlxwxcb.cn/news/detail-482025.html
- ijkplayer 基于 ffmpeg,軟解效果非常好,可以配置想要支持的協(xié)議,項(xiàng)目本身也使用 ffmpeg ,可以復(fù)用,新增的包體積較小
- ijkplayer 移動(dòng)端跨平臺(tái),滿足雙端需求,并且支持 Android 的 MediaCodec、iOS 的 VideoToolBox 硬解碼,可以實(shí)現(xiàn)軟硬解碼自由切換
- ijkplayer 相對(duì)簡(jiǎn)單,資料比較豐富,入手相對(duì)較快
- 針對(duì)官方不更新的問題,長(zhǎng)遠(yuǎn)來看,可以基于 ijkplayer 逐漸演化迭代改造成自己的播放器
不選擇其他的原因:文章來源地址http://www.zghlxwxcb.cn/news/detail-482025.html
- VLC 為了兼容所有的平臺(tái),有些庫(kù)選擇的不是非常合理,導(dǎo)致 Android 平臺(tái)編出來的包很大
- VLC 代碼雖然高度解耦,但是用到了很多不常見的庫(kù),學(xué)習(xí)成本較大
- ExoPlayer 只支持 Android
- GStreamer 使用起來復(fù)雜,包體積大
- SmarterPlayer 需要購(gòu)買授權(quán)
到了這里,關(guān)于移動(dòng)端開源播放器對(duì)比與選型(ExoPlayer/ijkplayer/VLC/GStreamer/SmarterPlayer)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!