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)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)