1、如果网络摄像头 不支持RTMP网络协议,那么就需要在本地(也就是局域网的电脑)主动使用FFmpeg等格式转换推流软件,将摄像头的比如RTSP数据流转换成RTMP同时推流到你的远程RTMP流媒体服务器,这个流媒体服务器一般可以是基于nginx和nginx-RTMP模块搭建的。
2、如果网络摄像头 支持RTMP网络协议,也就是说它支持推流的功能,那就可以在摄像头厂商提供的web或者app软件中设置你要推流的远程RTMP流媒体服务器地址!这样就可以直接推流了,少了使用FFmpeg等软件的转码环节,也不需要本地客户端了。
3、进一步思考,其实,如果这个摄像头支持RTMP网络协议,那么我可以在与它相连的能够连接外网的路由器上进行端口映射!有关路由器的端口映射大家可以自行搜索,简而言之就是在路由器上配置网络摄像头的本地端口和ip地址,这样就可以通过路由器的外网ip+你刚才配置的网络摄像头的端口号访问了!我试过,这完全可以实现的,我用本地路由器这样做了我的一个java服务器的端口映射,然后用4G网就可以访问了。所以这可能就是某些网络摄像头的P2P的解决方案!对的 ,这就是P2P的解决方案,相当于只能自己看。但是这个方法还有一个缺点,如果路由器重启,那么它的外网ip就会变更,这样一来,你如果还是用之前的外网ip+端口就访问不了,我猜那些小的厂商是这样解决的:让摄像头这个终端发送现在使用的也就是当前路由器的外网ip地址给服务器,然后客户app连接的时候就能够从厂商的服务器中获取到该摄像头当前使用的外网ip,然后客户APP就使用获取到的外网ip+客户端连接到自己的摄像头。这样即使路由器每次重启后它的外网ip变了也没什么影响,因为每次连接获得的都是路由器的最新的外网ip。
总结:
我的想法,我肯定希望用第2种方法,也就是直接购买可以RTMP推流的摄像头,原因一:直接将流推送到远程RTMP流媒体服务器,我的所有终端就可以访问,少去本地还需要进行RTSP转RTMP流格式的麻烦和推送的麻烦!原因二:稳定!因为我的RTMP流媒体服务器是用的远程的,也就是用的阿里云的服务器,这是固定ip,只要我的摄像头连了网,而且我的服务器没什么问题,那么就完全没问题,而且这个还支持超多人的同时观看和直播。不过关于远程控制摄像头的云台这部分功能目前我还不是很了解。
所有这些东西,在我毕设后我再去验证!目前还在忙毕设,跟这个其实无关。
有什么想法,欢迎大家在下面留言一起讨论!我很喜欢思想的碰撞!