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网络服务或者第三方流媒体服务,实现传统安防设备互联网级别的直播与分发!此外,平台提供试用版本供大家测试使用,欢迎大家的了解。

  • 相关阅读:
    css学习总结
    bootstrap的学习总结
    一些组件配置的理解
    php 微信公众号支付(小程序也是这么支付的)
    mysql 链接超过ip限制时的报错
    php生成二维码
    wamp配置虚拟主机 php 5.6.25
    php 渣全的循环
    4、kafka、spark streaming
    gauss消元
  • 原文地址:https://www.cnblogs.com/EasyNVR/p/13949584.html
Copyright © 2011-2022 走看看