軟編碼:實現直接、簡單,參數調整方便,升級易,但CPU負載重,性能較硬編碼低
性能高,對CPU沒有壓力,但是對其他硬件要求較高(如GPU等)
硬編碼 Gpu等非cpu編碼 ? 用 VideoToolBox框架
編碼流程: 采集--> 獲取到視頻幀--> 對視頻幀進行編碼 --> 獲取到視頻幀信息 --> 將編碼后的數據以NALU方式寫入到文件
編碼方式:H.264編碼
幀率:每秒鐘多少幀畫面
碼率:單位時間內保存的數據量
關鍵幀(GOPsize)間隔:多少幀為一個GOP
當編碼成功后,將編碼后的碼流寫入文件
編碼成功后會回調之前輸入的函數
1> 先判斷是否是關鍵幀:
如果是關鍵幀,則需要在寫入關鍵幀之前,先寫入PPS、SPS的NALU
取出PPS、SPS數據,并且封裝成NALU單元,寫入文件
2> 將I幀、P幀、B幀分別封裝成NALU單元寫入文件
寫入后,數據存儲方式:
硬解碼
軟編碼?
軟編碼主要是利用CPU進行編碼的過程, 具體的編碼通常會用FFmpeg+x264
iOS項目中集成FFmpeg
將編譯好的文件夾拖入到工程中添加依賴庫: libiconv.dylib/libz.dylib/libbz2.dylib/CoreMedia.framework/AVFoundation.framework
FFmpeg編碼兩個重要的類
AVFormat
保存的是解碼后和原始的音視頻信息
AVPacket
解碼完成的數據及附加信息(解碼時間戳、顯示時間戳、時長等
軟解碼---用到openGl? 把解碼的數據用openGl渲染出來
01-(掌握)FFmpeg介紹和Mac下使用
07-(掌握)服務器-購買
08-(掌握)服務器-搭建配置
09-(掌握)服務器-HLS支持
04-LFLiveKit-----推流框架(直接能獲取到相機)----推到服務器(服務器地址)
05-kxMovie的使用(1.服務器推流? ? 2.kxMovie獲取地址進行播放 3.基于FFmpeg)
06-IJKPlayer的使用(1.服務器推流? ? 2.IJKPlayer獲取地址進行播放)
07-HelloOpenGL-----渲染畫面用的