项目记录-”海迪康”ipcamera客户端开发纪实
一开始拿到IPcamera是为了在预警系统中加入一个摄像头,正好老师带来了一个IPcamera,但是并没有说明书和文档,一开始听到这个名字还以为只要知道了这个IP地址就可以为所欲为了,OK,NO,拿到了地址也并不知道怎么操纵,上网搜了一下“海迪康”这个牌子,搜到了做监控的大厂的海康威视的论坛,里面有海康摄像头的开发者说明书,下了一个ActiveX插件,很迷,改了UID和密码试了一下竟然成功连上。这时候不知道原理,只是把他嵌入到我们的网页中,匆匆实现了一下这部分功能。
然后开始跟熊大研究如何了解这个摄像头的原理,利用wireshark抓到了“官方”客户端与摄像头通信的包。(第一次感受到wireshark的强大)
拿到了通信的数据包,各种猜,我们得出了初步的解析。
前提条件:摄像头,电脑连接到同一局域网
交互流程:
2017进展:将摄像头获取到的h264裸流整理保存成264文件,利用ffplay、爱奇艺万能播放器等可以播放
思路:将收到的裸流利用ffmpeg实时编码成yuv数据,利用SDL、OpenGL、Direct3D等底层视频播放技术对YUV数据进行播放
需要解决的问题:首先ffmpeg的例子针对视频的解码都是以文件为对象的,也就是说无法实时进行解码,想要解码一定要先保存成文件再进行解码操作,看了ffmpeg源码,他的内部是逐帧进行操作的,但是想要灵活运用ffmpeg源码还是有难度的,不知道ffmpeg有关的函数,而且底层播放技术也不熟悉,这是个问题!下一步是学习ffmpeg的解码处理过程以及其中用到的函数。
2018进展:利用回调方法实现了ffmpeg解码+SDL实时播放的功能,但有明显卡顿和延迟
过程:在找到ffmpeg回调方法之后,尝试了利用文件作为缓冲“实时”播放视频,将视频循环存储到9个文件中,程序依次读取文件并进行播放,第一次在实时播放上有了进展,但是毕竟存和读不能同时进行,所以势必会有延迟,而且打开文件的间隙会卡顿。于是在雷神的博客中找到了内存中取数据解码利用回调函数进行解码播放。
https://blog.csdn.net/leixiaohua1020/article/details/12980423
在做这个的过程中还加深理解了传递指针的意义。
回调函数方法的核心是编写read_packet()函数,这个函数是主要是AVIOContext结构体需要,作为解码的数据来源使用,一旦解码需要更多数据,便调用此函数。
我设置了一个缓冲区,一个10000*9字节的数组,接受线程将接收到的h264裸流存到数组中,解码播放线程利用read_packet()函数读取数组中的数据,基本上实现了功能
缺点:卡顿,延迟,失真
我发现用这个方法时,由于ffmpeg解码需要流来判断文件格式,判断帧类型,判断关于视频的各种参数,而且经常需求>供给,按理说如果是解码速度快与接收速度的话视频应该不会卡,但是视频经常卡,所以猜测有可能是它要收到一定量的码流数才开始解析,而大小远超过真实的一帧的长度,或者有可能有一些码流没有完整解析所以造成了卡顿。
优化方法:
1.调节read_packet()读取的buffer长度
2.优化read_packet()中buf的赋值方法
最新进展:利用 av_parser_parse2() 函数进行逐帧解码,不用回调方法,延迟少于1秒,不卡顿,秒开屏。
果然之前卡顿大部分原因是时间损失到函数调用上,加上这次直接指定视频格式和窗口大小,不需要找解码器,解码流程速度加快。
经过后来的学习发现,问题应该是在解码参数的设置上,我并没有设置解码参数,比如B帧的存在,帧的延迟输出。
项目记录-”海迪康”ipcamera客户端开发纪实相关推荐
- C# 海康DVR客户端开发系列(3)—— 连接DVR和图像预览
前言 一直没有稳定的DVS供我测试用,朋友那边也是频频宕掉,所以延误至今,所幸还是出来了.此外非常遗憾的是没能用WPF实践成功,关键是IntPtr句柄设置不对,没法显示出来,为了保证进度也只好暂时放弃 ...
- C# 海康DVR客户端开发系列(1)—— 准备
一.理论知识 硬盘录像机(DigitalVideoRecorder,DVR),即数字视频录像机,相对于传统的模拟视频录像机,采用硬盘录像,故常常被称为硬盘录像 机,也被称为DVR.它是一套进行图像存储 ...
- C# 海康DVR客户端开发系列(2)—— 封装API
前言 从上篇文章(10月4日)到本篇文章截止到今天(10月22日)一直在做这个SDK翻译工作,耗时2周半,代码超过1万行,约有三分之二的行数是注释.由于工作忙也只能一天抽出那么半个小时一个小时来整理, ...
- C# 海康DVR客户端开发系列(2)—— 封装API (1)
更新 本文会随着后续实践文章有相应的改动,请及时更新! 2010-12-21 HCNetSDK2010-12-21.rar 主要更新了SerialDataCallBack委托的pRecvDataBuf ...
- 开篇--基于Android的小巫新闻客户端开发
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 开篇-- ...
- 腾讯游戏客户端开发面试
碎碎念----第一次腾讯游戏客户端开发面试 作为一个本科.研究生专业都跟计算机不沾边的学生,简历被通过筛选本来就应该是最好的结果了,然而自己还是抱着一点点的期望,万一自己就通过了所有面试,进入腾讯 ...
- java 前台播放视频_「纯js项目」海康视频项目,java后台+前台web显示的,望提供思路!...
纯js项目: 海康视频项目,java后台+前台web显示的,望提供思路! 如果只是实现BS架构,可以向海康要web开发包,直接使用浏览器通过ocx访问海康设备浏览视频,如果需要的功能不全,再使用JNI ...
- Unity客户端开发面试题记录
Unity客户端开发面试题记录 1.如何理解面向对象思想 A:面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节.面向对象的特征是:封装,继承,多态.多态就是接口的多种不同 ...
- 自学CTP客户端开发记录001
CTP客户端开发指南 1. CTP 1.1 介绍 1.2 FTD 通讯协议 1.2.1 通讯模式 1.2.2 数据流 1.3 两种数据交换模式 1.3.1 请求应答模式 1.3.2 发布订阅模式 1. ...
最新文章
- 【转】Android studio安装与配置
- RK3288 双屏异显,两屏默认方向不一致
- 操作系统(2) -- 进程管理
- 中南大学计算机在线考试答案,中南大学计算机考试复习题
- 胶囊路由_评论:胶囊之间的动态路由
- 《ASP.NET Core 微服务实战》译者序
- linux 程序运行出错的时候,如何进行调试动态库
- HALCON 20.11:深度学习笔记(12)---语义分割
- ubuntu服务器设置_Ubuntu服务器设置–安全最佳实践
- 喜欢熬夜的人注意!出现3大迹象时,说明身体极度危险!
- Aberrant DSP SketchCassette II Mac(磁带混音效果插件)
- ba网络c语言编程,如何用C语言程序构造随机网络和BA无尺度网络
- java heapdump 分析工具_Java Heap dump文件分析工具jhat简介
- 一个静态路由配置实例(eNSP)
- Mirth学习笔记 - 建立Mirth通道
- 三种方法破解系统管理员密码
- 网易云到“网抑云”:分析用户运营的指标监控和召回机制
- 2020-04-15-52brain公众号目录【2020年3月】
- 一个女测试工程师的成长之路
- 精准鉴别初级、中级、高级程序员,你是哪一种?
热门文章
- 谷歌移动端seo优化如何做
- 【FPGA】Vivado状态机设计
- Maya:绑定—机械臂动画
- 2021高考成绩查询理综各科得分,2021四川高考总分及各科分数 满分是多少
- 简单说明JSP和Java的关系_JSP 总结
- 如何自定义百度云常用服务器,经验分享:如何将百度云做成网站文件服务器
- 地大计算机学院田甜,【学霸画像】第七十一期—记计算机学院2013级本科生詹才韬...
- 全球及中国M2M组件行业需求规模与投资效益预测报告2022~2027年
- 2017百度之星初赛(B)1006小小粉丝度度熊------hdu6119
- nginx的配置文件详解