ffmpeg:rtsp=>hls流;
nginx 托管hls流服务;
vlc测试hls流服务;
参考了很多相关文档和资料,由于比较乱就不在一一引用介绍了,下面的是实操OK的例子;
1)ffmpeg (ffmpeg-4.4.1-full_build),要用full版本,否则会缺某些插件;
rtsp地址
rtsp://admin:admin123@192.168.30.168:554
用ffmpeg把rtsp流转hls流
ffmpeg -rtsp_transport tcp -r 25 -i rtsp://admin:admin123@192.168.30.168:554 -fflags flush_packets -max_delay 1 -segment_time 5 -an -flags -global_header -hls_time 1 -hls_list_size 3 -hls_wrap 4 -vcodec copy -y "D:\hls\dh.m3u8"
r
2)nginx 1.24.0版
配置如下
worker_processes 1;
events {
worker_connections 1024;
}
http {
server{
listen 1935;
server_name localhost;
#监控视频点播服务
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
add_header Cache-Control no-cache;
#存放hls切片的路径
alias 'D:/hls';
autoindex off;
expires 1h;
}
}
}
3)vlc 播放网络流
http://127.0.0.1:1935/hls/dh.m3u8
昨日在家,也是如此搭配,却没有成功;
1)发现ffmpeg必须用full版本,否则会缺失;
2)ffmpeg 转换时会出现-10054错误,自动断开,后把tcp改成udp,才算可以;
怀疑ffmpeg的参数不一致,在家测试的版本参考的有个优化是减少延时;当前虽然OK,但延时较大(约有12秒);
3)nginx配置后始终无法下载m3u8文件,虽然就在那个文件下;
误以为是nginx缺少hls模块导致,现在看来不是这样,nginx的配置就有问题;
当时在/hls节点用的是 root 'D:\hls',可能是错误的。