方案介绍
RTMP流媒体服务器一般只接收RTMP格式的推流。目前市场上有一些自带RTMP推流的摄像机和编码器,可以直接在其配置里面配置推送到RTMP流媒体服务器上。但是大部分的安防网络摄像机还不带推流功能,对于这种摄像机只能通过自己动手开发出获取摄像机实时视频流并封装成RTMP格式推送给流媒体服务器了。 
获取摄像机实时视频流的方式可以调用摄像机的SDK,也可以通过拉取摄像机的RTSP实时流来获取。对于调用SDK获取视频流的方式因为不同厂家、不同型号的设备SDK都不同,所以这种方式获取流不够通用。这样就建议使用拉取摄像机RTSP流,然后转成RTMP推送给RTMP流媒体服务器,可以适应基本所有的网络摄像机。

拉取摄像机RTSP流
这里使用EasyRTSPClient库拉取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流给流媒体服务器
通过EasyRTSPClient库已经可以获取摄像机实时的视频和音频流, 再通过调用EasyRTMP库可以直接将这些数据自带封装成RTMP格式推送给服务器。

typedef struct __EASY_AV_Frame
{
    Easy_U32    u32AVFrameFlag;     /* 帧标志  视频 or 音频 */
    Easy_U32    u32AVFrameLen;      /* 帧的长度 */
    Easy_U32    u32VFrameType;      /* 视频的类型,I帧或P帧 */
    Easy_U8     *pBuffer;           /* 数据 */
    Easy_U32    u32TimestampSec;    /* 时间戳(秒)*/
    Easy_U32    u32TimestampUsec;   /* 时间戳(微秒) */
}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。需要同时拉取多路视频并推送的Demo可以参考https://github.com/jinlong0813/RTMPLive。

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

获取更多信息
技术方案与商业授权咨询:13718530929

邮件:support@easydarwin.org

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

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

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

QQ群:587254841

Copyright © EasyDarwin.org 2012-2018

--------------------- 
作者:jinlong0603 
来源:CSDN 
原文:https://blog.csdn.net/jinlong0603/article/details/78956993 
版权声明:本文为博主原创文章,转载请附上博文链接!

安防网络摄像机推送到RTMP流媒体服务器方案相关推荐

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

    方案介绍 目前互联网直播的CDN和标准RTMP流媒体服务器通常只能接收RTMP格式的音视频推流.目前市场上有一些自带RTMP推流的摄像机和编码器,可以直接在其rtmp推流配置里面配置推送到RTMP流媒 ...

  2. SkeyeVSS将安防网络摄像机进行类似于萤石云、乐橙云等模式的互联网视频云直播的几种方案

    SkeyeVSS将安防网络摄像机或者NVR进行类似于萤石云.乐橙云等模式的互联网视频云直播的解决方案有几种: 一.RTMP推流的方式 第一步,拉取RTSP流,获取到音视频编码帧数据: 第二步,通过RT ...

  3. ffmpeg推送图片到流媒体服务器

    直接上源码 #include "stdafx.h" #include <stdio.h> #include "opencv2/opencv.hpp" ...

  4. RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播方案EasyNVR之主要功能模块及相关技术特点与性能指标分析

    EasyNVR安防流媒体服务解决方案,支持RTSP稳定拉流接入,支持Onvif协议接入,支持RTSP/RTMP/HLS/HTTP-FLV分发,将传统安防监控设备互联化,无插件直播等. 功能模块 1.设 ...

  5. EasyNVR纯H5摄像机直播解决方案前端解析之:RTSP安防监控实时直播的网页H5自动播放方案

    我们很多安防.互联网.直播的应用场景中,在打开一路直播流后,极少看到需要点击播放按钮才能直播 播放视频流的情况,但是由于H5场景的播放需要兼容的浏览器非常多,这样的情况下经常会遇到各种各样的摄像机网页 ...

  6. RTSP安防网络摄像头/海康大华硬盘录像机/NVR网页无插件低延时播放流媒体服务器EasyNVR页面显示网络请求失败问题

    进入移动互联网时代以来,企业微信公众号已成为除官网以外非常重要的宣传渠道,当3.2亿直播用户与9亿微信用户的势能累加,在微信上开启直播已成为越来越多企业的必然选择. 青犀团队研发的EasyNVR核心在 ...

  7. 音视频7——安卓软编音视频数据推送到rtmp服务器

    音视频开发路线: Android 音视频开发入门指南_Jhuster的专栏的技术博客_51CTO博客_android 音视频开发入门 demo地址: videoPath/Demo8Activity.j ...

  8. 不止是安防 红外摄像机在应急产业的应用

    安全事故的频发,尤以去年的天津港"8·12"特别重大爆炸事故,造成了巨大人员伤亡和财产损失,一方面凸显了我国在防灾应急措施上的紧缺和不足,同时用事实敲响了防灾减灾的警钟,也时刻警示 ...

  9. 信息推荐服务 信息推送服务器,根据用户喜好进行信息推送的方法及服务器技术...

    [技术实现步骤摘要] [专利摘要]本专利技术公开了一种根据用户喜好进行信息推送的方法及服务器,包括:获取预设范围内的用户的喜好标签:接收到目标用户发出的喜好信息推送请求:将所述目标用户的喜好标签与所述 ...

  10. 推送消息mqtt协议服务器域名云喇,推送消息mqtt协议服务器域名云喇

    推送消息mqtt协议服务器域名云喇 内容精选 换一换 上传证书相关问题,请根据您的情况选择具体解决方法:目前SSL证书管理平台只支持上传PEM格式的证书.其他格式的证书需要转化成PEM格式后才能上传, ...

最新文章

  1. 计算机网络教学重点突破,武汉理工大学计算机网络复习重点教学内容(34页)-原创力文档...
  2. 区块链BaaS云服务(36)欧盟EBSI 区块链
  3. 处理数字_8_计算不含最大/小值的均值
  4. ProgressDialog 一个使用类,多多提建议
  5. TFS多地办公时的处理
  6. VS Code 自动保存 码格式化
  7. 解释下列术语计算机系统结构,计算机系统结构第5章部分习题参考答案
  8. Ajax Login Sample
  9. Sampled Softmax,你真的会用了吗?
  10. Dreamweaver简单网页——HTML+CSS小米官网首页的设计与实现
  11. 计算机游戏专业宣传语,游戏的广告词_游戏推广广告词
  12. HIT计算机系统CSAPP-ICS2022大作业程序人生
  13. 压测--部署jp@gc - PerfMon Metrics Collector
  14. Auto-Exposure Fusion for Single-Image Shadow Removal——论文阅读
  15. 安装纯净版win系统
  16. Unity技术手册 - 粒子基础主模块属性-下
  17. 产后一定要喝生化汤吗?
  18. Asp.net 团队同时发布 WebMatrix, Razor, MVC3 和Orchard [转]
  19. 索性把Microsoft Store打不开和OneNote同步失败问题一并解决了
  20. 4年程序员30天面试了23家公司,看到公司名单后,网友:羡慕

热门文章

  1. 罗永浩、戴威的C位消亡史
  2. 业务流程图是什么?怎么画?
  3. 苹果手机速度慢_安卓日语App,苹果也看进来
  4. 一套非常精美的全球地貌晕渲图,有想要的吗?
  5. “AI复活了我的妻子,但我决定跟她说再见了”
  6. 那些年我们听过的法则
  7. 数字图像/视频处理MATLAB基本操作
  8. python课程结课感悟_python听课的感悟与建议
  9. 努力赚钱,是为了不让自己的爱情受到别人金钱的考验--这就是现实
  10. 小程序携带参数跳转的方式wx.navigateTo的URL和通过data-传递