这个清明节多请了两天假,就为了回老家戒烟。在老家上网又不大方便(因为老家正常一年到头也只有过年的时候才有人),闲着真的好无聊,又加上前阵子左思右想想出路,陷入第二个“大学时期”,结果睡眠不足,导致牙痛,牙痛又引发喉咙痛,头也痛,浑身无力,回家那天又开了3个钟头的车,后来在床上躺了几天,用老婆的话讲,就是当了几天“皇帝”(这皇帝真不好当)。
再后来就又捡起这个EzStreamSvr搞了起来。
由于来问这个EzStreamSvr怎么做的人更多的还是视频监控行业的人,而国内的视频监控行业设备基本上都还是大华、海康的设备为主,所以,就想让EzStreamSvr也可以支持大华、海康等的设备。
不过,问题是包括大华、海康在内的、国内的这些设备,跟国外的许多视频监控的设备完全不一样。国外的基本上所有的协议都是走标准的,如:视频走HTTP或RTSP+RTP协议,命令走HTTP协议;而国内的这些所谓的大厂家,全都是直接基于TCP/UDP搞一套私有协议, 搞的乱七八糟,完全没有什么兼容性和开放性可言,更有甚之,海康早期的设备(8000系列的DVR和6000系列的DVS连视频打包都搞了一套自己的东西)。
为了解决这个问题,我只有再重新将EzStreamSvr再单独增加了一个模块来完成接入,当然,与此同时,必然的是,我也只有用他们提供的SDK来完成这个接入。
到现在为止,终于完成了一个版本,但由于时间关系,只能支持大华系列的DVR和DVS,理论上讲可以支持大华所有系列的设备。现在这个版本先放上来,跟大家分享。
这样,EzStreamSvr已经可以支持三种模式的多媒体源:
1. 从服务器采集音视频,编码后进行分发、录像和实时浏览。
2. 从标准的RTSP/RTP/RTCP的流媒体源接入视频,并进行分发、录像和实时浏览。
3. 从诸如大华,未来也可以支持海康,等任何非标准的媒体源接入视频,并进行分发、录像和实时浏览。
与上述三种模式对应的命令分别为:
1. rtsp://127.0.0.1/live.sdp
2. rtsp://127.0.0.1/relay.sdp?url=rtsp://113.196.162.124:554/user=admin&password=&channel=1&stream=0.sdp?real_stream
3. rtsp://127.0.0.1/dvr.sdp?ip=222.220.17.22&port=37777&channel=1&user=admin&pass=admin&devicelib=DH
其中:
127.0.0.1 –> EzStreamSvr的IP地址。
live.sdp, relay.sdp和dvr.sdp –> 分别对应三种不同的视频源接入模式。
后面的参数 –> 接的是视频源的具体参数, 至于具体的每一个参数的意思,我想,你懂的,呵呵(不懂再来问我)。
注意事项:
考虑到安装包越来越大,如果把VC运行库等加进去,整个安装包会超过50M,所以,我暂时把这些依赖库从安装包里拿掉了。若您在安装后发现无法打开程序,请自己去下载安装VC运行库。下载地址:http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf
这个版本我还是做了两个包,一个的安装包,一个是绿色的直接解压缩后就可以用的。安装包比较大,有25M;绿色包小一点,但也有16M。两个版本没什么区别,安装包只是让人看上去专业一点,呵呵。为了节省我网站的流量,我建议下载绿色包。
产品主页:http://rg4.net/ezstreamsvr
安装包下载:http://rg4.net/p/ezstreamsvr/EzStreamSvr.7z
绿色包下载:http://rg4.net/p/ezstreamsvr/EzStreamSvr.green.7z
技术支持:service{a}rg4.net
欢迎下载使用,若您有任何问题,请不啬赐教,谢谢。
hi,您好,看了您的文章,受益匪浅,但,有个问题想咨询一下您,大华、海康之类的SDK提供的流均为其私有协议,转换为转准RTSP流的过程,能透漏点技术实现吗?
我的想法是通过其回调函数,通过其播放库解析出YUV帧,然后重组为RTSP流,但这似乎太过麻烦,不知您实际中是如何做的~
还有,您的EzStreamSvr ,转发大华海康的,我没有测试成功,不知如何操作的~~~
如能得到您的回复,万分感谢。 sun#chengchenginfo
Dear Sun,
对于诸如大华海康之类的设备,如果是先解码再编码的话,这种解决方案在许多情况下都是不适用的,尤其是当你想把这个量撑大的话,更会是个大问题。
而事实上,无论是大华还是海康,他们都有一套独立的拆帧SDK,利用该SDK即可将其码流转成一个个标准的H.264的frame,这样你即可以直接将其video组成一个个相应的rtp包来进行streaming,之前我在做EzStreamSvr的时候的做法就是如此。
FYR
嗯,与您的想法类似,我也觉得解码再编码太过麻烦且产品体量是很大的问题,不过您说的难道不是这样?
而事实上,无论是大华还是海康,他们都有一套独立的拆帧SDK,利用该SDK即可将其码流转成一个个标准的H.264的frame,这样你即可以直接将其video组成一个个相应的rtp包来进行streaming,之前我在做EzStreamSvr的时候的做法就是如此。
的确,无论大华&海康,都有拆帧的SDK,可以拆出YUV的帧,有可以拆成标准的H.264的帧的API?亦或者说 YUV格式的帧就是H264?所以直接可以对其streaming ?
其实我是视频行业新手入门,问题可能比较浅显,还望见谅。
Dear Sun,
我指的拆帧SDK是指将其packet stream拆成一个个H.264的frame,只要有标准的H.264/H.265的frame即可以自行组成标准的rtp packet,然后streaming出去。.
非常感谢您回复我,我再去试试,应该能找到~~~我琢磨着应该找到这俩api了,谢谢。
http://blog.csdn.net/leixiaohua1020/article/details/25430425
http://blog.csdn.net/sjin_1314/article/details/41170965
这里有两篇文章,说的是将YUV编码为H264的,如果要做估计也只能 解码再编码;我理解您说的拆帧,就是解码,这里理解正确否?
我说的拆帧是指将海康大华他们私有的frame格式转成一个个标准的H.264的frame,中间不涉及解码,也不涉及编码。
还是非常谢谢您的回复~~~只是,我不知道他们的拆帧api~~~
三年前我的笔记本硬盘出现故障,且无法修复,结果导致之前写的许多东西(包括EzStreamSvr)都丢失了,搞得我心灰意冷的,后来一直都没有再去重写一遍。回头有空的话,我倒是想再来写一遍,并将其开源出来。
hi,还是要继续求助啊~~~他们的流有时候貌似可以直接被FFMpeg识别,但有时候又不行。。。蛋痛~请问您说的,拆帧 API,您还有印象吗?希望给俺指导指导啊~
那个拆帧API是海康、大华的一个独立的库,没有包含在其网络SDK开发包里。需要单独问他们要的。正常用其网络SDK发过来的包用ffmpeg是无法解码的(至少我了解到的情况是这样)。
BTW:他们有的IPC已经支持ONVIF协议,如果你用ONVIF或者是RTSP/RTP的方式将其接进来则是可以直接用ffmpeg来解的。