1. 程式人生 > >最優秀的開源庫之GPUImage

最優秀的開源庫之GPUImage

效果圖

前言

近期想了解一下 IOS 下是如何進行音視訊採集和渲染的。在學習一門新的知識時,很多人都有自己的學習方法,有的是買書學習,有的是看論壇等等不一而終。我的學習習慣是直接找一個比較好的開源專案,去分析它的程式碼。這樣即可以瞭解到新的知識,又可以知道該如何編寫正確的程式碼。自己的一點小心得哈。

言歸正轉,我們都知道對於視訊的採集,IOS提供了 AVFoundtion 庫,這個庫非常強大,可以做很多事情。但如果我們要對裡邊的每個函式都仔細的過一遍的話還是要花不少時間的,而且還可能有很多坑在等著我們。是否有這方面比較好的開源庫呢?這樣我們不就輕鬆的跳過了這些坑了嗎?於是我發現了GPUImage庫。

GPUImage在github上有16304個星,哇,能有幾百個星就已經很了不起了,它居然能有上萬的星,可見它人氣是非常旺的。下面我們來看看 GPUImage 都能幹些什麼吧。

GPUImage

GPUImage是一個BSD許可的IOS庫,它使用GPU加速對影象,實時視訊和電影做美顏,灰度等各種特效。在大規模並行運算處理影象或實時視訊時,GPU相對於CPU有顯著的效能優勢。在iPhone4上,一個簡單的影象過濾器在GPU上執行的速度比CPU的過濾器快100倍以上。然而,在GPU上執行自定義過濾器需要大量處理OpenGL ES相關的程式碼。而GPUImage幫我們解決了這些問題,它對 OpengGL ES做了非常好的封裝,我們只要呼叫簡單的幾個介面就可以做出各種特效來。

GPUImage總體結構

GPUImage使用OpenGL ES 2著色器進行影象和視訊處理速度遠遠超過基於CPU程式做的。而且它提供了簡化的Objective-C介面,隱藏了OpenGL複雜的互動。這個介面允許您將影象和視訊作為輸入源,經過過濾器,最後得到處理的影象或視訊的畫面。

影象或視訊幀可以通過GPUImageVideoCamera、GPUImageStillCamera、GPUImagePicture及GPUImageMovie類獲得。

  1. GPUImageVideoCamera: 從Camera獲取的實時視訊。
  2. GPUImageStillCamera: 從Camera獲取到的圖片。
  3. GPUImagePicture: 靜態圖片。
  4. GPUImageMovie: 電影

圖片或幀上傳到OpengGL ES後做為紋理,然後將這些紋理傳遞給處理鏈中的下一個物件。

例如,一個應用程式,從Camera獲取視訊,轉換視訊到深褐色調,然後顯示視訊到螢幕上。將建立一個鏈,看起來像下面這樣子:

GPUImageVideoCamera -> GPUImageSepiaFilter -> GPUImageView

效果對比圖

依賴庫

GPUImage依賴下面的幾個庫:

CoreMedia: AVFoundation常用的功能。
CoreVideo: OpenGL ES 使用的視訊基礎庫。
OpenGLES: 用於影象渲染。
AVFoundation: 音視訊基礎庫。
QuartzCore: 用於渲染、組合和動畫視覺元素。

小結

本篇文章是對GPUImage的一個簡單的介紹。後面我會對GPUImage做進一步的分析,請大家繼續觀注

謝謝!

相關推薦

優秀開源GPUImage

前言 近期想了解一下 IOS 下是如何進行音視訊採集和渲染的。在學習一門新的知識時,很多人都有自己的學習方法,有的是買書學習,有的是看論壇等等不一而終。我的學習習慣是直接找一個比較好的開源專案,去分析它的程式碼。這樣即可以瞭解到新的知識,又可以知道該如

優秀開源SDWebImage原始碼淺析

世人都說閱讀原始碼對於功力的提升是十分顯著的, 但是很多的著名開源框架原始碼動輒上萬行, 複雜度實在太高, 這裡只做基礎的分析。 簡潔的介面 首先來介紹一下這個 SDWebImage 這個著名開源框架吧, 這個開源框架的主要作用就是: Asynchronous image downloader w

開源EventBus使用詳解

簡介 EventBus是一種用於Android的釋出/訂閱事件匯流排。簡化了應用程式內各元件間、元件與後臺執行緒間的通訊。常用於Activity、Fragment和後臺Service之間通訊、傳

定製開源jar包和.so的引用

定製開源庫很多時候只是程式碼的開源,這次的要求是把jar包和.so檔案都放到庫裡,中間的過程還是有點曲折的。 首先我找到的是: 優雅的釋出Android開源庫(論JitPack的優越性) 本來我是按照這

C++跨平臺開源

本篇文章主要介紹了”C++開源庫集合 “,主要涉及到C++開源庫集合 方面的內容,對於C++開源庫集合 感興趣的同學可以參考一下。 mimetic A free/GPL C++ MIME Library mimetic is a free/GPL Email library (MIME) w

C++跨平臺開源

值得學習的C/C++語言開源專案 (1)ACE 龐大、複雜,適合大型專案。開源、免費,不依賴第三方庫,支援跨平臺。 (2)Asio Asio基於Boost開發的非同步IO庫,封裝了Socket,簡化基於socket程式的開發。 開源、免費,支援跨平臺。 (3)POCO POCO C++ Libr

Android開源使用ZXing開源生成二維碼及識別本地二維碼圖片

/** * 解析二維碼(使用解析RGB編碼資料的方式) * * @param path * @return */ public static Result decodeBarcodeRGB(String path) { if (Text

Android 網路開源Retrofit

    當前的網路開源庫有許多,如volley,okhttp,retrofit等,這三個庫當前是比較火的,其中,okhttp和retrofit由square團隊開發。關於這三個庫的區別,請移步stackoverflow或者知乎檢視。開發過程中選擇什麼樣的開源庫需要更具

[Golang]優秀開源剖析

原創文章,轉載請註明出處:伺服器非業餘研究http://blog.csdn.net/erlib 作者Sunface1.blelve地址:https://github.com/blevesearch/bl

Android史上簡單有用的第三方開源收集整理

Android開源庫 自己一直很喜歡Android開發,就如部落格簽名一樣, 我是程式猿,我為自己代言 。 在摸索過程中,GitHub上搜集了很多很棒的Android第三方庫,推薦給在苦苦尋找的開發者,而且我會 不定期的更新 這篇文章。 Android下的優秀開發庫數不勝數,在本文中,我列舉的多是

開源框架】Android史上簡單有用的第三方開源收集整理,有助於快速開發,歡迎各位網友補充完善

Android開源庫 自己一直很喜歡Android開發,就如部落格簽名一樣, 我是程式猿,我為自己代言 。 在摸索過程中,GitHub上搜集了很多很棒的Android第三方庫,推薦給在苦苦尋找的開發者,而且我會 不定期的更新 這篇文章。 Android下的優秀

[轉]【開源框架】Android史上簡單有用的第三方開源收集整理,有助於快速開發

原文地址:http://www.tuicool.com/articles/jyA3MrU Android開源庫 自己一直很喜歡Android開發,就如部落格簽名一樣, 我是程式猿,我為自己代言 。 在摸索過程中,GitHub上搜集了很多很棒的Android第三方庫

開源框架】Android史上簡單有用的第三方開源收集整理

Android開源庫 自己一直很喜歡Android開發,就如部落格簽名一樣, 我是程式猿,我為自己代言。 在摸索過程中,GitHub上搜集了很多很棒的Android第三方庫,推薦給在苦苦尋找的開發者,而且我會不定期的更新這篇文章。 Android下的優秀開發庫數不

DICOM:DICOM開源多線程分析“ThreadPoolQueue in fo-dicom”

lower win man 例如 fec called sof current 資源下載 背景: 上篇博文介紹了dcm4chee中使用的Leader/Follower線程池模型。主要目的是節省上下文切換,提高運行效率。本博文同屬【DICOM開源庫多線程

全的Java筆試題選擇題篇-總共234道【181~234】

abc 出現 最全的 context nav oschina 服務器 可行性 配置管理 181.下列沒有直接采用XML技術的是( ) A. UDDI B. SOAP C. AJAX D.DCOM 解答:D DCOM(分布式組件對象模型,分布式組件對象模式)是一系列微軟的概念

5個優秀的微信小程式UI元件

開發微信小程式的過程中,選擇一款好用的元件庫,可以達到事半功倍的效果。自從微信小程式面世以來,不斷有一些開源元件庫出來,下面5款就是排名比較靠前,使用者使用量與關注度比較高的小程式UI元件庫。還沒用到它們的你,可以關注和了解一下哦! WeUI WXSS WeUI WXSS是騰訊官方UI元件庫

安卓專案實戰Gif圖片載入的最佳實踐android-gif-drawable開源的使用

前言 在平時的專案開發中,我們或多或少會遇到載入gif圖片這樣的需求,但是Android的ImageView又無法直接載入Gif圖片,面對這樣的需求我們一般都會想到使用支援載入gif動圖的Glide第三方庫來進行實現,但是使用過程中發現Glide在載入大的gif

一文應用 AOP | 全選型考量 + 邊剖析經典開源邊實踐,美滋滋

前言 繁多的 AOP 方法該如何選擇?應用的步驟過於繁瑣,語法概念看得頭暈腦脹? 本文將詳細展示選型種種考量維度,更是砍掉 2 個經典開源庫的枝節,取其主幹細細體會 AOP 的應用思想和關鍵流程。一邊實踐 AOP 一邊還能掌握開源庫,豈不快哉! 一、6 個要點幫你選擇合適的 AOP 方

翻翻git---實用的歡迎頁開源 AppIntro

今天沒有P1,直接進入正題 今天上的是一個帥帥的app滑動介紹頁 。為什麼說帥? 作者對自己的內容是這麼定義的 Make a cool intro for your Android app. 那我們來看看是怎麼個效果 那麼除了滑動還可

常用的 Swift 開源

關於我們 SwiftOldDriver 是剛剛成立的一個 Swift 開發者聚賢地,這個名字意為中文的老司機,沒錯,老司機這就來帶你了。歡迎廣大 Swift 開發者一起前來學習交流。 微博 @SwiftOldDriver ; 微信公眾號 SwiftOldDriver