天天看點

iOS視訊流開發(1)—視訊基本概念

手機比PC的優勢除了便攜外,她最重要特點就是可以快速友善的創作多媒體作品。照片分享,語音輸入,視訊錄制,地理位置。一個成功的手機APP從産品形态上都有這其中的一項或多項,比如instagram,微信。如果把Web2.0的互動體驗照搬到手機上就是死路一條。

iOS視訊流開發(1)—視訊基本概念

微視訊可以說把手機的視訊錄制和碎片時間兩個特點發揮到了極緻,視訊相關的APP現在無溫不火的原因我認為跟坑爹的營運商有關。雖然現在移動網絡流量小速度慢,但是不妨礙我們先把技術積累做起來。

視訊實質:

純粹的視訊(不包括音頻)實質上就是一組幀圖檔,經過視訊編碼成為視訊(video)檔案再把音頻(audio)檔案有些還有字幕檔案組裝在一起成為我們看到的視訊(movie)檔案。1秒内出現的圖檔數就是幀率,圖檔間隔越小畫面就越流暢,是以幀率越高效果就越好,需要的存儲空間也就越多。

視訊編碼:

因為不進行編碼的視訊資料量非常大,會造成存儲和傳輸上的困難,是以視訊檔案都需要在錄制完成後進行編碼。視訊編碼主要從兩個次元壓縮資料。1、單張圖像某一區域相鄰像素相似,比如一片紅色隻記錄紅色色值和區域,不用記錄這個區域的每一個像素點。2、相鄰圖像之間内容相似,因為相鄰兩幀要制造連續的效果,是以兩幀之間的内容一般非常接近。目前主流的視訊編碼技術都是用圖像編碼方法對第一幀進行編碼,然後用某種方式描述接下來的幀相對于附近的幀有什麼差別。

視訊格式:

MP4、MOV、AVI、RMVB這些播放格式其實都是封裝格式,除了RMVB比較特殊外,其他格式内封裝的視訊編碼格式都是H264,H264以高壓縮率聞名于世,壓縮效率比MEPG-2提升一倍多,但是世上沒有兩全其美的事,H264的解碼難度提高了3倍多。

視訊碼率:

視訊檔案的大小除以是視訊的時長定義為碼率。很多人搞不清楚碼率和分辨率跟視訊品質的關系,包括本人。碼率可以了解為取樣率,機關時間内取樣率越大,精度就越高,同時體積也越大。當視訊沒有經過編碼時,如果分辨率越高,那麼視訊圖像的細節越清晰。但如果視訊經過編碼,被限制在一定碼率内,編碼器就必須舍棄掉一部分細節。是以分辨率和碼率都同清晰度有關。

軟解碼和硬解碼:

對H264的視訊解碼給CPU造成了很大負擔,是以手機工程師把這部分工作交給了更善于進行處理簡單工作但是資料量較大的GPU,GPU解碼就是所謂的硬解碼,CPU解碼就是軟解碼。iOS提供的播放器類使用的是硬解碼,是以視訊播放對CPU不會有很大的壓力,但是支援的播放格式比較單一,一般就是MP4、MOV、M4V這幾個。

HTTP Live Streaming:

HTTP Live Streaming(縮寫是 HLS)是一個由蘋果公司提出的基于HTTP的流媒體網絡傳輸協定。它的工作原理是把整個流分成一個個小的基于HTTP的檔案來下載下傳,每次隻下載下傳一些。當媒體流正在播放時,用戶端可以選擇從許多不同的備用源中以不同的速率下載下傳同樣的資源,允許流媒體會話适應不同的資料速率。支援的視訊流編碼為H.264。我們在視訊網站上看到的M3U8字尾的播放連結就是使用HLS協定的視訊。HLS優點,1、看完一段緩存一段,防止隻看一段視訊但是把整個視訊檔案都緩存下來的使用者,減少伺服器壓力和節省流量。2、根據使用者網速切換不同的碼率,兼顧流程性和清晰度。

HLS支援情況:iOS 3.0及之後的版本,Android 3.0及之後的版本,HTML5。

終端播放格式的選取:

Android由于3.0之後才支援HLS,是以Android2.3隻能用MP4,Android4.0、iOS、HTML5可以用m3u8,而不支援HTML5的浏覽器隻能用flash播放swf,而iOS又不支援flash。由于以上原因,目前無法實作一個播放位址在所有的平台都通用。

iOS視訊播放:

iOS提供MPMoviePlayerController和AVPlayer類進行播放,關于播放開發的相關内容由于篇幅有限将在下一篇文章中展開。iOS視訊流開發(2)—視訊播放

繼續閱讀