視頻錄製與壓縮之硬編碼和軟編碼

硬編碼:
用設備GPU去實現編解碼,這樣可以減輕CPU的壓力。
軟編碼:
讓CPU來進行編解碼,在c層代碼來進行編解碼,因爲c/c++有很多好的編解碼庫。

軟硬編碼對比:
硬編的好處主要在於速度快,而且系統自帶不需要引入外部的庫,但是特性支持有限,而且硬編的壓縮率一般偏低,而對於軟編碼來說,雖然速度較慢,但是壓縮率比較高,而且支持的H264特性也會比硬編碼多很多,相對來說比較可控。硬編碼會受硬件設備支持的影響。

在Android 4.1之前沒有提供硬編解碼的API,所以基本都是採用開源的那些庫,比如著名的FFMpeg實現軟編解碼。但是通常情況下,同一平臺同一硬件環境,硬編碼的速度快於軟件編碼,軟編碼使用CPU來進行計算,會消耗一些app的運算效率。在Android4.1出來了一個新的API:MediaCodec可以支持硬編解碼,MediaCodec可以支持對音頻和視頻的編解碼.

MediaCodec從api16開始提供,它能夠訪問更底層的多媒體編解碼器組件。MediaCodec是更底層的apis,是Android底層多媒體支持基礎架構的一部分(通常與MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface, 以及AudioTrack一起使用)。
這裏介紹下FFMpeg實現軟編解碼

small-video-record

視頻壓縮這個框架不錯,我測試了一個手機上,錄製相同時間的視頻,不做壓縮的有一百多兆,我壓縮到了十幾兆,視頻清晰度還不錯。 看的朋友隨手點歌贊哦

Android端音頻視頻採集,底層利用FFmpeg編碼壓縮處理

  • 邊採集邊編碼。
  • 利用FFmpeg自定義錄製各種時長、分辨率、碼率、幀率、轉碼速度的視頻。
  • small-video-record2已解耦FFmpeg,可根據自己需求定製FFmpeg。
  • 暴露FFmpeg命令操作接口,可自定義更多功能。
  • small-video-record2 支持全平臺,如果你手機 cpu 是64位的將達到秒編!
  • 可選擇本地視頻進行個性化壓縮,如果你手機 cpu 是64位的速度將相對很快。
  • 錄製簡單,幾行代碼完成集成,幾個參數搞定錄製。

利用FFmpeg API ,YUV編碼爲H264、PCM編碼爲AAC

h264視頻和acc音頻合成MP4,視頻編碼解碼加密。

封裝格式轉換,就是在AVI,FLV,MKV,MP4這些格式之間轉換(對應.avi,.flv,.mkv,.mp4文件)。需要注意的是,基於FFMPEG的封裝格式轉換器並不進行視音頻的編碼和解碼工作。而是直接將視音頻壓縮碼流從一種封裝格式文件中獲取出來然後打包成另外一種封裝格式的文件。傳統的轉碼程序工作原理:
輸入文件解封轉後得到音視頻流,再分別解碼得到像素數據YUV(顏色編碼)和採樣數據PCM,再編碼爲流後封裝,得到輸出文件

舉了一個舉例:FLV(視頻:H.264,音頻:AAC)轉碼爲AVI(視頻:MPEG2,音頻MP3)的例子。可見視頻轉碼的過程通俗地講相當於把視頻和音頻重新“錄”了一遍。

不進行轉碼,只進行封裝格式轉換的程序可參考:

基於FFMPEG的封裝格式轉換器(無編解碼)

不進行視頻和音頻的編解碼工作,因此本程序和普通的轉碼軟件相比,有以下兩個特點:
處理速度極快。視音頻編解碼算法十分複雜,佔據了轉碼的絕大部分時間。因爲不需要進行視音頻的編碼和解碼,所以節約了大量的時間。視音頻質量無損。因爲不需要進行視音頻的編碼和解碼,所以不會有視音頻的壓縮損傷

其他相關推薦
FFmpegAndroid

Android視頻編解碼之MediaCodec簡單入門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章