zoukankan      html  css  js  c++  java
  • 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

    EasyDarwin

  • 相关阅读:
    curl 带 body
    import com.sun.org.apache.xml.internal.security.utils.Base64问题
    动静分离业务解决网页请求不被串改
    java 主动信任证书
    IO 多路复用详解
    spanish-1.1
    spring data JPA entityManager查询 并将查询到的值转为实体对象
    微信二维码支付报错
    军训入营学生发言稿
    电位器控制两个 LED 灯交替闪烁
  • 原文地址:https://www.cnblogs.com/babosa/p/9217753.html
Copyright © 2011-2022 走看看