關於直播類app中的推流、拉流技術
from:https://blog.csdn.net/lzllzllhl/article/details/80249069
圖像處理:iOS端一般會用到GPUImage處理圖像,安卓端一般使用Google的grafika(圖形處理庫)
推拉流:EasyDarwin
推流(錄製視頻):【iOS和Android】ijkPlayer 開源框架(bilibili的)(集成FFmpeg,iOS的播放器也基於此) 鬥魚直播也基於此實現
編碼標準:H.265 H.264 VP8 VP9 音頻:AAC Opus、
傳輸協議:RTMP RTSP HLS
拉流(播放視頻):LFLiveKit 支持H264和AAC編碼,支持美顏和水印效果,傳輸協議是RTMP,支持弱網丟幀,記載網絡環境差的情況下,爲了保證視頻的通常,會自動丟棄個別幀。
注意:RTMP協議中,視頻必須是H264編碼,音頻必須是AAC或MP3編碼,且多以flv格式封包。
缺點:RTMP有着一個最大的不足——不支持瀏覽器【2017年的信息,當下並未友好支持 需要費一番功夫】
瀏覽器:可考慮 WebRTC 協議
安卓端:使用javacv來實現,最終也是用過ffmpeg來進行編碼和推流,javacv實現到可以直接接收攝像頭的幀數據
需要自己實現的代碼只是打開攝像頭,寫一個SurfaceView進行預覽,然後實現PreviewCallback將攝像頭每一幀的數據交給javacv即可
使用Android自帶的編碼工具,可實現硬編碼,這裏有一個國內大神開源的封裝很完善的的庫yasea,第一種方法需要實現的Camera採集部分也一起封裝好了,進行一些簡單配置就可以實現編碼推流,並且yasea目前已經直接支持攝像頭的熱切換,和各種濾鏡效果
安卓端播放器:vitamio、支持幾乎所有常見的的視頻格式和流媒體協議
安卓端流程
一:使用yaesa進行攝像頭採集、編碼然後向srs服務器rtmp推流
二:部署srs流媒體服務器
三:使用vitamio取流播放