SRS流媒体服务器安装使用详解,rtsp、视频文件推流成rtmp并进行拉取播放,obs推流详解,以及python的推流使用
简单说明一下:
- rtsp的默认端口是554;rtmp的默认端口是1935
- rtsp://192.168.125.128 # 前面的rtsp就决定用:554端口,后面加不加:554都无所谓
- rtmp://192.168.125.128 # 前面的rtmp就决定用:1935端口,后面加不加:1935都无所谓
- 然后推流的不是只能是视频文件,也可以推流rtsp摄像头地址这些
安装
安装使用的两种方式:
-
直接使用官方提供的docker镜像,直接一键开启,方便快捷:
docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080
registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/srs.conf -
使用源码安装:
推流
用ffmpeg推流前需要先安装,这是我前面写的关于ffmpeg安装的教程,可以参考一下。
-
ffmpeg推流(下面命令是针对srs所在服务器的直接推流):
ffmpeg -re -i ./doc/source.flv -c copy -f flv -y rtmp://localhost/live/livestream
- 如果是其它机子推流,就把localhost换成srs服务器的地址
- 后面的live必须要有,livestream是自己起的名字,可以改,还可以加,比如livestream_123/456/789
-
OBS推流(这个要推流成功,就一定要先打开1935的rtmp端口),在obs推流界面设置:
- 服务:自定义
- 服务器:
rtmp://192.168.125.128/live/
#应该就是固定写法 - 串流秘钥:
123
# 自己起,也可以是 livestream/123/456- 这个给的不同,就可以区分推到同一台srs服务器上不同给的流了,拉取也就用这作为区分
- 这个给的不同,就可以区分推到同一台srs服务器上不同给的流了,拉取也就用这作为区分
拉流
下面是不同的地址,直接使用ffplay或是其他软件,如vlc、PotPlayer播放即可:
- RTMP: ffplay rtmp://192.168.125.128/live/livestream
- H5(HTTP-FLV):ffplay http://192.168.125.128:8080/live/livestream.flv
- H5(HLS):ffplay http://192.168.125.128:8080/live/livestream.m3u8
Tips:
- 推流时,推流地址一般都是rtmp://localhost/live/my_name
- localhost看自己情况设置成srs服务器地址
- live是一定要的,固定写法,后面的就自己随意起了
- 一般都是开启了防火墙的,所以当外机访问:8080窗口时,肯定会失败,所以服务器上要使用firewall-cmd开启8080端口;
- 因为防火墙,rtmp地址还是不能使用,rtmp的默认端口是1935/tcp,可以用nmap localhost在服务器上看到,所以还需要使用firewall-cmd把1935端口打开(如果是vscode远程的,然后用vscode的terminal执行的运行srs服务的命令,它就会自动转发1935端口,然后就可以直接在windows上直接使用rtmp://localhost/live/123这样的路径就好了,就不需要服务器开启1935端口)。
python使用opencv推流
python里面的一个推流,记录一下吧,也都是调用ffmpeg:
import cv2
import subprocess
# RTMP服务器地址
rtmp = r'rtmp://192.168.125.128/live/123' # 后面的123自己随意起的,可改成其它的,如123321/456等等
# 读取视频并获取属性
# 还可以把摄像头0换成rtsp地址,进行rtsp的推流
cap = cv2.VideoCapture(0)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
sizeStr = str(size[0]) + 'x' + str(size[1])
command = ['ffmpeg',
'-y', '-an',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', sizeStr,
'-r', '25',
'-i', '-',
'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
'-preset', 'ultrafast',
'-f', 'flv',
rtmp]
pipe = subprocess.Popen(command, shell=False, stdin=subprocess.PIPE
)
while cap.isOpened():
success, frame = cap.read()
if success:
if cv2.waitKey(1) & 0xFF == ord('q'):
break
pipe.stdin.write(frame.tostring())
cap.release()
pipe.terminate()
拉取流:ffplay rtmp:192.168.125.128/live/123
所以如果你有一台云服务器,把环境配好,你就可以在win上用obs推流你当前摄像头画面,别人也能拿到你的地址进行直播观看。
希望能帮到你~