寫這篇博客主要是為了給新入門的流媒體開發者解惑,現在看到各種開發者的需求:網頁播放RTSP攝像機、微信播放RTSP攝像機、網頁播放攝像機SDK輸出的視頻流、網頁播放第三方流媒體平台輸出的視頻流、包括Github有一些所謂的H5RTSPPlayer,這些都無外乎一個共同點,就是H.264+AAC進行RTMP推流;
將整個過程進行拆分為二:
一、通過RTSP或者SDK獲取H.264視頻流和AAC音頻流,獲取RTSP流我們可以用ffmpeg、EasyRTSPClient(https://github.com/EasyDarwin/EasyRTSPClient)等方案,獲取SDK流我們就可以用各個攝像機廠家或者平台廠家提供的各種平台SDK(海康NetSDK、大華NetSDK、雄邁LocalSDK)等等,這些都能無一例外地有共同的流程:
- 初始化
- 登錄
- 設置數據回調
- 開始實時流
- 處理實時返回的音視頻數據
- 釋放Handle
視頻數據大多返回的是H.264數據流,音頻就各種各樣了,有返回G.711、G.726、AAC的,如果是返回的G.711或者G.726時,就需要調用AAC的編碼器(如ffmpeg、EasyAACEncoder等)將安防的音頻流轉換成AAC的音頻編碼格式;
二、將編碼好的H.264視頻和AAC音頻以RTMP/FLV的方式推流到通用的RTMP服務器(nginx-rtmp、srs、EasyDSS、CRTMPD等),進行RTMP/HLS的直播,這里就主要是RTMP推流功能的實現,我們可以采用ffmpeg、librtmp、EasyRTMP等多種方案推流,如果采用ffmpeg為工具進行RTSP拉流的話,我們建議推流也用ffmpeg,這樣直接將音頻數據在ffmpeg內部進行一次filter轉碼,就可以實現rtmp的output了,如果采用librtmp的話,也是比較好的方案,畢竟市面上90%的RTMP推流都是Based On librtmp,包括EasyRTMP,之所以推薦用EasyRTMP一方面是因為是EasyDarwin團隊其他伙伴的產品,另一方面,確實好用,有非常完備的多平台調用示例(https://github.com/EasyDarwin/EasyRTMP):
- EasyRTMP_File:讀取MP4文件推RTMP直播流,實現虛擬直播;
- EasyRTMP_RTSP:讀取RTSP流並進行轉換成RTMP推流到RTMP服務器;
- EasyRTMP_SDK:調用SDK獲取音視頻流,再推流RTMP;
- EasyRTMP Android:安卓推送攝像頭/屏幕進行RTMP直播;
- EasyRTMP iOS:iOS蘋果推送攝像頭進行RTMP直播;
完備的調用示例,加上全平台的支持(Windows、Linux、arm、Android、iOS),給了開發者非常好的選擇和幫助;
按照以上的兩個流程,我們就可以將RTSP/SDK獲取到的數據進行RTMP/HLS發布,實現全終端、無插件化的播放了,這也是所謂的H5 RTSP播放器的實現方案,RTSP要H5播放,必須借助於服務器的轉換;
獲取更多信息
Copyright © EasyDarwin.org 2012-2017