说说项目的实际需求吧,
项目用的是天地伟业的录像机,我们用unity创建大楼三维场景,并对接视频。
实时视频用rtsp从录像机取,没问题。历史视频(视频回放,playback)我原本以为也能用rtsp取,仅仅是url地址中加上时间参数,谁找到不支持,根据查到的资料,海康威视和宇视支持这种回放,其他场景不支持。
参考:最新海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明(https://www.jianshu.com/p/7fa312f168f8)
海康的回放url规则
然后天地伟业提供的sdk的接口是用句柄获取
NetClient_PlayBack
录像回放
int __stdcall NetClient_PlayBack(
unsigned int* _ulConID,
int _iCmd,
PlayerParam* _PlayerParam,
void* _hWnd
);
Parameters
_ulConID
[out] 连接ID。
_iCmd
[in] 配置命令,参见配置命令。
_PlayerParam
[in] 下载回放参数。
_hWnd
[in] 播放窗口句柄。
Return Values
0:成功。
<0:操作失败,通过GetLastError获得错误码信息
句柄在unity中是无法使用的,码流的话还有办法(以前对接海康的sdk,码流在unity中解析也好累,同事做的)。
通过前面的学习,以及想到他提供视频下载的功能,那我是不是可以在服务端下载视频,服务端电脑搭建rtmp服务器,把下载的视频通过ffmpeg推到rtmp服务器上,用HLS在unity中取刚刚的文件。
但是现在有问题,视频监控下载下来的文件是sdv格式(换式视频广播,英文全称是Switch Digital Video, 以下简称SDV)。然后我没有查到能否直接用ffmpeg把sdv格式图片推流。
而且我还不在现场,现在在现场的人忙着做其他事,时间还紧,我现在还没有个sdv文件。关键是这个功能合同里面并没有明确写上,甲方要,领导不让做,有其他任务。
哎,我是想搞的,这个技术本身对我们其他项目是有帮助的。
最最关键的我现在搞不到sdv格式的文件。
-----------------------------------------------------------------------------
最新进展,发现天地伟业的SDK可以下载mp4格式的视频,(下载格式是sdv是他们技术支持人员说的,技术支持通常不是技术人员......),他们自己后缀是ps,ps(mp4),不知道怎么想的。反正下载下来后,放到hls目录中,vlc和unity的ump可以播放。
这样子的话,技术可行性算是通过了,接下来就是堆积代码,构建应用了。不保证用户体验效果,总之应该能做。
1.客户端(unity)构建一个查询界面,没有界面也没关系,传给服务端要查询哪段时间的哪个摄像头,因为是通过录像机取的,就是哪个通道。
2.服务端调用SDK代码,下载文件。
3.客户端同时轮询下载进度,SDK的Demo就是这么干的,Timer里面轮询进度。