老是在網上看別人的博文,受益不淺,從沒本身寫過,今天分享一點小經驗,第一次寫技術博客,但願對同行的ios猿們有所幫助。
先介紹一下本身的狀況:一年ios開發,http協議不太懂,大約知道斷點下載http請求頭裏的幾個字段什麼做用。(因此比我基礎好的童鞋能夠儘管放心的看我這篇博文)
直接切入主題,要實現的功能是:
一、ios視頻音頻邊緩存邊播放,緩存時能夠在已下載的部分拖拽進度條。
二、緩存到一半退出,再次播放同一地址的視頻時,視頻繼續下載,而且緩存進度已經走到上一次下載的位置。
三、不管是下載到一半退出仍是下載完退出,已緩存的數據都存到本身指定的一個路徑。若是已下載完,下次播放時能夠再也不走網絡,直接播放本地文件。
四、一個有總時間,緩衝進度,播放進度的sliderbar。
(具體效果看唱吧4.1版本之後的視頻效果吧)
用到的幾個類:
一、ASIHttpRequest
二、MPMoviePlayerController
三、HTTPServer(https://github.com/robbiehanson/CocoaHTTPServer)
靈感來源是這篇文章, http://hi.baidu.com/suifeng_89/item/603cb0b95bb796ff62388e88
實現步驟:
一、先開一個request去下載要播放的視頻文件
二、在本地開一個http server,拼一個本地地址(http://127.0.0.1:xxxx/xxx.mp4),丟給MPMoviePlayerController播放。
三、本地的server當收到請求時去那個正在下載的文件中讀數據便可。
斷點下載全由ASIHttpRequest實現了,緩衝的效果用的是MPMoviePlayerController的,它自帶了總時間,已緩衝的總時間,當前時間,整個播放的過程就用MPMoviePlayerController。sliderbar是本身寫的,由於iOS自帶的不支持緩衝進度,例子:(https://github.com/Zedenem/UICircularSlider),把圓的改爲長長的不難吧。。
本身曾嘗試過在iOS上用socket server實現本地服務器,各類失敗。後來查到MPMoviePlayerController的請求機制是基於http斷點下載那一套邏輯的,不像android的socket。HTTPServer已經支持各類斷點下載上傳。
只是有一點須要本身實現:當httpserver接受到MPMoviePlayerController的請求時,server要先返回一個請求包含了整個視頻文件的大小。而後MPMoviePlayerController纔會不斷請求本地的服務器取數據。個人實現是這樣的。當要比方某個視頻文件的時候,先開啓一個request去下載,當收到文件總大小的時候,存到本地的一個dictionary中,request繼續下載,而後打開localserver,拼一個本地url給player,讓他自動播放。當localserver收到請求時,根據要請求的文件去本地讀文件的實際大小,返回給player,而後player就能夠播放了。
HTTPServer本身已經實現了斷點下載的邏輯,你能夠給他設置一個DocumentRoot,進來的文件請求會直接到這個目錄下讀文件的數據,他默認的實現得到文件總大小的邏輯是直接用NSFileManager去取文件的總大小,而這裏咱們須要去本身存到本地的dictionary中讀。
大約思路就是這樣,不想寫太多東西,由於實際本身寫的代碼真的不多。仍是留個思路,真正的實現由你們本身研究,總之實現起來挺簡單的,最終效果也很好,你們各類放心就行了。
後面遇到了幾個問題小說一下
一、HTTPServer不支持iOS4,好像是用到了一個gcd相關的函數不支持,由於目前咱們ios4的用戶比較少了,ios7都出來了,就直接把ios4的用戶拋棄了,這裏也沒有深究。
二、MPMoviePlayerController是直接能夠播放mp3的,由於咱們還須要播放音頻,並且是同一個頁面,若是全用MPMoviePlayerController是最好的,由於不須要切換播放器,雖然看起來有點拙。但後來發現點問題,就是播放音頻的時候,有的mp3不能拖拽,當你更改音頻的播放時間的時候,MPMoviePlayerController直接中止了,但有的音頻是能夠的,最後研究好像是mp3碼率或者格式的問題,由於咱們已經有不少mp3了,再替換以前的mp3不太現實,最後的實現就是音頻用avplayer播,緩衝進度用MPMoviePlayerController的,你能夠想象代碼寫的多麼髒。。若是你們只作視頻或者剛開始作的話,最好把這個問題研究一下,這裏我也沒有深究。
好了就到這裏,總之實現起來比較簡單,以前在android上就據說過這樣的實現,只是沒有發現ios上能直接播網絡音頻的播放器,網上的demo也比較少,因此當本身研究出來的時候就比較迫切的給你們分享出來。但願能給你們帶來幫助,也但願會有更好的實現方案出來。有問題給我留言或@個人微博~
題外話,若是我在這裏說「我喜歡葛曉倩」是否是有點不厚道,哈哈,最近想追一個女孩,但本身的表現有點拙,爲本身攢點人品,努力~加油!!你們加油!!!
qq:84056724 原本只是想分享一下經驗,不常常上博客園,有感興趣的童鞋能夠加我qq
另外修正以上幾個問題,HTTPServer只是用到了幾個ios4不支持的函數,注掉就能夠了,運行木有問題。MPMoviePlayerController播放mp3的問題一直沒解,後來咱們播放mp3就用的avplayer,只是找到了得到音頻總長度的方法,因此音頻的播放仍是能夠有緩衝進度的。最近確實沒時間作demo,等作出來給你們分享一下。 2013-9-17
由於一直很忙,沒有時間作demo,這裏有一童鞋寫的代碼,能夠先研究一下,歡迎加好友交流
http://code4app.com/ios/5292c381cb7e8445678b5ac2
2014-2-19
捎帶招聘信息一枚:
唱吧招聘:資深iOS、Android工程師,或者是你都不知道本身是隻神馬工程師但自認是個牛B工程師的工程師。高檔寫字樓,大波美女同事,按期東莞出差,以上這些咱們都沒有,你有的只是參與到一個改變身邊產業的賭博(信不信由你,歡迎當面辯論)和也就那麼回事兒不管如何想用工資湊夠買房首付也是癡心妄想但湊或還個月供還能勉強吃上饅頭鹹菜的待遇。簡歷投到zhouguixin#changba.com,推薦自薦成功送5s,歡迎轉發