你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 淺談iOS視頻播放的N種解決方案

淺談iOS視頻播放的N種解決方案

編輯:IOS開發基礎

原文

791315-353dcf1dd8ccc62c.jpeg

前言

雖然我不同意你的觀點 但我誓死捍衛你說話的權利!--伏爾泰

很長時間沒有寫文章了,這個題目其實我很早就想動筆寫了,因為從我第一個完整的APP項目開始,幾乎每一個APP都有視頻播放的需求,但是我卻遲遲不敢動筆,因為我覺得關於視頻播放的底層技術實現我還是一知半解。但還是寫下了這篇,希望路過的大神可以不吝賜教,也希望和我一樣正在進步的人可以有所收益,少走彎路,看完這篇文章以後可以選擇最適合自己的技術實現方案。

青銅時代

還記得剛學iOS的時候嗎?那個時候驚訝於各種牛逼的功能只需要幾句簡單的代碼就可以完成。視頻播放也是這樣,翻開幾本陳舊的iOS教材,你就可以在目錄裡看到它。沒錯,它就是:

在MediaPlayer框架中,如果你足夠懶,那麼利用MPMoviePlayerViewController你便可以三行代碼完成你的播放功能。然而,抬頭看看各大視頻APP,他們的播放界面是這樣的:

791315-31a06bc9aaa58191.jpg

低頭看看自己的播放器,卻是這樣的:

791315-074264e04aed0d01.png

藝術要求,請勿當真

媽蛋,好Low啊有木有,是可忍孰不可忍!好在Apple官方還給我們提供了一個類MPMoviePlayerController,通過這個類我們可以自定義播放器的UI,在這裡推薦一款由國內工程師開源的基於MPMoviePlayerController播放器KRVideoPlayer,相信小伙伴們的大多數數的需求可以完美的解決。

工業時代

歷史的車輪滾滾向前,永不停歇、

然而MPMoviePlayerController自定義播放器並不是完美的:

  1. MPMoviePlayerController在iOS9被Apple廢棄了;

  2. 當我們的需求需要深度定制播放器的時候,MPMoviePlayerController就顯得力不從心了,比如筆者之前在做一個配音軟件時,需要只播放視頻的畫面,而不需要視頻的聲音,同時還需要開啟音頻的錄制,以及另開一個音頻播放器播放背景音效。這個時候,MPMoviePlayerController哭了。

鑒於的局限性,新的框架應運而生--AVKit。

AVKit是建立在AVFoundation上,解決視頻播放的高級對象。從AVFoundation Programming Guide中我們可以看到這樣一張技術棧示意圖:

791315-aad85e00404ba462.png

如果有人記得AVFoundation剛出那年的WWDC的話,一定對AVFoundation的性能表現印象深刻,同時播放100部視頻而絲毫不卡頓!在筆者的使用過程中也驗證了這一點,無論是對於本地視頻還是網絡在線點播,AVFoundation表現都異常優異。

我們先來看看AVKit的結構:

791315-e4cbbd0d8012969e.png

由於本篇只是起一個“導購”的作用,而且關於AVKit的相關文章文檔多如牛毛因此便不再介紹。下面推薦幾個基於AVKit的第三方視頻框架:

  1. VKVideoPlayer

  2. ALMoviePlayerController

  3. PBJVideoPlayer

後工業時代

然而,凡事總會有一個然而,AVKit也並非完美無瑕,當我們需要播放一些非常規格式的視頻的時候(比如RMVB),AVKit又只能望洋興歎了。

相信Mac用戶都很熟悉一款VLC播放器,這款播放器在Mac上表現異常優異,支持的格式幾乎涵蓋了所有格式(就是這麼屌!)。沒錯,就是它創造者--VideoLAN,開源了一款牛逼的視頻播放框架MobileVLCKit!

我們先來看看它所支持的格式:

    .rmvb .asf .avi .divx .dv .flv .gxf .m1v .m2v .m2ts .m4v .mkv .mov .mp2 .mp4 .mpeg .mpeg1 .mpeg2 .mpeg4 .mpg .mts .mxf .ogg .ogm .ps .ts .vob .wmv .a52 .aac .ac3 .dts .flac .m4a .m4p .mka .mod .mp1 .mp2 .mp3 *.ogg.

是不是很心動呢?那我們就開始吧!

1. 框架編譯

在Show you code之前,我們總需要先有它的庫吧?官方給出了詳細的教程,英文不好?翻牆網速不好?沒關系!這裡有編譯完成的VLC框架,下載下來就好啦!

MobileVLCKit靜態庫下載鏈接

2.項目編譯

MobileVLCKit的靜態庫非常大,解壓下來以後差不多有600+MB,但是編譯之後只有幾M而已,所以放心使用吧。

  1. Linked Frameworks and Libraries中添加下載完成的MobileVLCKit;

  2. 添加依賴框架,MobileVLCKit依賴於以下的框架:

791315-c1badf2a702e5675.png

  1. 修改編譯選項,由於該框架底層由C++所編寫,所以我們需要更改相關的編譯選項;

791315-745a5643b6b6d608.png

  1. 修改Framework Search Paths,否則工程無法找到該框架;

791315-c07821131c515441.png

    PS: "std::ios_base::Init::~Init()", referenced from

    出現這樣的編譯問題,是需要再加進libstdc++.dylib和libstdc++.6.dylib(為6.1使用,xcode5以後默認complier也可以編譯通過)

OK!不錯意外的話,CMD + B編譯成功了!

為了拋磚引玉,獻上我自己基於MobileVLCKit寫的播放器:MRVLCPlayer,本來我只是想做一個Demo的,但是做著做著想做成一個框架,現在還有很多功能沒有完善,但是作為一個Demo應該是夠用了。

791315-c3151dfe38a0e0dd.gif

信息時代

當然啦,如果你懂得一些視頻解碼更專業的知識,你還可以使用ffmpeg和live555,這樣可以更加底層的學習視頻相關的技術。當然啦,博主現在也在學習這方面的知識,在此只是推薦給大家,順便悄悄的說一句,其實MobileVLCKit也是基於ffmpeg二次開發的。

石器時代後記

無論多麼牛逼多麼晦澀難懂的技術,最終的目的都是服務於人。人類從石器時代進化到如今,手中的工具換了一茬又一茬,一味的炫技沒有任何意義,選擇適合自己的工具才是正道。我相信,百分之九十以上的需求,在本文的信息時代之前都能解決,選擇權在你的手中。好了不說了,我要把我旁邊的母猿打暈拖進洞穴了,我們下次見~

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved