请问如何获取IP camera每一帧的时间

请问如何获取IP camera每一帧的时间,第1张

1设备

这里用的是海康的鱼眼摄像头,型号是DS-2CD3955FWD-IWS,其实基本上能支持sdk二次开发的IP摄像头都可以(参考这里)。鱼眼摄像头相比普通的摄像头经过扭曲,因此在应用的时候一般需要进行反扭曲,这一步会造成比较大的延迟,因此没有不是特定需求的话尽量使用普通的就可以。

注:海康的萤石系列貌似并不能通过RTSP地址获取,而这里的方法需要用RTSP进行视频流获取,所以无法萤石系列就不在此列。

2通过RTSP地址获取视频流

首先需要知道海康设备的RTSP地址,可以通过这里进行查看。

import cv2

source = ""rtsp://admin:12345@192168164/Streaming/Channels/1"

注: admin和12345分别是ip camera的用户名和密码,在浏览器上第一次登录摄像头的时候会进行设置;

192168164是摄像头的默认IP,在浏览器中输入即可进入登录页面(如下);

Channels/1和Channels/2分别对应主码流和子码流地址,两者的分辨率不同。IP摄像头无法通过opencv调节分辨率,只能在海康的监控界面的配置进行设置(如下)。

3 摄像头校准(calibration)(optional)

这个配置有很多,而且官方提供的校准文档很详细(戳这里),就不具体细讲了。需要python版本的代码的话可以直接fork这里;如果是c++版本的话可以参考这里

首先连接还是正常的使用videocapture()函数,传入地址后用imshow()读取视频流。

重点来了, rtsp流无法读取的时候。我们一般能在网络摄像头中找到有关码流的设置

其中主码流是rtsp格式,而辅码流是可以选择mpeg格式的。

这就是解决问题的重点,既然我们无法用imshow()函数播放rtsp码流,那么可以曲线救国,选择mpeg格式的辅助码流!

最近需要做实时录屏并把视频推流到RTSP服务器,具体流程是抓取屏幕内容(bitmap),并把bitmap转化为YUV,接着把YUV编码成H264,再把H264码流推到RTSP服务器;把采集到的PCM编码为AAC,再把AAC推流至RTSP服务器。

看了雷神的一篇文章: 最简单的基于FFmpeg的推流器(以推送RTMP为例) ,他是把本地的视频文件推流至RTMP服务器,并不符合我的要求。

接着我找到另一篇文章: ffmpeg实现H264压缩并且推流至RTSP ,这篇文章只有图像编码,并没有音频编码,并且推流之后并没有播放成功。

我综合上面两位大佬的思路,和查找一些资料实现了这个功能。

RTSP服务器使用的是 HappyTime 的免费试用版本。

我抓到的bitmap是BGRA格式的,所以使用的图像格式是 AV_PIX_FMT_BGRA cropImage 是含有rgba图像的数组

调用:

由于我是实时抓取的屏幕, frame_yuv->pts 设为当前的时间戳,以保证能正常播放。

调用:

调用:

其中pcm_buff是包含pcm数据的数组

使用udp传输时传到1400多帧就断开链接了,原因不明,所以改用使用tcp协议传输

延迟有15秒左右

参考:

>

最近发现有的网站上,显示的视频流很丝滑,而且在多路情况下不会出现页面卡死。 总结了一下所使用的技术。

后端推消息,把数据转为json字符串,通过websocket推给前端, 使用base64编码

{

"channel": "camera_1",

"url": "data:image/png;base64,iV"

}

前端接收到数据后,解码,使用img 标签展示 base64

客户端的传输方式改为 ArrayBuffer方式。将channel、文件流等信息拼接为二进制数据。 通过websocket推送给前端

举例:

channel频道: camera_1 占两个字节;

: file文件流 占128字节

字节顺序 Little-endian

前端读取为ArrayBuffer, 通过视图 *** 作,取出的二进制流,生成Blob对象

读取blob对象, 返回 URL格式的字符串(base64编码)以表示所读取文件的内容

前端img 标签 src 赋值为 base64 字符串,显示视频流。

rtsp流在主流浏览器并不支持直接播放。比如大华的视频流:rtsp://admin:123456@

19216810129/cam/realmonitorchannel=1&subtype=0,用vlc可以直接播放。但在浏览器会报ERR_UNKNOWN_URL_SCHEME。那如何在浏览器中播放呢。

以下列出几种方案。

1、安装插件(chrome最新版基本都不支持)

类如:kurento,vlc插件(谷歌浏览器版本41以下),vgx插件(不支持高版本,chrome720版本可用)等。

2、安装软件(中间件,基本都付费)

类如:Appemit(调用vlc插件播放rtsp),可以免安装的,目前只能windows,免费版会有提示。

猿大师中间件(底层调用VLC的ActiveX控件,实现在主流浏览器网页中内嵌播放多路RTSP的实时视频流),中间件收费的。

PluginOK(牛插)中间件。底层调用ActiveX控件VlcOcxdll。(商业用途需付费使用)

3、服务器拉流转发及协议转换

示意图如下所示:

推流--------------服务器转发--------------拉流

方法一览:

a,vlc软件串流到>

如何通过RTSP将流拉到Wowza Stream Engine 4

环境变量的配置

在(系统属性-->高级-->环境变量-->系统变量 中)(以下目录都根据自己的电脑MinGW所在位置不同而改变)

a在PATH的值中加入“C:\Program Files\MinGWStudio\MinGW\bin”。这是寻找gcc编译器的路径。如果PATH中还有其他内容,需要用英文状态下分号进行分割

b新建LIBRARY_PATH变量,在其值中加入“C:\Program Files\MinGWStudio\MinGW\lib”。这是标准库存放的路径。

c新建C_INCLUDE_PATH变量,在其值中加入“C:\Program Files\MinGWStudio\MinGW\include”。这是Include查找头文件的路径。

找厂家要搜索软件,不同藏家都会有自己的搜索软件,确实木有的话下一个wireshark,只把摄像机连在电脑上惊醒抓包能看到来源ip。

问题理解有偏差,同样的你可以再上面我说的额软件中看到rtsp协议的端口,截取。

以上就是关于请问如何获取IP camera每一帧的时间全部的内容,包括:请问如何获取IP camera每一帧的时间、有关opencv无法解码网络摄像头rtsp流的解决办法、FFmpeg 代码实现流媒体推流(RTSP)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10219220.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存