一、流媒体协议
RTSP(Real-Time Stream Protocol)由 Real Networks 和 Netscape 共同提出的,基于文本的多媒体播放 控制协议。RTSP 定义流格式,流数据经由 RTP 传输;RTSP 实时效果非常好,适合视频聊天,视频监控等 方向。
RTMP(Real Time Message Protocol)由 Adobe 公司提出,用来解决多媒体数据传输流的多路复用 (Multiplexing)和分包(packetizing)的问题,优势在于低延迟,稳定性高,支持所有摄像头格式,浏览器 加载 flash 插件就可以直接播放。
RTSP 和 RTMP 的区别: RTSP 虽然实时性最好,但是实现复杂,适合视频聊天和视频监控;RTMP 强在浏览器支持好,加载 flash 插件后就能直接播放,所以非常火,相反在浏览器里播放 RTSP 就很困难了。
要想实现 RTMP 视频监控,必须要有这三部分:推流客户端、拉流客户端以及流媒体服务器。
推流端,我们可以使用 FFmpeg 来实现;
拉流端,我们可以用 VLC 播放器;
流媒体客户端,选择使用 Nginx 来搭建。
二、Nginx 移植
移植第三方资源,依然是需要拿到源码,交叉编译后,拷贝到开发板上。
1. 下载 Nginx 源码
wget http://nginx.org/download/nginx-1.20.0.tar.gz
2. 下载 nginx-rtmp-module 模块
原生的 Nginx 并不支持 RTMP,我们需要安装第三方模块 nginx-rtmp-module 插件使其支持 RTMP。
git clone https://github.com/arut/nginx-rtmp-module.git
3. 交叉编译源码
tar -xzf nginx-1.20.0.tar.gz
3.1 配置源码
注释源码中的 auto/cc/name的exit1
修改 auto/types/sizeof
执行以下命令,进行配置。可能会有格式问题,最好一行一行敲
./configure --prefix=/home/prover/linux/nginx-1.20.0/install \
--with-http_ssl_module \
--with-http_mp4_module \
--with-http_v2_module \
--without-http_upstream_zone_module \
--add-module=/home/prover/linux/nginx-rtmp-module
配置成功如下:
3.2 编译
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
make
如果不出意料的话,就要出意外了。
在 ./configure 在加一行命令参数
--with-cc-opt="-Wno-error"
如果出现下面错误:
修改 nginx 源码目录下的 objs/ngx_auto_config.h 文件 ,添加以下内容:
#ifndef NGX_HAVE_SYSVSHM
#define NGX_HAVE_SYSVSHM 1
#endif
编译成功:
3.3 安装
make install
安装后,有4个文件,
sbin 目录下有一个可执行程序 nginx,用来运行服务器的。
这个可执行文件是一个“not stripped”文件,说明该文件包含了很多的调试信息,所以导致该文件特别 大 7.5MB,可以执行下面这条命令去掉调试信息、减少文件的大小:
arm-poky-linux-gnueabi-strip --strip-debug nginx
把可执行文件 nginx 拷贝到开发板上随意位置
将 conf、html、logs 文件拷贝到 /etc/nginx 中
3.4 测试
./nginx -V # 查看版本信息
启动:
./nginx -p /etc/nginx
查看后台
ps -aux
然后打开浏览器,输入开发板的IP地址。
4. 配置 nginx
后续我们会使用 FFmpeg 进行推流,将视频流通过 RTMP 推给 nginx 流媒体服务器,在此之前,我们需 要对 nginx 进行配置,打开 nginx 的配置文件/etc/nginx/conf/nginx.conf
rtmp {
server {
listen 1935; # ▒.▒听 1935 端口
chunk_size 4096;
application live{
allow publish 127.0.0.1;
allow play all;
live on; # 打开▒.▒播 .1;
record off; # 关闭 record
meta copy;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
hls_fragment 8s;
}
}
}
添加完保存,然后重启 nginx
./nginx -p /etc/nginx -s reload
三、FFmpeg 推流
1. 视频推流测试
./nginx -p /etc/nginx
自己准备个视频,然后推流
ffmpeg -re -i testVideo.mkv -c:av copy -f flv rtmp://127.0.0.1/live/mytest
点击 VLC 的媒体-》打开网络串流。然后输入自己开发板的IP和路径。
2. 摄像头视频测试
ffmpeg -f v4l2 -video_size 320x240 -framerate 15 -i /dev/video0 -q 10 -f flv rtmp://127.0.0.1/live/mytest
我的摄像头配置的有问题,后面回头要看看。