1、之前几节,我们虽然实现了功能,但是存在这样一个问题。
我们将服务器和ffmpeg都是部署在开发板上的,这就要求拉流端和开发板(推流端)必须都在同一个网段中。不能实现,在任意地区访问nginx.
解决方法有两个:
1)、将nginx放到公网服务器上(设置路由器,在路由器安装内网穿透的软件,有难度)
2)、使用内网穿透技术,将开发板暴露在公网中。
为什么要用内网穿透的?
总得来说,就是:
因为局域网内的设备可以主动通过路由器访问互联网里面的某一个网站,之后,局域网设备就可以和互联网之间进行信息的交互。但是互联网无法/不可以主动访问内网里面的设备。所以,需要使用内网穿透技术。
细致的来讲,就是:
首先,我们要明确ip和端口的作用:
在同一个局域网内的所有设备,他们最后都会接在同一个路由器上。这个路由器的ip是公网ip,在这个路由器下的ip都是局域网ip。
这就是,你家里的电脑,公司的电脑,IP都是192.168.0.100,但是它们并没有冲突:因为它们处于不同的局域网。
局域网里的电脑要访问公网(物联网),要路由器帮忙!
这种方法可以很好的解决ip不够的问题。
当我们对外访问时,路由器来帮忙:
IP和端口都很重要,但是IP不够用:
a、主机A的局域网IP是10.1.1.100,它使用端口1025,去访问公网211.100.7.34
b、但是它没有公网IP,跟路由器说:哥们,帮帮忙
c、路由器就把数据包里的(10.1.1.100:1025)改成自己的IP和端口(162.105.176.65:16384),发出伪造的数据包
d、服务器收到后,返回数据给(162.105.176.65:16384),这是路由器
e、路由器收到数据后查表:这是主机A要我取的数据,于是把数据包里的目的(162.105.176.65:16384)改为(10.1.1.100:1025),并发给主机A
f、主机A收到数据。
从这个过程可以知道:
1)、局域网的电脑,借助路由器,可以访问公网
2)、需要局域网内的电脑主动发起网络连接
3)、公网无法主动访问局域网内的电脑。这样做,会导致;
a、你访问谁呢?在路由器里都没有记录,丢掉
b、这可以保护局域网内的电脑,比如前两年爆发的勒索病毒
c、但是也造成了:我在家里无法访问公司的电脑,公司的摄像头
2、实际操作
1)、下载花生壳软件,并配置:
2)、
推流
在开发板上执行:
ffmpeg -f v4l2 -framerate 15 -i /dev/video1 -q 10 -f flv rtmp://127.0.0.1/live/wei (一秒10帧,质量是10)
拉流
使用HTTPFLV协议拉流:VLC播放器中点击“媒体”->“打开网络串流”,输入: http://315999m2y4.51vip.biz/test?app=live&stream=wei ,就可以播放了。