EasyNVR无插件直播服务器如何使用ffmpeg实现摄像机快照功能的

EasyNVR提供快照预览功能,并且提供向EasyDSS云平台上传快照的功能

EasyNVR会定时向配置的摄像机抓取快照数据,保存图片用于预览,并且用于快照上传

原理

将从摄像机取出来的I帧数据编码成jpeg图片数据

实现

AVPacket管理,使用wrapper管理AVPacket的资源

class AVPacketWrapper
{
public:
AVPacketWrapper()
: packet_(new AVPacket)
{
av_init_packet(packet_);
packet_->data = NULL;
packet_->size = 0;
} explicit AVPacketWrapper(size_t size)
: packet_(new AVPacket)
{
av_new_packet(packet_, size);
} ~AVPacketWrapper()
{
if (packet_)
{
av_packet_unref(packet_);
delete packet_;
}
} AVPacket* getPacket() const
{
return packet_;
} private:
AVPacketWrapper(const AVPacketWrapper&);
AVPacketWrapper& operator =(const AVPacketWrapper&); AVPacket* packet_; };
int DecoderHelper::DecodeVideo(char* inBuff, int inBuffSize)
{
if (!inBuff)
return -1; if (1 > inBuffSize)
return -1; if (!avCodecContext_)
{
releaseVideoDecoder();
return -2;
} AVPacketWrapper packetWrapper;
AVPacket* packet = packetWrapper.getPacket(); packet->size = inBuffSize;
packet->data = reinterpret_cast<uint8_t*>(inBuff); int ret = avcodec_send_packet(avCodecContext_, packet);
if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
{
return -3;
} ret = avcodec_receive_frame(avCodecContext_, avFrame_);
if (ret < 0 && ret != AVERROR_EOF)
{
return -3;
} return 0;
}

关于EasyNVR

EasyNVR能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP协议输出的设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),并且EasyNVR能够将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发;

详细说明:http://www.easydarwin.org/easynvr/

点击链接加入群【EasyNVR解决方案】:383501345

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyNVR无插件直播服务器如何使用ffmpeg实现摄像机快照功能的

上一篇:EasyNVR无插件直播服务器软件览器低延时播放监控摄像头视频(EasyNVR播放FLV视频流)


下一篇:EasyNVR无插件直播流媒体服务器云端集中管控的EasyNVS云管理平台安装使用文档