iOS視頻開發(fā)經(jīng)驗

iOS視頻開發(fā)經(jīng)驗

手機比PC的優(yōu)勢除了便攜外吏恭,我認為最重要的就是可以快速方便的創(chuàng)作多媒體作品。照片分享呼盆,語音輸入平绩,視頻錄制,地理位置叹括。一個成功的手機APP從產(chǎn)品形態(tài)上都有這其中的一項或多項厢漩,比如instagram,微信焙压。如果把Web2.0的交互體驗照搬到手機上就是死路一條。 當智能手機遇上視頻就像潘金蓮遇上西門慶幻件,各取所需一拍即合篱蝇,想不發(fā)生點事情都難。他們的結(jié)晶就是微視頻稚虎。微視頻可以說把手機的視頻錄制和碎片時間兩個特點發(fā)揮到了極致兜喻,視頻相關(guān)的APP現(xiàn)在無溫不火的原因我認為跟坑爹的運營商有關(guān)们衙。雖然現(xiàn)在移動網(wǎng)絡流量小速度慢,但是不妨礙我們先把技術(shù)積累做起來碱呼。

這篇文章主要介紹本人在iOS視頻開發(fā)中的一點經(jīng)驗蒙挑。
視頻實質(zhì):

純粹的視頻(不包括音頻)實質(zhì)上就是一組幀圖片,經(jīng)過視頻編碼成為視頻(video)文件再把音頻(audio)文件有些還有字幕文件組裝在一起成為我們看到的視頻(movie)文件愚臀。1秒內(nèi)出現(xiàn)的圖片數(shù)就是幀率忆蚀,圖片間隔越小畫面就越流暢,所以幀率越高效果就越好姑裂,需要的存儲空間也就越多馋袜。
視頻編碼:

因為不進行編碼的視頻數(shù)據(jù)量非常大,會造成存儲和傳輸上的困難炭分,所以視頻文件都需要在錄制完成后進行編碼桃焕。視頻編碼主要從兩個維度壓縮數(shù)據(jù)。

1捧毛、單張圖像某一區(qū)域相鄰像素相似,比如一片紅色只記錄紅色色值和區(qū)域让网,不用記錄這個區(qū)域的每一個像素點呀忧。
2、相鄰圖像之間內(nèi)容相似溃睹,因為相鄰兩幀要制造連續(xù)的效果而账,所以兩幀之間的內(nèi)容一般非常接近。目前主流的視頻編碼技術(shù)都是用圖像編碼方法對第一幀進行編碼因篇,然后用某種方式描述接下來的幀相對于附近的幀有什么區(qū)別泞辐。

視頻格式:

MP4、MOV竞滓、AVI咐吼、RMVB這些播放格式其實都是封裝格式,除了RMVB比較特殊外商佑,其他格式內(nèi)封裝的視頻編碼格式都是H264锯茄,H264以高壓縮率聞名于世,壓縮效率比MEPG-2提升一倍多茶没,但是世上沒有兩全其美的事肌幽,H264的解碼難度提高了3倍多。
視頻碼率:

視頻文件的大小除以是視頻的時長定義為碼率抓半。

碼率和分辨率跟視頻質(zhì)量的關(guān)系:

碼率可以理解為取樣率喂急,單位時間內(nèi)取樣率越大,精度就越高笛求,同時體積也越大廊移。
當視頻沒有經(jīng)過編碼時讥蔽,如果分辨率越高,那么視頻圖像的細節(jié)越清晰画机。
但如果視頻經(jīng)過編碼冶伞,被限制在一定碼率內(nèi),編碼器就必須舍棄掉一部分細節(jié)步氏。
所以分辨率和碼率都同清晰度有關(guān)响禽。

軟解碼和硬解碼:

對H264的視頻解碼給CPU造成了很大負擔,所以手機工程師把這部分工作交給了更善于進行處理簡單工作但是數(shù)據(jù)量較大的GPU荚醒。

GPU解碼就是所謂的硬解碼
CPU解碼就是軟解碼芋类。
iOS提供的播放器類使用的是硬解碼,所以視頻播放對CPU不會有很大的壓力界阁,但是支持的播放格式比較單一侯繁,一般就是MP4、MOV泡躯、M4V這幾個贮竟。

HTTP Live Streaming

HLS簡介

HTTP Live Streaming(縮寫是 HLS)是一個由蘋果公司提出的基于HTTP的流媒體網(wǎng)絡傳輸協(xié)議。它的工作原理是把整個流分成一個個小的基于HTTP的文件來下載较剃,每次只下載一些咕别。當媒體流正在播放時,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源写穴,允許流媒體會話適應不同的數(shù)據(jù)速率惰拱。支持的視頻流編碼為H.264。我們在視頻網(wǎng)站上看到的M3U8后綴的播放鏈接就是使用HLS協(xié)議的視頻啊送。

HLS優(yōu)點

1偿短、看完一段緩存一段,防止只看一段視頻但是把整個視頻文件都緩存下來的用戶馋没,減少服務器壓力和節(jié)省流量昔逗。
2、根據(jù)用戶網(wǎng)速切換不同的碼率披泪,兼顧流程性和清晰度纤子。

HLS支持情況

iOS 3.0及之后的版本
Android 3.0及之后的版本
HTML5。

終端播放格式的選取

Android由于3.0之后才支持HLS款票,所以Android2.3只能用MP4控硼。
Android3.0及之后支持HLS“伲可以用m3u8卡乾、mp4格式
iOS支持HLS,但不支持flash缚够♂7粒可以用m3u8鹦赎、mp4格式
支持HTML5的瀏覽器 可以用m3u8。
不支持HTML5的瀏覽器只能用flash播放swf误堡。

由于以上原因古话,目前無法實現(xiàn)一個播放地址在所有的平臺都通用。
iOS視頻播放:

iOS提供MPMoviePlayerController類進行播放锁施,支持流媒體和文件播放陪踩。視頻內(nèi)容會渲染到他的View上,可以放在你想放的任何地方悉抵,用起來比較方便肩狂。這個類設計上不合理的是視頻播放狀態(tài)和視頻加載狀態(tài)都是通過Notification通知的,而不是通過block或者delegate姥饰。
iOS視頻錄制:

同拍照一樣視頻錄制功能有兩種實現(xiàn)方式

1傻谁、UIImagePickerViewController
2、AVFoundation列粪。

這里只討論AVFoundation框架审磁,這個框架是蘋果提供的底層多媒體框架,用于音視頻采集篱竭、音視頻解碼力图、視頻編輯等,多媒體基本上都依賴AVFoundation框架掺逼。

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

1瓤介、創(chuàng)建會話AVCaptureSession吕喘,用于控制input到output的流向。
2刑桑、獲取設備AVCaptureDevice氯质,攝像頭用于視頻采集,話筒用于音頻采集祠斧。
3闻察、創(chuàng)建輸入設備AVCaptureDeviceInput,將設備綁定到input口中琢锋,并添加到session上
4辕漂、創(chuàng)建輸出AVCaptureOutput,可以輸出到文件和屏幕上吴超。 AVCaptureMovieFileOutput 輸出一個電影文件 AVCaptureVideoDataOutput 輸出處理視頻幀钉嘹,用于顯示正在錄制的視頻 AVCaptureAudioDataOutput 輸出音頻數(shù)據(jù)
5、音視頻合成到一個文件中

iOS對視頻實時處理:

如果需要對視頻進行實時處理(當然需要否則看不到正在錄制的內(nèi)容)鲸阻,則需要直接對相機緩沖區(qū)(camera buffer)中的視頻流進行處理跋涣。

1缨睡、定義一個視頻數(shù)據(jù)輸出(AVCaptureVideoDataOutput), 并將其添加到session上。
2陈辱、設置接受的controller作為視頻數(shù)據(jù)輸出緩沖區(qū)(sample buffer)的代理奖年。
3、實現(xiàn)代理方法
-(void)captureOutput:(AVCaptureOutput )captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection )connection
當數(shù)據(jù)緩沖區(qū)(data buffer)一有數(shù)據(jù)時沛贪,AVFoundation就調(diào)用該方法陋守。在該代理方法中,我們可以獲取視頻幀鹏浅、處理視頻幀嗅义、顯示視頻幀。實時濾鏡就是在這里進行處理的隐砸。在這個方法中將緩沖區(qū)中的視頻數(shù)據(jù)(就是幀圖片)輸出到要顯示的layer上之碗。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市季希,隨后出現(xiàn)的幾起案子褪那,更是在濱河造成了極大的恐慌,老刑警劉巖式塌,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件博敬,死亡現(xiàn)場離奇詭異,居然都是意外死亡峰尝,警方通過查閱死者的電腦和手機偏窝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來武学,“玉大人祭往,你說我怎么就攤上這事』鹬希” “怎么了硼补?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長熏矿。 經(jīng)常有香客問我已骇,道長,這世上最難降的妖魔是什么票编? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任褪储,我火速辦了婚禮,結(jié)果婚禮上栏妖,老公的妹妹穿的比我還像新娘乱豆。我一直安慰自己,他們只是感情好吊趾,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布宛裕。 她就那樣靜靜地躺著瑟啃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揩尸。 梳的紋絲不亂的頭發(fā)上蛹屿,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音岩榆,去河邊找鬼错负。 笑死,一個胖子當著我的面吹牛勇边,可吹牛的內(nèi)容都是我干的犹撒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼粒褒,長吁一口氣:“原來是場噩夢啊……” “哼识颊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奕坟,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤祥款,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后月杉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刃跛,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年苛萎,在試婚紗的時候發(fā)現(xiàn)自己被綠了桨昙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡腌歉,死狀恐怖绊率,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情究履,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布脸狸,位于F島的核電站最仑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炊甲。R本人自食惡果不足惜泥彤,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卿啡。 院中可真熱鬧吟吝,春花似錦、人聲如沸颈娜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛹磺,卻和暖如春粟瞬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背萤捆。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工裙品, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俗或。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓市怎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辛慰。 傳聞我的和親對象是個殘疾皇子区匠,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容