zoukankan      html  css  js  c++  java
  • RTSP/GB28181/EHOME协议安防视频融合平台EasyCVR视频云服务报错 “Assertion desc failed at src/libswscale/swscale_internal

    TSINGSEE青犀视频云-边-端协同架构中的安防视频云服务EasyCVR是一个视频融合平台,负责国标GB/T28181、海康SDK、ONVIF、RTSP协议、Ehome协议等多种标准的安防视频流的接入和转发,可实现安防视频流的快速采集、转流上云能力。支持网络摄像机(Axis,Bosch、海康威视、大华、宇视、华为等主流品牌)、GB/T28181设备/平台、Ehome协议等通过标准协议接入云资源。也可通过各类型上云网关,将RTSP协议、Onvif协议、海康SDK等内网设备/平台接入云资源。接入云端的安防视频可对接包括云转码、云直播、云存储和CDN加速分发等一系列视频服务,最大限度的拓展监控视频的应用能力。

    在EasyCVR开发过程中,对于视频的解码会出现“Assertion desc failed at src/libswscale/swscale_internal.h:668”错误,导致整个程序崩溃。

    原因分析

    由给出的代码提示可以看出为 libswscale 中的错误。libswscale 的作用主要为格式转化的功能。于是我们定位到主要是 sws_getContext 函数出现错误。当该函数获取的高度height不正确时,就会出现此种错误。

    img_convert_ctx = sws_getContext(width, height,
    		codecCtx->pix_fmt,
    		codecCtx->width, codecCtx->height,
    		AV_PIX_FMT_BGR24,
    		SWS_BICUBIC, NULL, NULL, NULL);
    

      

    解决方案

    该函数中 width 和 height 是由外部函数传递进入的,因此没办法进行控制,当调用者传递出错误的数据时,比如 0 确实会出现此种错误。

    一种解决办法是检验 width 和 height 的值,对于不符合的值,直接提示输入参数错误。

    此种解决方法主要是进行检验,认真检查代码逻辑后,发现此函数不需要进行转换高度和宽度的转化,因此用原先的高度和长度即可,因此不进行检验,直接使用解码的高度和宽度,代码如下:

    img_convert_ctx = sws_getContext(codecCtx->width, codecCtx->height,
    		codecCtx->pix_fmt,
    		codecCtx->width, codecCtx->height,
    		AV_PIX_FMT_BGR24,
    		SWS_BICUBIC, NULL, NULL, NULL);
    

      

    上面函数即使用了解码器中的高度codecCtx->height和宽度codecCtx->width。修改完毕后代码正常运行。

    EasyCVR作为TSINGSEE青犀视频云-边-端架构中唯一一款视频各大协议视频融合平台,具有很高的开放性和兼容性,我们提供了丰富的二次开发接口让大家调用。通过EasyCVR接入,将这些设备端的音/视频数据进行采集、转换、输出,进行全平台(PC、Android、iOS)、全终端直播(C/S、Web、App、H5、微信、小程序),并且EasyCVR视频智能融合共享平台能够将视频源的直播数据对接到第三方CDN网络服务或者第三方流媒体服务,实现传统安防设备互联网级别的直播与分发!此外,平台提供试用版本供大家测试使用,欢迎大家的了解。

  • 相关阅读:
    HDU 1114 Piggy-Bank
    HDU 2955 Robberies
    NTOJ 290 动物统计(加强版)
    POJ 3624 Charm Bracelet
    HDU 2602 Bone Collector
    POJ 1523 SPF(无向图割顶)
    HDU 5311 Hidden String
    HDU 1421 搬寝室
    HDU 1058 Humble Numbers
    POJ 3259 Wormholes(spfa判负环)
  • 原文地址:https://www.cnblogs.com/EasyNVR/p/13949584.html
Copyright © 2011-2022 走看看