iOS M3U8格式視訊的下載以及播放

weixin_33936401發表於2016-12-01

最近的專案中有用到.m3u8檔案的視訊,然後去了解了一下。這裡有篇文章可以感覺寫的很好。

張雲龍 :www.jianshu.com/p/b0db841ed6d3 。裡面有作者寫的Demo

我這裡說下我是用的過程中遇到的一些問題,希望對初學者來說會有幫助。有不對的地方希望大神能夠指出,不勝感激.

1.u3m8地址 : 在ViewController類createPlayer方法中,self.playerUrl是m3u8檔案的地址,正確的地址在Safari中可以直接觀看視訊,Chrome瀏覽器中會下載一個.m3u8的檔案.如果Safari檔案中不能播放,那麼就是檔案出問題了。就不要問為什麼檔案下載下來了但是不能播放,換個m3u8的地址試下.

2.解析: ZYLM3U8Handler類praseUrl方法中,model.locationUrl是解析出來的.ts片段, 可以在這裡打個斷點,然後用 Chrome等瀏覽器開啟,下載你的.m3u8檔案。看裡面是不是對應的,我對.m3u8檔案中的各種欄位意思也不是很瞭解,如果擷取的是xxxx.ts的那一段,基本就是對的.如果不是,就要手動調整了.

3.下載: 解析出來的model.locationUrl段,可能是全部的下載地址,也可能是其中末尾的一部分需要自己拼接,這個很容易看出來,如果是拼接的話,一般就是用model.locationUrlu 中的那一段替換3m8地址中xxx.m3u8(如果後面還有欄位,全部不要, 這個不一定準確,如果有加密什麼的話,要自己去試驗)的這段.      在ZYLVideoDownLoader類startDownloadVideo方法中SegmentDownloader 初始化的時候,會傳入downloadUrl這裡的url是下載的路徑,所以必須要填完整的,如果已經是完整的路徑這裡要做出修改。每個完整的.ts 地址,可以在 Safari中播放相對應的視訊,其中可能會出現有的.ts檔案能夠下載成功,有的下載失敗的情況.可以在(真機除錯)Xcode ->Window ->Devices  選取 Installed Apps下面的APP(回看),然後點選下面的齒輪圖示 選擇 DownLoad Container 下載你專案中的檔案.然後檢視檔案是否齊全或者中間有沒有斷層。

4.打包/播放: 下載後會根據下載的內容重新建立一個自定義名字的.m3u8檔案。裡面的.ts檔案會和你下載的.ts 檔案一一對應,如果開始的不存在(比如沒有id0.ts)那麼不回播放。如果有缺失(比如id3.ts不存在)那麼只會播放前面的幾個檔案,後面的不回繼續播放.ViewController中的self.playerItem 的url 127.0.0.1 是本地路經,埠號使用你本地伺服器中的埠號就行,後面的檔案如果伺服器建立成功,檔案裡面也有資料- - 那麼很可能是你拼接的欄位出錯了。

5.如果只是單純的想下載.m3u8檔案而不會使用到直播,那麼ZYLDecodeTool類中的openDecodeTimer迴圈解碼的定時器可以關掉,同時ZYLVideoDownLoader類中的segmentDownloadFinished方法裡面self.sIndex >3改成self.sIndex > self.playList.segmentArray.count; 直接一次下載解析全部的.ts檔案.

最好是先把張雲龍大神的demo給看完了在看這個,不然根本不知道我寫的什麼鬼。

相關文章