zoukankan      html  css  js  c++  java
  • 网络摄像机RTSP流媒体协议视频平台EasyNVR如何根据H264的SPS获取视频分辨率?

    H264 ES流中的sps nalu中可以提取出视频宽度和高度的信息,有时可以得到固定帧率的信息,而对于变帧率的视频有时候得不到帧率信息,需要根据时间戳来呈现。RTSP协议视频平台EasyNVR在拉取视摄像机视频流的时候,如果摄像机在取流以后改变分辨率,EasyNVR获取的分辨率没有改变,就会导致播放异常。

    所以我们可以根据H264的SPS实时获取视频分辨率,通过wireshark 抓取到H264的SPS如下:

    根据H264的文档说明,可以通过SPS中的不同字段计算出当前视频的分辨率。宽高可从SPS字段计算得到,公式如下:

    Width = (pic_width_in_mbs_minus1+1)16;
    Height = (pic_height_in_map_units_minus1+1)16;
     
    Width = (39+1)* 16 = 640
    Height = (22+1) * 16 = 368
    

      

    根据此公式获取到的分辨率是 640368,但是实际上摄像头的设置分辨率是640360。在高度上,计算出的结果存在误差。

    所以以上计算是针对宽高是16的整数倍的情况下,如果不是,则需要进行修正,修正公式如下:

    Width = ((pic_width_in_mbs_minus1 +1)*16) - (frame_crop_left_offset+frame_crop_right_offset)*2
     
    Height = ((2 - frame_mbs_only_flag)* (pic_height_in_map_units_minus1 +1) * 16) - (frame_crop_top_offset + frame_crop_bottom_offset)* 2;
     
    Width = (39+1)*16 - (0+0)*2 = 640
    Height = (2-1)*(22+1)*16-(0+4)*2 = 23*16 -8 = 360
    

      

    获取分辨率为640*360 与摄像头一致,分辨率的问题解决了,视频播放的问题也将迎刃而解。

    EasyNVR可以输出四种格式的视频流,分别是RTSP/RTMP/HLS/FLV,经过我们的测试,RTMP视频流是目前延迟最小的视频流,在不受网络带宽和服务器配置影响下,理论延时最小只有500ms。如若想了解更多内容,欢迎访问TSINGSEE青犀视频,也可以随时咨询我们获取测试账号进行测试。

    EasyDarwin开源流媒体服务器,是由国内开源流媒体团队TSINGSEE青犀视频开发和维护的一款开源流媒体平台框架。从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构的开源项目。

     
  • 相关阅读:
    ArcGIS API中FindTask中文搜索无效,服务器编码问题URIEncoding="utf-8"
    ArcGIS10.1 api for Flex开发用于ArcGIS 9.3时QueryTask 'Error #2032'错误的解决方案
    Arcgis API For IOS扩展AGSDynamicLayer新旧版API对比
    谈FME批量自动化数据转换方法
    浅谈城市规划在移动GIS方面的应用发展
    JS-JQuery(JSONP)调用WebService跨域若干技术点
    CAD规划成果入库GIS_SDE转换之分析
    Web前台直接加载GIS格式数据分析
    [转] 基于ArcGISServer实现活动地图标注
    程序员如何利用空闲时间挣零花钱
  • 原文地址:https://www.cnblogs.com/EasyNVR/p/13712562.html
Copyright © 2011-2022 走看看