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摄像头地址这些

安装

安装使用的两种方式:

  1. 直接使用官方提供的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

  2. 使用源码安装:

    • 如果使用源码安装,直接看它github,非常便捷;

    • 我是安装在centos7上的,放在/opt/,每次开机需要进到里面:

      • cd /opt/srs/trunk
      • 启动服务:./objs/srs -c conf/srs.conf
      • 查看状态:./etc/init.d/srs status
      • 查看日志:tail -n 30 -f ./objs/srs.log
        在这里插入图片描述
    • 然后我只是只执行了make,没有执行make install ,intall会将其安装在/usr/loacl/srs这个目录里面。

    • 然后看这官方文档,将其设置为开机自启的方法。

推流

用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服务器上不同给的流了,拉取也就用这作为区分
        在这里插入图片描述

拉流

下面是不同的地址,直接使用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推流你当前摄像头画面,别人也能拿到你的地址进行直播观看。
希望能帮到你~