越来越多人的开始将普通安防摄像机接入网络流媒体服务器,进行网络直播。但是市面上安防摄像机的品牌、型号比较多,想通过SDK方式接入这些各种摄像机不现实。由于安防摄像机基本都是可以输出rtsp流,因此我们可以用拉取RTSP流的方式来兼容各家的摄像机。liveNVR就是实现接入普通RTSP/Onvif的安防摄像机,转成RTMP和HLS流,可以在各平台上进行H5 web直播或者app直播。
直播方案中快照抓取liveNVR实现了拉取摄像机RTSP流,实现监控直播。直播的过程只是流媒体数据转发的过程,不进行解码,这样对cpu等硬件资源消耗较小。
但是直播时,可能希望定时抓取一张实时图片进行封面展示、数据分析等。这种情况就需要定时获取一帧数据进行解码,抓成jpg或bmp图片。
如下是将视频某一帧数据转成图片的代码:
bool liveNVRChannel::rawData2Image(char* rawBuf,int bufSize,int codec,int wIDth,int height,const char* jpgpath){ decodeParam.codec = codec; decodeParam.wIDth = wIDth; decodeParam.height = height; if (!decoderHelper_) { decoderHelper_ = new DecoderHelper; } decoderHelper_->SetVIDeoDecoderParam(wIDth,height,codec); int ret = decoderHelper_->DecodeVIDeo(rawBuf,bufSize); if (ret < 0) { return false; } decoderHelper_->WriteJPEG(jpgpath); if (QTSServerInterface::GetServer()->GetThrIDPartPlatformModule()) { if (!decodeParam.imageData) decodeParam.imageData = new char[wIDth * height * 3]; memset(decodeParam.imageData,wIDth * height * 3); file* snapfile = ::fopen(jpgpath,"rb"); if (snapfile) { // obtain file size: 获得文件大小 ::fseek(snapfile,SEEK_END); // 指针移到文件末位 decodeParam.imageSize = ftell(snapfile); // 获得文件长度 ::rewind(snapfile); // 函数rewind()把文件指针移到由stream(流)指定的开始处,同时清除和流相关的错误和EOF标记 ::fread(decodeParam.imageData,1,decodeParam.imageSize,snapfile); ::fclose(snapfile); } } return true;}在线演示
liveNVR就是实现将传统安防RTSP摄像机实现在互联网直播、录像、回放,兼容windows和各移动终端。
大家可以在 http://nvr.liveqing.com:10800
技术交流QQ群:947137753
咨询电话:15156896292(同微信)
下载:https://www.liveqing.com/docs/download/LiveNVR.html
WEB:www.liveqing.com
总结以上是内存溢出为你收集整理的监控摄像头WEB端直播快照抓取,GB28181、RTSP都可以实现全部内容,希望文章能够帮你解决监控摄像头WEB端直播快照抓取,GB28181、RTSP都可以实现所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)