乐趣区

关于c++:通过摄像机视频设备或者流媒体服务器SDK获取到数据转换成RTMP流实现网页手机微信播放


写这篇博客次要是为了给新入门的流媒体开发者解惑,当初看到各种开发者的需要:网页播放 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 播放,必须借助于服务器的转换;

退出移动版