写这篇博客次要是为了给新入门的流媒体开发者解惑,当初看到各种开发者的需要:网页播放RTSP摄像机、微信播放RTSP摄像机、网页播放摄像机SDK输入的视频流、网页播放第三方流媒体平台输入的视频流、包含Github有一些所谓的H5RTSPPlayer,这些都有一个共同点,就是H.264+AAC进行RTMP推流,当然SkeyeWebPlayer除外,SkeyeWebPlayer开创性的反对在浏览器端采纳H5间接播放器RTSP流,下载地址:
SkeyeWebPlayer: 永恒收费H5直播点播播放器,反对FLV、HLS、RTSP、WS-FLV、WS-RTSP、WEBRTC、HEVC/H265
https://gitee.com/visual-opening/skeyewebplayer
将整个过程进行拆分为二:
一、通过RTSP或者SDK获取H.264视频流和AAC音频流,获取RTSP流咱们能够用ffmpeg、SkeyeRTSPClient(https://gitee.com/visual-opening/SkeyeRTSPClient)等计划,获取SDK流咱们就能够用各个摄像机厂家或者平台厂家提供的各种平台SDK(海康NetSDK、大华NetSDK、雄迈LocalSDK)等等,这些都能无一例外地有独特的流程:
初始化
登录
设置数据回调
开始实时流
解决实时返回的音视频数据
开释Handle
视频数据大多返回的是H.264数据流,音频就各种各样了,有返回G.711、G.726、AAC的,如果是返回的G.711或者G.726时,就须要调用AAC的编码器(如ffmpeg等)将安防的音频流转换成AAC的音频编码格局;
二、将编码好的H.264视频和AAC音频以RTMP/FLV的形式推流到通用的RTMP服务器(nginx-rtmp、srs、SkeyeDSS、CRTMPD等),进行RTMP/HLS的直播,这里就次要是RTMP推流性能的实现,咱们能够采纳ffmpeg、librtmp、SkeyeRTMPPusher等多种计划推流,如果采纳ffmpeg为工具进行RTSP拉流的话,咱们倡议推流也用ffmpeg,这样间接将音频数据在ffmpeg外部进行一次filter转码,就能够实现rtmp的output了,如果采纳librtmp的话,也是比拟好的计划,毕竟市面上90%的RTMP推流都是Based On librtmp,包含SkeyeRTMPPusher,之所以举荐用SkeyeRTMPPusher一方面是因为是SkeyOpenSKEYE团队其余搭档的产品,另一方面,的确好用,有十分齐备的多平台调用示例(Gitee - OpenSKEYE/SkeyeRTMPPusher: SkeyeRTMPPusher是一套调用简略、功能完善、运行高效稳固的RTMP性能组件,通过多年实战和线上运行打造,反对RTMP推送断线重连、环形缓冲、智能丢帧、网络事件回调,反对Windows、Linux、arm(hisiv100/hisiv200/hisiv300/hisiv400/hisiv500/hisiv600/etc..)、Android、iOS平台,反对市面上绝大部分的RTMP流媒体服务器,包含Wowza、Red5、ngnix_rtmp、crtmpserver等支流RTMP服务器,可能完满利用于各种行业的直播需要,手机直播、桌面直播、摄像机直播、课堂直播等等方面! ):
SkeyeRTMP_File:读取MP4文件推RTMP直播流,实现虚构直播;
SkeyeRTMP_RTSP:读取RTSP流并进行转换成RTMP推流到RTMP服务器;
SkeyeRTMP_SDK:调用SDK获取音视频流,再推流RTMP;
SkeyeRTMP Android:安卓推送摄像头/屏幕进行RTMP直播;
SkeyeRTMP iOS:iOS苹果推送摄像头进行RTMP直播;
齐备的调用示例,加上全平台的反对(Windows、Linux、arm、Android、iOS),给了开发者十分好的抉择和帮忙;
依照以上的两个流程,咱们就能够将RTSP/SDK获取到的数据进行RTMP/HLS公布,实现全终端、无插件化的播放了,这也是所谓的H5 RTSP播放器的实现计划,RTSP要H5播放,必须借助于服务器的转换;