通過攝像機視頻設備或者流媒體服務器SDK獲取到數據轉換成RTMP流實現網頁/手機微信播放


寫這篇博客主要是為了給新入門的流媒體開發者解惑,現在看到各種開發者的需求:網頁播放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播放,必須借助於服務器的轉換;

獲取更多信息

郵件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyDarwin


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM