編碼和軟編碼的區別
轉載:http://blog.csdn.net/charleslei/article/details/44599041
工作中,經常被問硬編碼、軟編碼怎麼區分的問題,還是對這個問題整理一下吧。
一、軟編碼和硬編碼如何區分
軟編碼:使用CPU進行編碼
硬編碼:使用非CPU進行編碼,如顯示卡GPU、專用的DSP、FPGA、ASIC晶片等
二、軟編碼和硬編碼比較
軟編碼:實現直接、簡單,引數調整方便,升級易,但CPU負載重,效能較硬編碼低,低位元速率下質量通常比硬編碼要好一點。
硬編碼:效能高,低位元速率下通常質量低於硬編碼器,但部分產品在GPU硬體平臺移植了優秀的軟編碼演算法(如X264)的,質量基本等同於軟編碼。
三、目前的主流GPU加速平臺
Intel、AMD、NVIDIA
四、目前主流的GPU平臺開發框架
CUDA:NVIDIA的封閉程式設計框架,通過框架可以呼叫GPU計算資源
AMD APP:AMD為自己的GPU提出的一套通用並行程式設計框架,標準開放,通過在CPU、GPU同時支援OpenCL框架,進行計算力融合。
OpenCL:開放計算語言,為異構平臺編寫程式的該框架,異構平臺可包含CPU、GPU以及其他計算處理器,目標是使相同的運算能支援不同平臺硬體加速。
Inel QuickSync:集成於Intel顯示卡中的專用視訊編解碼模組。
先寫到這,再深入的,讓研發的兄弟們寫吧。
————————————————————————————————————————————————————————————————
Android 實時視訊編碼—H.264硬編碼
1 硬編碼 & 軟編碼
硬編碼:通過呼叫Android系統自帶的Camera錄製視訊,實際上是呼叫了底層的高清編碼硬體模組,也即顯示卡,不使用CPU,速度快
軟編碼:使用CPU進行編碼,如常見C/C++程式碼,一般編譯生成的二進位制都是的,速度相對較慢。例如使用Android NDK編譯H264生成so庫,編寫jni介面,再使用java呼叫so庫。
————————————————————————————————————————————————————————————————
自己的理解:硬編碼 是指不通過cpu處理,直接通過硬體處理,獲得結果資料。 優點:速度快,效率高。 例如:H.264硬編碼軟編碼 是指通過cpu進行編碼,獲得結果資料。
android中的應用方法及各自優缺點:
1,軟編碼
應用ffmpeg+x264的開原始碼,用進行編譯後,對android返回的YUV12資料進行編碼;
優點:編碼方式靈活,能做多種開發,可以適用各種格式YUV12,NV12的編碼;
缺點:手機發熱嚴重!!軟編碼5分鐘後,手機變得非常燙手。
2,硬編碼
應用androidsdk,也就是medieacodec的程式碼,對手機進行硬編碼。
優點:手機沒有發熱問題,測試30分鐘,手機沒有發現發熱問題;
缺點:
1)識別手機的編碼方式困難
實驗過多種手機,華為B199,華為榮耀6,紅米移動版,紅米電信版,小米2S。
發現每種手機出來的YUV碼流都不一致;
華為B199,華為榮耀6,紅米電信版,小米2S只支援YUV的NV21格式編碼;(型別21)
紅米移動版只支援YU12的格式編碼;(型別19)
2)硬編碼後偏色問題
華為B199(高通),紅米電信版(高通),小米2(高通)硬編碼後,顏色良好,沒有偏色問題;
華為榮耀6(海思),紅米移動版(聯發科)硬編碼後,嚴重偏色,不知道這幾個手機的YUV中UV得結構到底是怎麼樣的?
總結:
1、軟編碼只適用短時間攝像,並且應用多樣化的場景,如秒拍、美拍等;
2、硬編碼用於長時間攝像,但是隻能用於適應性好的手機,如高通CPU的手機系列;
自己感覺華為海思,聯發科在晶片的圖形對外支援上還比較欠缺,畢竟是二流廠商;