方案介绍

目前互联网直播的CDN和标准RTMP流媒体服务器通常只能接收RTMP格式的音视频推流。目前市场上有一些自带RTMP推流的摄像机和编码器,可以直接在其rtmp推流配置里面配置推送到RTMP流媒体服务器上。但是大部分的安防网络摄像机还是不带推流功能,尤其是海康、大华、宇视等通用性价比高的摄像机,是不支持的,所以,对于这种摄像机只能通过二次开发的方式,先获取摄像机实时视频流并封装成RTMP/FLV格式进行推送,再由RTMP流媒体服务器进行转发/分发。

获取摄像机实时视频流的方式可以调用摄像机厂家的SDK,也可以通过拉取摄像机的RTSP实时流来获取。对于调用SDK获取视频流的方式因为不同厂家、不同型号的设备SDK都有所不同,所以这种方式获取流不够通用,定制性、稳定性都不可控,这样就建议使用拉取摄像机RTSP流,然后转成RTMP推送给RTMP流媒体服务器,可以适应几乎所有的网络摄像机。

第一步:拉取摄像机RTSP流

/*

_channelId:通道号,暂时不用

_channelPtr:通道对应对象,暂时不用

_frameType:EASY_SDK_VIDEO_FRAME_FLAG/EASY_SDK_AUDIO_FRAME_FLAG/EASY_SDK_EVENT_FRAME_FLAG/...

_pBuf:回调的数据部分,具体用法看Demo

_frameInfo:帧结构数据

*/

typedef int (Easy_APICALL *RTSPSourceCallBack)( int _channelId, void *_channelPtr, int _frameType, char *pBuf, RTSP_FRAME_INFO* _frameInfo);

#ifdef __cplusplus

extern "C"

{

#endif

/* 获取最后一次错误的错误码 */

Easy_API int Easy_APICALL EasyRTSP_GetErrCode(Easy_RTSP_Handle handle);

/* 激活 */

#ifdef ANDROID

Easy_API int Easy_APICALL EasyRTSP_Activate(char *license, char* userPtr);

#else

Easy_API int Easy_APICALL EasyRTSP_Activate(char *license);

#endif

/* 创建RTSPClient句柄 返回0表示成功,返回非0表示失败 */

Easy_API int Easy_APICALL EasyRTSP_Init(Easy_RTSP_Handle *handle);

/* 释放RTSPClient 参数为RTSPClient句柄 */

Easy_API int Easy_APICALL EasyRTSP_Deinit(Easy_RTSP_Handle *handle);

/* 设置数据回调 */

Easy_API int Easy_APICALL EasyRTSP_SetCallback(Easy_RTSP_Handle handle, RTSPSourceCallBack _callback);

/* 打开网络流 */

Easy_API int Easy_APICALL EasyRTSP_OpenStream(Easy_RTSP_Handle handle, int _channelid, char *_url, EASY_RTP_CONNECT_TYPE _connType, unsigned int _mediaType, char *_username, char *_password, void *userPtr, int _reconn/*1000表示长连接,即如果网络断开自动重连, 其它值为连接次数*/, int outRtpPacket/*默认为0,即回调输出完整的帧, 如果为1,则输出RTP包*/, int heartbeatType/*0x00:不发送心跳 0x01:OPTIONS 0x02:GET_PARAMETER*/, int _verbosity/*日志打印输出等级,0表示不输出*/);

/* 关闭网络流 */

Easy_API int Easy_APICALL EasyRTSP_CloseStream(Easy_RTSP_Handle handle);

#ifdef __cplusplus

}

#endif

各个平台调用Demo参考https://github.com/EasyDSS/EasyRTSPClient。EasyRTSPClient拉取RTSP流,输出实时的视频H264流和音频流。

第二步:推送RTMP流到流媒体服务器

typedef struct __EASY_AV_Frame

{

Easy_U32 u32AVFrameFlag;/* 帧标志 视频 or 音频 */

Easy_U32 u32AVFrameLen;/* 帧的长度 */

Easy_U32 u32VFrameType;/* 视频的类型,I帧或P帧 */

Easy_U8 *pBuffer;/* 数据 */

Easy_U32u32TimestampSec;/* 时间戳(秒)*/

Easy_U32u32TimestampUsec;/* 时间戳(微秒) */

}EASY_AV_Frame;

/* 推送事件类型定义 */

typedef enum __EASY_RTMP_STATE_T

{

EASY_RTMP_STATE_CONNECTING = 1, /* 连接中 */

EASY_RTMP_STATE_CONNECTED, /* 连接成功 */

EASY_RTMP_STATE_CONNECT_FAILED, /* 连接失败 */

EASY_RTMP_STATE_CONNECT_ABORT, /* 连接异常中断 */

EASY_RTMP_STATE_PUSHING, /* 推流中 */

EASY_RTMP_STATE_DISCONNECTED, /* 断开连接 */

EASY_RTMP_STATE_ERROR

}EASY_RTMP_STATE_T;

/*

_frameType:EASY_SDK_VIDEO_FRAME_FLAG/EASY_SDK_AUDIO_FRAME_FLAG/EASY_SDK_EVENT_FRAME_FLAG/...

_pBuf:回调的数据部分,具体用法看Demo

_frameInfo:帧结构数据

_userPtr:用户自定义数据

*/

typedef int (*EasyRTMPCallBack)(int _frameType, char *pBuf, EASY_RTMP_STATE_T _state, void *_userPtr);

#ifdef __cplusplus

extern "C"

{

#endif

/* 激活EasyRTMP */

#ifdef ANDROID

EasyRTMP_API Easy_I32 Easy_APICALL EasyRTMP_Activate(char *license, char* userPtr);

#else

EasyRTMP_API Easy_I32 Easy_APICALL EasyRTMP_Activate(char *license);

#endif

/* 创建RTMP推送Session 返回推送句柄 */

EasyRTMP_API Easy_RTMP_Handle Easy_APICALL EasyRTMP_Create(void);

/* 设置数据回调 */

EasyRTMP_API Easy_I32 Easy_APICALL EasyRTMP_SetCallback(Easy_RTMP_Handle handle, EasyRTMPCallBack _callback, void * _userptr);

/* 创建RTMP推送的参数信息 */

EasyRTMP_API Easy_I32 Easy_APICALL Easy_APICALL EasyRTMP_InitMetadata(Easy_RTMP_Handle handle, EASY_MEDIA_INFO_T* pstruStreamInfo, Easy_U32 bufferKSize);

/* 连接RTMP服务器 */

EasyRTMP_API Easy_Bool Easy_APICALL EasyRTMP_Connect(Easy_RTMP_Handle handle, const char *url);

/* 推送H264或AAC流 */

EasyRTMP_API Easy_U32 Easy_APICALL EasyRTMP_SendPacket(Easy_RTMP_Handle handle, EASY_AV_Frame* frame);

/* 停止RTMP推送,释放句柄 */

EasyRTMP_API void Easy_APICALL EasyRTMP_Release(Easy_RTMP_Handle handle);

#ifdef __cplusplus

};

#endif

在EasyRTSPClient的回调函数中将实时数据通过EasyRTMP库的EasyRTMP_SendPacket接口推送出去即可。EasyRTMP SDK在https://github.com/EasyDSS/EasyRTMP。参考其中的EasyRTMP_RTSP例子,就是实现的拉取一路摄像机RTSP视频流并以RTMP推送出去的Demo。

总结

EasyRTSPClient与EasyRTMP 都是支持Windows、Linux、Android、iOS多个平台的,可以实现在各个平台上推送RTMP给流媒体服务器。两者功能都避开了RTSP及RTMP等格式的繁琐流程,直接简单调用接口就可以轻松实现流媒体直播推送。

目前基于EasyRTSPClient拉流和EasyRTMP推流的拉转推方案主要有两款:

EasyNVR(http://www.easynvr.com):EasyNVR能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP协议输出的设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),并且EasyNVR能够将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发;

同时,为了方便多套EasyNVR集中管控,我们开发了EasyNVS集中管理平台,方便进行统一的EasyNVR集中管理;

获取更多信息

EasyDarwin开源流媒体服务器:www.easydarwin.org

EasyDSS商用流媒体解决方案:www.easydss.com

EasyNVR无插件直播方案:www.easynvr.com

QQ群:587254841

Copyright © EasyDarwin.org 2012-2019

大华的支持rtmp推流吗_RTSP安防摄像机(海康大华宇视等)如何推送到RTMP流媒体服务器进行直播...相关推荐

  1. 戏说安防“三国”—— 海康/大华/宇视

    话说安防发展,乃大势所趋.经过多年的群雄混战,逐渐形成了海康,大华和宇视三足鼎立的态势,颇似三国之势.凭本人在业界的微薄经验,细细想来,这三家公司,确实和魏蜀吴有诸多相似之处,究竟何处相似,且容本人慢 ...

  2. 浏览器低延时播放RTSP安防摄像头/海康大华硬盘录像机/NVR/流媒体服务器硬件开发机设备失去授权如何解决?

    背景分析 随着互联网基础设施建设的发展,4G/5G/NB-IoT各种网络技术的大规模商用,视频随时随地可看.可控的诉求越来越多,互联网思维.架构和技术引入进传统监控行业里,成为新形势下全终端监控的基础 ...

  3. 海康SDK/大华SDK安防视频智能分析平台EasyCVR如何将通道视频流推送至CDN分发?

    EasyCVR视频协议融合平台不仅支持常规协议的接入,我们还拓展了海康SDK.大华SDK.Ehome等私有协议.如果前端设备协议不同且数量较多,则可以通过EasyCVR平台来对所有视频通道做整合和统一 ...

  4. 华为海康大华摄像头编译RTSP转RTMP和HTTPFLV

    华为海康大华摄像头编译RTSP转RTMP和HTTPFLV 项目需求要看摄像头实时画面谷歌浏览器不支持RTSP流直接展示 方案一 通过Java+nginx+rtsp转rtmp流 方案二 通过Java+ ...

  5. Qt编写视频监控管理平台(支持海康/大华/宇视/华为/天地伟业/H264/H265等)

    一.前言 海康大华等厂家自己的客户端软件,基本上都是支持自家的设备,不支持其他家的摄像机和硬盘录像机,并不是因为技术上做不到,这些大厂要实现支持兼容其他的家的(他们家的服务端或者收费的都是支持其他家的 ...

  6. 海康大华等安防摄像机采用通用RTSP协议流转RTMP推送至Web无插件播放展示的流程方法

    行业现状 中国互联网化的进程已经越来越快了,各个行业都在进行着互联网化的改造,流媒体.音视频,作为跑在互联网上最大量级的数据类型,其从编码方式到传输协议到终端兼容都成为各家标准抢占的高点,RTMP.H ...

  7. Qt编写安防视频监控系统(支持win/linux/mac/海康/大华/宇视/264/265等)

    一.前言 视频监控系统在整个安防领域,已经做到了烂大街的程序,全国起码几百家公司做过类似的系统,当然这一方面的需求量也是非常旺盛的,各种定制化的需求越来越多,尤其是这几年借着人脸识别的东风,发展更加迅 ...

  8. LiveGBS流媒体平台国标GB/T28181作为下级支持国标级联海康大华宇视华为等第三方国标平台支持对接政务公安内网国标视频平台

    LiveGBS流媒体平台国标GB/T28181作为下级支持国标级联海康大华宇视华为等第三方国标平台支持对接政务公安内网国标视频平台 1.什么是GB/T28181级联 2.搭建GB28181国标流媒体平 ...

  9. LiveVISGAT1400视图库服务-支持海康大华华为宇视天地伟业等设备视图库接入使用说明

    LiveVISGAT1400视图库服务-支持海康大华华为宇视天地伟业等设备视图库接入使用说明 LiveVIS GAT1400视图库服务安装使用说明 1.服务说明 1.1.安装包说明 1.2.视图库服务 ...

最新文章

  1. 系统配置文件备份比较
  2. OpenCV基本的SIMD的实例(附完整代码)
  3. 使用函数求素数和_用母函数法处理一个数论问题的研究笔记
  4. cad导出pdf_CAD如何导出高分辨率图片
  5. 基于深度学习的银行卡号识别 卡号识别和分割
  6. 全国省市区行政编码数据表 sql格式
  7. react-native6.0版本xcode11.2版本ios报错Unrecognized font family 'Ionicons'
  8. ubuntu最简单的联网(连接网络)方法
  9. mysql中可以查询英文却查不了中文或数字
  10. Python+Django+MySQL资产管理系统
  11. 如何找出当前活动桌面背景图像的位置/路径(Ubuntu 18.04,GNOME)?
  12. 免费采集器-网页数据采集器
  13. java实现三进制转十进制
  14. C语言实现操作系统简单的P V操作
  15. java 通用权限管理_通用权限管理设计篇(一)
  16. Markdownpad2安装注册
  17. macos安装更新错误_如何控制何时安装macOS更新
  18. PPT中图表不同粘贴方式的区别
  19. C语言:输入字符并将它们输出
  20. CPI即消费者物价指数

热门文章

  1. Git命令学习总结(-)
  2. Asp.net开发环境的设置所遇到的问题
  3. xcode配置最新版opencv
  4. rtt面向对象oopc——2.对象容器理解和rtt类的联系
  5. 软件工程复习提纲——第十章
  6. mysql 403_mysql数据库管理phpmyadmin 403错误的解决方法
  7. 万字详述 MySQL ProxySQL
  8. 那些年删过的库,跑过的路,你从中找到解决方法了吗?
  9. 支撑百万并发的数据库架构如何设计?
  10. 还不理解“分布式事务”?这篇给你讲清楚!