EasyCamera海康摄像机向EasyDarwin云平台推送音视频数据的缓存设计
本文转自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
EasyCamera海康摄像机向EasyDarwin云平台推送音视频数据的缓存设计相关推荐
- 网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient...
前言 最近在项目中遇到一个奇怪的问题,同样的SDK调用,访问海康摄像机的RTSP流,发保活OPTIONS命令保活,一个正常,而另一个一发就会被IPC断开,先看现场截图: 图1:发OPTIONS,摄像机 ...
- 网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient
前言 最近在项目中遇到一个奇怪的问题,同样的SDK调用,访问海康摄像机的RTSP流,发保活OPTIONS命令保活,一个正常,而另一个一发就会被IPC断开,先看现场截图: 图1:发OPTIONS,摄像机 ...
- 将海康摄像机发布萤石云指南
1.设置摄像机基本属性. (1)给摄像机加电,并使用网线将摄像机接入的网络: (2)安装海康工具SADPTool,安装完成后,打开工具.确保(1)步骤执行后,约30秒时间,即可以在当前工具页面中刷新出 ...
- EasyDarwin:海康摄像机IPCamera、NVR、大华IpCamera、NVR设备RTSP地址格式及通用RTSP取地址的方法
海康(新/老设备通用) rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream 说明: usern ...
- RTSP/Onvif摄像机在做H5无插件直播中遇到对接海康摄像机发送OPTIONS心跳的问题
我们在实现一套EasyNVR无插件直播方案时,选择了采用行业标准的通用协议RTSP/Onvif接入摄像机IPC摄像机 / NVR硬盘录像机设备,众所周知,Onvif是摄像机的发现与控制管理协议,Onv ...
- 音视频开发(16)---海康IPC+NVR+EasyDarwin+EasyPusher+VLC实现Web实时播放RTSP视频
海康IPC+NVR+EasyDarwin+EasyPusher+VLC实现Web实时播放RTSP视频 用ffmpeg+nginx实现web播放rtsp视频,原理是将rtsp转码成rtmp格式,再用fl ...
- AI智能视频平台EasyCVR新增接口可对接海康安防综合开放平台
EasyCVR平台视频能力丰富,可拓展性强,尤其是随着安防市场不断趋向于综合化.智能化升级,EasyCVR平台的融合能力也不断提升.除了多协议.多类型的设备接入,EasyCVR还提供丰富的API接口供 ...
- 海康硬盘录像机接入RTSP/onvif协议安防视频平台EasyNVR的注意事项
EasyNVR安防视频云服务平台可支持设备通过RTSP/Onvif协议接入平台,能提供视频监控直播.录像.云存储.检索与回看.国标级联等视频能力,可支持分发RTSP.RTMP.HTTP-FLV.WS- ...
- java GB28181 大华 海康摄像机国标对接源码源代码程序
java GB28181 大华 海康摄像机国标对接源码源代码程序 本人亲测说明:首先此套程序我测试了可以用,但是不能同时多客户同时看一路视频,视频打开速度也很慢.仅拿来参考是可以的,还凑合吧. WEB ...
- 海康摄像机在Win10系统的Web浏览器中无法在线预览解决办法
作为大企业,肯定是支持主流浏览器的插件安装的,现在不支持是由于谷歌浏览器.Microsoft Edge浏览器等不支持了一批第三方插件.解决办法如下: 首先,参考本人上一篇博客: https://blo ...
最新文章
- JavaScript 精粹 基础 进阶(4)对象
- QImage与OpenCV中的MAT图像格式转换
- Android 之UID and PID
- 新浪微博Python客户端接口OAuth2
- SAP物料主数据创建时间的线性增长
- 标准C库对文件操作的引入
- 送你一份用Electron开发桌面应用的避坑指南【送3本书,含犀牛书】
- JavaScript学习(三十三)—事件对象常用的属性和方法
- iFrame左树目录
- 局域网共享工具_Win10局域网共享开启工具
- JavaScript页面跳转
- inovance变频器说明书参数设置_汇川(INOVANCE)MD300变频器说明书.pdf
- 地址总线是单向还是双向_「计算机组成原理」:总线、地址总线、数据总线和控制总线...
- 舒尔特方格训练注意力游戏
- 在线作图|如何绘制一张气泡图
- 一步一步教你Win8专业版+U盘安装+kms激活
- SQL查询左连接、右连接、内连接
- 计算机平面设计评分标准,竞赛各专业评分标准.DOC
- 矩阵分析(1)--一些基本概念
- java计算机毕业设计校园快递联盟系统源码+系统+mysql数据库+lw文档