方案一:
·mjpg-streamer,它运行在ARM板上
·在手机上使用浏览器直接观看视频
方案二:
推流端(Fmpeg)--rtmp-->Nginx(流媒体服务器)--rtmp/httpflv/hls-->浏览器、播放器
此篇文章记录方案二的具体细节
一、FFmpeg
FFmpeg是一款开源软件,是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。
1、音视频数据处理流程
2、FFmpeg的组成
组成部分
相关概念:![](https://img-blog.csdnimg.cn/direct/0e7bbc72fbeb4a95a2e93338118a03df.png)
常用参数:
有关利用Buildroot安装ffmpeg并编译生成开发板上的镜像文件的配置可参考imx6ull开发板 ffmpeg nginx buildroot 摄像头推流实验_韦东山 200万免驱摄像头-CSDN博客
linux之buildroot(2)配置toolchain_使用buildroot创建自己的交叉编译工具链-CSDN博客
基于恩智浦imx6ull处理器的buildroot详细使用步骤 - 嵌入式技术 - 电子发烧友网
二、Ubuntu中Nginx搭建流媒体服务器
1、搭建
选择Ubuntu为流媒体服务器,所以在Ubuntu中利用Nginx搭建服务器。参考文章:
Ubuntu系统使用Nginx搭建RTMP服务器实现推流_ubuntu nginx rtmp-CSDN博客
在ubuntu 上搭建Nginx-RTMP 直播服务器_ubuntu nginx rtmp-CSDN博客
Linux下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能_linux rtmp服务器播放卡-CSDN博客
2、遇到的问题
问题一:在执行$ git clone https://github.com/nginx/nginx.git命令时出现问题:
fatal: unable to access 'https://github.com/nginx/nginx.git/': Failed to connect to github.com port 443: Connection refused
fatal: unable to access 'https://github.com/nginx/nginx.git/': Failed to connect to github.com port 443: Connection refused
参考https://zhuanlan.zhihu.com/p/620860502这篇文章解决,将https更改为http,两者的区别为前者加密后者不加密,s代表着SSL协议,依靠证书来验证身份。
问题二:在执行make j4 && make install语句时出错,因为显示了Permission denied的错我,所以在命令前加了sudo,但显示结果还是不对
解决:是因为在命令 sudo make -j4 && make install
中,make -j4
部分是在以超级用户权限运行,而 make install
部分是在当前用户权限下运行。这是因为 &&
运算符将两个命令连接起来,但不会自动继承前一个命令的权限。正确语句:
sudo make -j4 && sudo make install
问题三:启动nginx时出现
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (13: Permission denied)
2024/06/20 07:42:49 [emerg] 46729#0: mkdir() "/usr/local/nginx/client_body_temp" failed (13: Permission denied)
解决:根据信息Permission denied权限不够就sudo chmod,文件不存在就根据错我信息提示在该路径下创建文件,目录不存在也是一样。最后sudo nginx启动成功。
启动成功后就可以将数据流推送到服务器中。推流端要注意封装格式、编码器的选择、IP地址和端口设置
三、内网穿透
1、内网穿透简介
因为在之前的设置中,ARM板用 ffmpeg 向局域网中的 Ubuntu 内 nginx 以 rtmp 协议推流,而Windows中VLC播放器通过读取rtmp URL(uniform resource locator资源定位符)来拉流实现摄像头监控,
所以就会有一个问题,不在这一局域网中的设备就没法通过URL播放,所以需要用到内网穿透。
在此补充局域网和路由器的相关知识:
局域网中的主机要和公网中的设备通信,就要确定通信信息的源、目的、端口,主机将数据交给路由器,那么路由器会将主机信息的源和端口替换,目的不变发送出去,并将这一通信映射过程记录在册,之后有信息从目的返回路由器确认有这一回事儿会将信息在转给对应的主机,这样一来将少了公网ip的申请,也保证了局域网内主机的安全,但这样一来,不同局域网内的设备就乜就办法直接进行数据交换。
也就是说要打破内网公网间的隔阂,使得公网中的设备也能向内网中设备发送接收数据。这样一来就可以让不在局域网中的设备也能通过播放URL来实现功能。
2、实现方案
1)通过设置路由器
在路由器中安装内网穿透的软件,如果有80端口的数据访问路由器公网IP,就将请求转发给对应的主机。
2)通过现有的软件完成内网穿透
比如用花生壳软件,
在这里花生壳将一个公网ip映射到了局域网的主机内,其实也就是代替了路由器的功能。