iOS視頻開發

來源:互聯網
上載者:User

標籤:碼率   file   添加   提升   音頻採集   記錄   apt   http   play   

視頻實質:

純粹的視頻(不包括音頻)實質上就是一組幀圖片,經過視頻編碼成為視頻(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

HLS簡介

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。

Android3.0及之後支援HLS。可以用m3u8、mp4格式

iOS支援HLS,但不支援flash。可以用m3u8、mp4格式

支援HTML5的瀏覽器 可以用m3u8。

不支援HTML5的瀏覽器只能用flash播放swf。

由於以上原因,目前無法實現一個播放地址在所有的平台都通用。

iOS視頻播放:

iOS提供MPMoviePlayerController類進行播放,支援流媒體和檔案播放。視頻內容會渲染到他的View上,可以放在你想放的任何地方,用起來比較方便。這個類設計上不合理的是視頻播放狀態和視頻載入狀態都是通過Notification通知的,而不是通過block或者delegate。

iOS視頻錄製:

同拍照一樣視頻錄製功能有兩種實現方式

1、UIImagePickerViewController

2、AVFoundation。

這裡只討論AVFoundation架構,這個架構是蘋果提供的底層多媒體架構,用於音視頻採集、音視頻解碼、視頻編輯等,多媒體基本上都依賴AVFoundation架構。

視頻錄製和拍照需要做的工作差不多,主要有以下5步:

1、建立會話AVCaptureSession,用於控制input到output的流向。

2、擷取裝置AVCaptureDevice,網路攝影機用於視頻採集,話筒用於音頻採集。

3、建立輸入裝置AVCaptureDeviceInput,將裝置綁定到input口中,並添加到session上

4、建立輸出AVCaptureOutput,可以輸出到檔案和螢幕上。 AVCaptureMovieFileOutput 輸出一個電影檔案 AVCaptureVideoDataOutput 輸出處理視訊框架,用於顯示正在錄製的視頻 AVCaptureAudioDataOutput 輸出音頻資料

5、音視頻合成到一個檔案中

iOS對視頻即時處理:

如果需要對視頻進行即時處理(當然需要否則看不到正在錄製的內容),則需要直接對相機緩衝區(camera buffer)中的視頻流進行處理。

1、定義一個視頻資料輸出(AVCaptureVideoDataOutput), 並將其添加到session上。

2、設定接受的controller作為視頻資料輸出緩衝區(sample buffer)的代理。

3、實現代理方法

-(void)captureOutput:(AVCaptureOutput )captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection )connection

當資料緩衝區(data buffer)一有資料時,AVFoundation就調用該方法。在該代理方法中,我們可以擷取視訊框架、處理視訊框架、顯示視訊框架。即時濾鏡就是在這裡進行處理的。在這個方法中將緩衝區中的視頻資料(就是幀圖片)輸出到要顯示的layer上。

 

iOS視頻開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.