本文转自EasyDarwin团队Kim的博客:http://blog.csdn.net/jinlong0603

Demo项目介绍

EasyRTMP Demo代码下载地址https://github.com/EasyDarwin/EasyRTMP
本文介绍Demo中EasyRTMP_SDK的项目。该项目是通过调用IP Camera自己的SDK获取到音视频流,然后通过libEasyRTMP推送到RTMP服务器进行直播。这样就可以将普通的不支持RTMP的IP Camera接入RTMP服务器进行直播推送。该Demo程序可以交叉编译内置到IP Camera内部,或者在Windows或者其他系统中执行此Demo拉取IP Camera的数据流再推送到RTMP服务器。
Github中Demo里面用的IP Camera的SDK是EasyDarwin官网卖的海芯威视的IP Camera。如果想接入其他家的IP Camera(如海康、大华等)可自己将SDK库及调用方式换成相应的版本。

代码解析

下面是IP Camera SDK 数据回调函数的部分,解析回调出来的数据并使用libEasyRTMP库进行RTMP推送。关于回调出来的音频数据如果不是AAC格式,可以通过EasyDarwin团队提供的开源的EasyAACEncoder将其转成AAC格式再推送,当然使用其他的方式只要能转成正确的AAC格式就可以。

HI_S32 NETSDK_APICALL OnStreamCallback(HI_U32 u32Handle,HI_U32 u32DataType, HI_U8* pu8Buffer,HI_U32 u32Length,HI_VOID* pUserData)
{HI_S_AVFrame* pstruAV = HI_NULL;HI_S_SysHeader* pstruSys = HI_NULL;if (u32DataType == HI_NET_DEV_AV_DATA){pstruAV = (HI_S_AVFrame*)pu8Buffer;if (pstruAV->u32AVFrameFlag == HI_NET_DEV_VIDEO_FRAME_FLAG){if(g_RtmpHandle == 0 ) return 0;if(pstruAV->u32AVFrameLen > 0){unsigned char* pbuf = (unsigned char*)(pu8Buffer+sizeof(HI_S_AVFrame));EASY_AV_Frame  avFrame;memset(&avFrame, 0x00, sizeof(EASY_AV_Frame));avFrame.u32AVFrameLen = pstruAV->u32AVFrameLen;avFrame.pBuffer = (unsigned char*)pbuf;avFrame.u32VFrameType = (pstruAV->u32VFrameType==HI_NET_DEV_VIDEO_FRAME_I)?EASY_SDK_VIDEO_FRAME_I:EASY_SDK_VIDEO_FRAME_P;avFrame.u32AVFrameFlag = EASY_SDK_VIDEO_FRAME_FLAG;avFrame.u32TimestampSec = pstruAV->u32AVFramePTS/1000;avFrame.u32TimestampUsec = (pstruAV->u32AVFramePTS%1000)*1000;EasyRTMP_SendPacket(g_RtmpHandle, &avFrame);}   }elseif (pstruAV->u32AVFrameFlag == HI_NET_DEV_AUDIO_FRAME_FLAG){if(g_RtmpHandle == 0 ) return 0;EASY_AV_Frame   avFrame;memset(&avFrame, 0x00, sizeof(EASY_AV_Frame));avFrame.u32AVFrameFlag = EASY_SDK_AUDIO_FRAME_FLAG;if(pstruAV->u32AVFrameLen <= 4) return 0;if(EasyInitAACEncoder(EASY_SDK_AUDIO_CODEC_G711A) == 0){memset(m_pAACEncBufer, 0, 64*1024);unsigned int iAACBufferLen = 0;unsigned char* pbuf = (unsigned char*)(pu8Buffer+sizeof(HI_S_AVFrame)) + 4;if(Easy_AACEncoder_Encode(g_pAACEncoderHandle, (unsigned char*)pbuf,  pstruAV->u32AVFrameLen-4, m_pAACEncBufer, &iAACBufferLen) > 0){avFrame.pBuffer = (Easy_U8*)(m_pAACEncBufer);avFrame.u32AVFrameLen  = iAACBufferLen; avFrame.u32TimestampSec = pstruAV->u32AVFramePTS/1000;avFrame.u32TimestampUsec = (pstruAV->u32AVFramePTS%1000)*1000;EasyRTMP_SendPacket(g_RtmpHandle, &avFrame);}}       }}elseif (u32DataType == HI_NET_DEV_SYS_DATA){pstruSys = (HI_S_SysHeader*)pu8Buffer;printf("Video W:%u H:%u Audio: %u \n", pstruSys->struVHeader.u32Width, pstruSys->struVHeader.u32Height, pstruSys->struAHeader.u32Format);}return HI_SUCCESS;
}

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2016

转载于:https://www.cnblogs.com/babosa/p/6012058.html

EasyRTMP实现对接海康、大华等IPCamera SDK进行RTMP推送直播功能相关推荐

  1. 如何实现多路海康大华等RTSP数据转RTMP推送

    一个好的转发模块,首先要低延迟!其次足够稳定.灵活.有状态反馈机制.资源占用低,跨平台,最好以接口形式提供,便于第三方系统集成. 以Windows平台为例,我们的考虑的点如下 1. 拉流:通过RTSP ...

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

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

  3. LiveGBS流媒体平台GB/T28181功能-作为上级平台对接海康大华华为宇视等下级平台监控摄像机NVR硬件执法仪等GB28181设备

    LiveGBS作为上级平台对接海康大华华为宇视等下级平台监控摄像机NVR硬件执法仪等GB28181设备 1.背景说明 2.部署国标平台 2.1.安装使用说明 2.2.服务器网络环境 2.3.信令服务配 ...

  4. LiveGBS国标GB/T28181国标视频流媒体平台如何对接海康大华宇视等监控摄像头报警消息报警订阅国标报警信息

    LiveGBS国标GB/T28181国标视频平台如何对接海康大华宇视等监控摄像头报警硬件NVR报警消息 1.配置开启报警订阅 1.1.国标设备编辑 1.2.配置订阅周期 1.3.选择开启报警订阅 2. ...

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

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

  6. LiveGBS流媒体平台国标GB/T28181作为上级平台对接海康大华华为宇视等下级平台硬件NVR监控摄像机

    LiveGBS流媒体平台国标GB/T28181作为上级平台对接海康.大华.华为.宇视等下级平台NVR硬件监控摄像机 1.背景说明 2.部署国标平台 2.1.安装使用说明 2.2.服务器网络环境 2.3 ...

  7. All in one,EasyCVR解决所有类型的视频协议设备接入的问题(RTSP/Onvif/RTMP/GB28181/Ehome/DSS/IMOS/海康大华宇视SDK)

    之前我有一篇博客<我们为什么要做一款EasyCVR这样的视频平台>专门聊到过为什么已经有了EasyNVR.EasyDSS.EasyGBS这样的专业视频服务器,我们还要做EasyCVR这样的 ...

  8. web前端对接海康大华视频

    项目是在地图上摄像头打点,点击摄像头加载当前摄像头的视频 1下载web开发包 2整合代码,将代码放到nginx里面启动 3安装插件 4相关文件下载地址: 链接:相关地址 提取码:e247 5代码实现 ...

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

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

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

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

最新文章

  1. Linux中的简单文本处理
  2. 揭秘!Greenplum并行执行引擎到底是如何工作的?
  3. Android基于Docker容器的双系统多开实现和自动化部署
  4. ECMAScript5 严格模式,JSON,及其它
  5. iOS之 开发常用到的宏定义
  6. sql调优的几种方式_「数据库调优」屡试不爽的面试连环combo
  7. FastReport 数据区二级显示
  8. cad2019字体_这些是2019年最有效的简历字体
  9. 通过命名空间快速定位SAP UI5工程名称
  10. html td 跨两个,【单选题】在HTML中,td标签的( )属性用于创建跨多个行的单元格。...
  11. Linux下抓取log的方法
  12. 四旋翼飞行器基本知识(四旋翼飞行器结构和原理+四轴飞行diy全套入门教程)
  13. vhosts.conf域名配置
  14. java编程找出吸血鬼数字,Java 找到四位数的所有吸血鬼数字 基础代码实例
  15. 最适合freshman的Java习题集(三)
  16. 09_Pandas从多个条件(AND,OR,NOT)中提取行
  17. 无法安装或运行此应用程序。该应用程序要求首先在全局程序集缓存(GAC)中安装程序集
  18. Android运行时Crash自动恢复框架-Recovery
  19. 家用设备搭建VMWARE超融合 NSX HORIZON 及CISCO测试环境
  20. 题解报告`排列组合 (组合 + 牡牛和牝牛 + 方程的解) 7/30

热门文章

  1. mysql不识别生僻字_mysql生僻字插入失败解决方案
  2. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-6.微信扫码登录回调本地域名映射工具Ngrock...
  3. 解决(Missing artifact com.oracle:ojdbc14:jar:11.2.0.4.0)
  4. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_2 响应之返回值是String类型...
  5. 阶段3 2.Spring_04.Spring的常用注解_3 用于创建的Component注解
  6. 阶段3 2.Spring_03.Spring的 IOC 和 DI_11 set方法注入
  7. centos6.4-x86-64系统更新系统自带Apache Http Server
  8. python+selenium+Firefox+pycharm版本匹配
  9. SharePoint Framework 企业向导(二)
  10. asp.net5开发中DNX SDK版本的影响