场景是:A机器装FFmpeg连接摄像头,B机器装nginx,A机器将视频流推到B机器,页面程序访问B机器的地址播放视频。
1、FFmpeg必须装
官网:http://ffmpeg.org
FFmpeg功能强大,主要用来推流拉流,自带的ffplay还可以实现播放。
2、nginx必须装
nginx需要启用rtmp模块
linux:先把rtmp模块clone下来https://github.com/arut/nginx-rtmp-module,编译时加入rtmp模块。
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module --with-pcre=../pcre-8.42 --with-openssl=../openssl-1.1.0i --with-zlib=../zlib-1.2.11
make && make install
windows:直接下载带rtmp模块的nginx地址http://nginx-win.ecsds.eu/download/nginx 1.7.11.3 Gryphon.zip。
3、nginx配置
linux下是nginx.conf,windows下是nginx-win.conf,两个地方需要改:
1.在外层增加rtmp{}。
rtmp { #保存所有rtmp配置的块
server { #声明一个rtmp实例
listen 1935; #给Nginx添加一个监听端口以接收rtmp连接
chunk_size 4096; #流整合的最大的块大小。默认值为4096。这个值设置的越大CPU负载就越小。这个值不能低于128
application hls { #hls的地址
live on;
hls on;
hls_path html/hls;
hls_fragment 1s;
}
application live { #rtmp的地址
live on;
}
}
}
2.http-->server里面增加:
# ffmpeg生成hls流的http访问配置
location /hls {
#若nginx\conf\mime.types中没有配置如下type,请加上,或直接在mime.types加
types{
#application/vnd.apple.mpegurl m3u8;
application/x-mpegURL m3u8;
video/mp2t ts;
}
root html;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
4、nginx启动
windows下:
nginx.exe -c conf\nginx-win.conf
访问localhost看到nginx欢迎页面即成功。
5、FFmpeg推流
方式一:rtsp转rtmp
ffmpeg -i "rtsp://admin:[email protected]:554/h264/ch1/main/av_stream" -vcodec libx264 -acodec aac -f flv rtmp://192.168.100.170:1935/live/movie
A机器使用ffmpeg命令推流,-i后面是摄像头流地址,-flv后面是推到nginx机器的地址。
使用命令:ffplay.exe rtmp://localhost:1935/live/movie 可以查看视频。
方式二:rtsp转hls
ffmpeg -i "rtsp://admin:[email protected]:554/h264/ch1/main/av_stream" -vcodec libx264 -acodec aac -f flv rtmp://192.168.100.170:1935/hls/movie
A机器使用ffmpeg命令推流,-i后面是摄像头流地址,-flv后面是推到nginx机器的地址。
B机器接收后可以在nginx html/hls目录下面看到ts视频片段。
使用命令:ffplay.exe http://localhost/hls/movie.m3u8 可以查看视频。
总结:
hls比rtmp延时要高,但是rtmp页面需要调用flash才能播放,这是最大的缺点,hls则不用。
参考文章
https://blog.csdn.net/qq_21108311/article/details/94567915 nginx+ffmpeg实现流媒体
https://blog.csdn.net/wenqiangluyao/article/details/97897794?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.add_param_isCf Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放
https://blog.csdn.net/zongyue_wang/article/details/82698281Nginx支持HLS配置