如何通过FFmpeg(Kokorin Jaffree)将RTSP摄像头流转为浏览器HLS流
解决RTSP转HLS直播流的权限与CORS问题
一、修复Jaffree调用FFmpeg的权限问题
- 避免用
sudo执行FFmpeg,通过调整权限解决:- 确保FFmpeg有可执行权限:
chmod +x /usr/bin/ffmpeg - 将运行Java程序的用户加入FFmpeg所属组(通常是
video或root组):usermod -aG video your_java_user - 或者直接修改FFmpeg的所有者为Java运行用户:
chown your_java_user:your_java_user /usr/bin/ffmpeg - 同步调整HLS输出目录
/temp/stream的权限:chown -R your_java_user:your_java_user /temp/stream
- 确保FFmpeg有可执行权限:
二、解决HLS播放的CORS问题
方案1:配置HTTP服务器的CORS规则
用Nginx/Apache托管HLS文件目录,添加跨域响应头:
- Nginx配置示例:在
server或location块中添加location /stream { alias /temp/stream; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,OPTIONS; add_header Access-Control-Allow-Headers Range; } - Apache配置示例:在
.htaccess或站点配置中添加Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods "GET, OPTIONS" Header set Access-Control-Allow-Headers "Range"
方案2:用FFmpeg内置HTTP服务分发流
直接让FFmpeg开启HTTP服务,避免跨域问题,修改命令如下:
ffmpeg -fflags nobuffer -rtsp_transport tcp -i rtsp://my_url \ -vsync 0 -copyts -vcodec copy -an \ -hls_flags delete_segments+append_list -f segment \ -segment_list_flags live -segment_time 1 -segment_list_size 3 \ -segment_format mpegts -segment_list index.m3u8 \ -segment_list_type m3u8 -listen 1 -f hls http://0.0.0.0:8080/stream/index.m3u8
浏览器直接访问http://your_server_ip:8080/stream/index.m3u8,若网页与流同源则无CORS问题,也可通过Nginx反向代理该端口并配置CORS。
方案3:前端开发环境代理(临时用)
如果是开发阶段,通过前端代理工具转发请求:
- Vue项目在
vue.config.js中配置:module.exports = { devServer: { proxy: { '/stream': { target: 'http://your_hls_server_ip', changeOrigin: true } } } }
内容的提问来源于stack exchange,提问作者Глеб К
相关产品推荐
相关产品推荐

