此次项目需求是接入海康威视的网络智能摄像头实现实时监控。网上搜罗一番,也有挺多例子的,但是大多数都是通过官方提供的rstp协议地址实现,为了自己记忆,在下打算在这里记录一下,不需要的可以跳过这里哈(这里采用一个叫UMP的插件,当然还有其他Vlc for unity,openCV等都可以实现的)
首先贴一下海康的rtsp协议地址:
rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream
说明:
username: 用户名。例如admin。
password: 密码。例如12345。
ip: 为设备IP。例如 192.0.0.64。
port: 端口号默认为554,若为默认可不填写。
codec:有h264、MPEG-4、mpeg4这几种。
channel: 通道号,起始为1。例如通道1,则为ch1。
subtype: 码流类型,主码流为main,辅码流为sub。
例如,请求海康摄像机通道1的主码流,Url如下
主码流:
rtsp://admin:12345@192.0.0.64:554/h264/ch1/main/av_stream
rtsp://admin:12345@192.0.0.64:554/MPEG-4/ch1/main/av_stream
子码流:
rtsp://admin:12345@192.0.0.64/mpeg4/ch1/sub/av_stream
rtsp://admin:12345@192.0.0.64/h264/ch1/sub/av_stream
然后插件的名字叫UMP 地址我就不贴了,搜一下会有的哈。导入后是这样的
然后随便选一个场景填入你的rtsp地址
然后这是运行的效果
但是本人通过测试后发现延迟~额。。。有一丢丢小高,于是继续搜罗,发现海康的SDK里的函数是可以回调获取视频流的数据的,还提供了一个播放库的SDK,同过此SDK的方法可以将标准的视频码流转换为YV12的格式,相信研究过视频流的对这个格式都不陌生吧,没错,小白我准备在unity中将这个格式的数据实时生成一帧一帧的textur2d,然后,上步骤
首先下载海康最新的SDK包
地址:http://www.hikvision.com/cn/download_more_570.html
记住播放库的也一起下来哦、
前一部分的实现代码其实官方已经提供了各种各样的案例 C#和C++的都有,但是看过代码的同学应该都会知道,在这写Demo中想要播放视频都有一个必不可少的参数就是窗口的句柄Handle,就是一个IntPtr类型的参数,但是untiy中。As you konw ,哪里来的句柄啊,UI都是画出来的嘛,整个unity才是一个窗口,但是SDK中也说了可以给这个参数传空然后给一个回调函数来获取这些视频数据,
记住这个回调函数里是用来启用Play_M4播放库解码的(有点长,还是不贴图片贴代码号了,不要喷我乱(* ̄︶ ̄))
/// <summary>
/// 获取数据流回调函数
/// </summary>
/// <param name="lRealHandle">L real handle.</param>
/// <param name="dwDataT