本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376

EasyCamera在向EasyDarwin云平台推送音视频数据时,有时一个I帧会很大,从摄像机SDK中获取的数据就会被拆分。我们使用EasyPusher向云平台推送时需要每次发送一整帧数据,这时我们就需要设计一个缓存机制将SDK拆分的帧组成一个完整的帧数据,再使用EasyPusher推送给EasyDarwin云平台。这里以海康威视摄像机SDK获取的数据为例。

数据分析

我们先看一下摄像机SDK获取的帧数据

这里我们可以看到图片的第三行到第十行是一帧数据。由于数据过大,SDK将其拆分为8个包。我们就需要将这8个数据包组合正一个完整的关键帧推送给云平台。

设计思路

  • 我们建立一个固定大小的缓存区buffer,和一个用于标记偏移的pos并初始化为0;
  • 当我们获取第一个数据包的时候我们判断数据包是否为0x00、0x00、0x00、0x01开头,则表示这是一个I帧或P帧,判断pos是否为0,若为0,则将数据放入buffer,若不是,说明buffer中已经存在一个完整的I帧或者P帧数据,则发送;
  • 若获取到的数据开头不为0x00、0x00、0x00、0x01,则判断pos是否为0,若是,则丢弃,若不是,则说明这个数据为拆分的数据,需要加入buffer。

代码

if (h264Buf[0] == 0 && h264Buf[1] == 0 && h264Buf[2] == 0 && h264Buf[3] == 1)
{if (fPusherBuffOffset > 0){EASY_AV_Frame avFrameVideo;memset(&avFrameVideo, 0x00, sizeof(EASY_AV_Frame));avFrameVideo.u32AVFrameLen = fPusherBuffOffset;avFrameVideo.pBuffer = (unsigned char*)fPusherBuff;bool isKeyFrame = IsIFrame(fPusherBuff);avFrameVideo.u32VFrameType = isKeyFrame ? EASY_SDK_VIDEO_FRAME_I : EASY_SDK_VIDEO_FRAME_P;avFrameVideo.u32AVFrameFlag = EASY_SDK_VIDEO_FRAME_FLAG;//avFrameVideo.u32TimestampSec = pstruAV->u32AVFramePTS / 1000;//avFrameVideo.u32TimestampUsec = (pstruAV->u32AVFramePTS % 1000) * 1000;Easy_U32 ret = EasyPusher_PushFrame(fPusherHandle, &avFrameVideo);//printf("-- Pushing: Frame %s Result %d \n", isKeyFrame ? "I" : "P", ret);fPusherBuffOffset = 0;                          }memcpy(fPusherBuff, h264Buf, h264Len);fPusherBuffOffset += h264Len;
}
else
{if (fPusherBuffOffset > 0){memcpy(fPusherBuff + fPusherBuffOffset, h264Buf, h264Len);fPusherBuffOffset += h264Len;}
}

源码及视频教程

源码地址:https://github.com/EasyDarwin/EasyDarwin/tree/master/EasyCamera-HK

视频教程地址:[http://edu.csdn.net/course/detail/3029

](http://edu.csdn.net/course/detail/3029)

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2016

EasyDarwin

EasyCamera海康摄像机向EasyDarwin云平台推送音视频数据的缓存设计相关推荐

  1. 网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient...

    前言 最近在项目中遇到一个奇怪的问题,同样的SDK调用,访问海康摄像机的RTSP流,发保活OPTIONS命令保活,一个正常,而另一个一发就会被IPC断开,先看现场截图: 图1:发OPTIONS,摄像机 ...

  2. 网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient

    前言 最近在项目中遇到一个奇怪的问题,同样的SDK调用,访问海康摄像机的RTSP流,发保活OPTIONS命令保活,一个正常,而另一个一发就会被IPC断开,先看现场截图: 图1:发OPTIONS,摄像机 ...

  3. 将海康摄像机发布萤石云指南

    1.设置摄像机基本属性. (1)给摄像机加电,并使用网线将摄像机接入的网络: (2)安装海康工具SADPTool,安装完成后,打开工具.确保(1)步骤执行后,约30秒时间,即可以在当前工具页面中刷新出 ...

  4. EasyDarwin:海康摄像机IPCamera、NVR、大华IpCamera、NVR设备RTSP地址格式及通用RTSP取地址的方法

    海康(新/老设备通用) rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream 说明: usern ...

  5. RTSP/Onvif摄像机在做H5无插件直播中遇到对接海康摄像机发送OPTIONS心跳的问题

    我们在实现一套EasyNVR无插件直播方案时,选择了采用行业标准的通用协议RTSP/Onvif接入摄像机IPC摄像机 / NVR硬盘录像机设备,众所周知,Onvif是摄像机的发现与控制管理协议,Onv ...

  6. 音视频开发(16)---海康IPC+NVR+EasyDarwin+EasyPusher+VLC实现Web实时播放RTSP视频

    海康IPC+NVR+EasyDarwin+EasyPusher+VLC实现Web实时播放RTSP视频 用ffmpeg+nginx实现web播放rtsp视频,原理是将rtsp转码成rtmp格式,再用fl ...

  7. AI智能视频平台EasyCVR新增接口可对接海康安防综合开放平台

    EasyCVR平台视频能力丰富,可拓展性强,尤其是随着安防市场不断趋向于综合化.智能化升级,EasyCVR平台的融合能力也不断提升.除了多协议.多类型的设备接入,EasyCVR还提供丰富的API接口供 ...

  8. 海康硬盘录像机接入RTSP/onvif协议安防视频平台EasyNVR的注意事项

    EasyNVR安防视频云服务平台可支持设备通过RTSP/Onvif协议接入平台,能提供视频监控直播.录像.云存储.检索与回看.国标级联等视频能力,可支持分发RTSP.RTMP.HTTP-FLV.WS- ...

  9. java GB28181 大华 海康摄像机国标对接源码源代码程序

    java GB28181 大华 海康摄像机国标对接源码源代码程序 本人亲测说明:首先此套程序我测试了可以用,但是不能同时多客户同时看一路视频,视频打开速度也很慢.仅拿来参考是可以的,还凑合吧. WEB ...

  10. 海康摄像机在Win10系统的Web浏览器中无法在线预览解决办法

    作为大企业,肯定是支持主流浏览器的插件安装的,现在不支持是由于谷歌浏览器.Microsoft Edge浏览器等不支持了一批第三方插件.解决办法如下: 首先,参考本人上一篇博客: https://blo ...

最新文章

  1. JavaScript 精粹 基础 进阶(4)对象
  2. QImage与OpenCV中的MAT图像格式转换
  3. Android 之UID and PID
  4. 新浪微博Python客户端接口OAuth2
  5. SAP物料主数据创建时间的线性增长
  6. 标准C库对文件操作的引入
  7. 送你一份用Electron开发桌面应用的避坑指南【送3本书,含犀牛书】
  8. JavaScript学习(三十三)—事件对象常用的属性和方法
  9. iFrame左树目录
  10. 局域网共享工具_Win10局域网共享开启工具
  11. JavaScript页面跳转
  12. inovance变频器说明书参数设置_汇川(INOVANCE)MD300变频器说明书.pdf
  13. 地址总线是单向还是双向_「计算机组成原理」:总线、地址总线、数据总线和控制总线...
  14. 舒尔特方格训练注意力游戏
  15. 在线作图|如何绘制一张气泡图
  16. 一步一步教你Win8专业版+U盘安装+kms激活
  17. SQL查询左连接、右连接、内连接
  18. 计算机平面设计评分标准,竞赛各专业评分标准.DOC
  19. 矩阵分析(1)--一些基本概念
  20. java计算机毕业设计校园快递联盟系统源码+系统+mysql数据库+lw文档

热门文章

  1. 主机ping虚拟机ip请求超时解决办法
  2. wav怎么转换成mp3?步骤详细介绍
  3. 使用网络数据采集的好处
  4. 【linux】通过xshell上传文件
  5. 多源信息融合与多视角学习
  6. php版寿星万年历,寿星万年历电脑版
  7. 解决AndroidStudio报错问题:Missing essential plugin(亲测有效)
  8. 【论文01】人脸图像合成综述
  9. 关于NLSSORT和NLS_SORT的用法
  10. 文献中数学公式规范复制工具——Mathpix Snip