利用docker镜像搭建流媒体服务进行rtmp推流及点流(rtmp,hls,http-flv)测试
- 我们经常需要一些测试视频流,比如rtmp,http-flv,hls,但网上可用的比较少,于是可以自己在本地搭建
- 如果需要rtsp流的可以看这篇:利用live555搭建最简单的rtsp流媒体服务
搭建流媒体服务
- 利用网上的mugennsou/http-flv镜像可以快速搭建流媒体服务
- 在本例中,运行脚本如下
docker run -it -d \
--restart always \
-p 8380:80 \
-p 1935:1935 \
--name nginx-http-flv \
mugennsou/nginx-http-flv
- 注意8380是http端口,1935是rtmp端口
- 另外,如果出现跨域问题,需要检查配置文件中是否开启跨域,如下图
- 为了支持hls,需要对配置做如下修改
- 首先修改/etc/nginx/conf.d/rtmp/rtmp.conf,增加hls相关配置
server {
listen 1935;
application demo {
live on;
gop_cache on;
#enable HLS ,主要就是增加如下配置
hls on;
hls_path /tmp/hls;
hls_fragment 3;
hls_playlist_length 20;
}
}
- 首先修改/etc/nginx/conf.d/http/http-flv.conf,在server模块下增加一个location,如下
location /hls {
# Disable cache
add_header Cache-Control no-cache;
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp/;
add_header Cache-Control no-cache;
}
- 以上修改之后执行
nginx -t # 测试配置文件是否有误
nginx -s reload # 重新加载
推流
- 本例是通过rtmp进行推流,最后可以通过rtmp或http-flv进行点流
- 推流方式可以有多种,以下介绍通过ffmpeg和obs,obs是个可视化工具,使用起来更为方便一些
- 在本例中,推流地址为 rtmp://192.168.25.105:1935/demo/[自定义名称]
- 其中demo就是流媒体服务中配置的,默认就是demo,自定义名称则可以随便取,保持推流和点流时一致即可
通过ffmpeg
- 利用ffmpeg进行本地推流,命令参考如下
ffmpeg -re -i H:\testvideo\h265_high.mp4 -vcodec copy -acodec copy -f flv rtmp://192.168.25.105:1935/demo/stream-1
- 以上命令推送的mp4文件注意编码要是h264的,否则可能会出错,flv官方不支持hevc
- 如果要将笔记本的摄像内容进行推流
- 先要查看笔记本相机信息,通过如下命令
ffmpeg -list_devices true -f dshow -i dummy
- 或者在设备管理器中查看
- 然后利用ffmpeg进行推流
ffmpeg -f dshow -i video="Integrated Camera":audio="麦克风阵列 (Realtek High Definition Audio)" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f flv "rtmp://192.168.25.105:1935/demo/stream-1"
- 其中的video和audio根据自己机子情况修改
通过obs
-
obs推流相对来说很简单,主要就是配置一下这里即可
-
如果想推相机的流直接增加一个视频捕获设备即可,如下图
点流
- 最后点流可以用vlc进行测试,按照本例配置后点流地址如下
- http-flv点流
http://192.168.25.105:8380/live?app=demo&stream=stream-1 - rtmp点流
rtmp://192.168.25.105:1935/demo/stream-1 - hls流
http://192.168.25.105:8380/hls/stream-1.m3u8
参考
https://github.com/mugennsou/http-flv
https://blog.csdn.net/yelin042/article/details/78434454
搭建HLS直播测试环境 - 简书 https://www.jianshu.com/p/4006d47eccf9