一、rtsp服务器搭建
- 下载rtsp-simple-server,根据自己电脑选择合适的版本
[https://github.com/aler9/rtsp-simple-server/releases](https://github.com/aler9/rtsp-simple-server/releases)

下载完毕后得到压缩包
- 使用
tar -xvf filename.tar命令解压到rtsp文件夹,该文件夹目录下有两个文件

- 在rtsp文件夹下使用
./rtsp-simple-server命令运行服务器

若出现端口号被占用,可以杀死占用该端口号的进程,或者在
rtsp-simple-server.yml文件里修改端口号
二、ffmpeg视频推流
修改rtsp_stream.py文件中rtspurl以及camera参数来源以后运行该文件,此时就会将视频流推到服务器上,客户端可进行拉流操作。
ffmpeg推流:
服务器端显示:
import cv2import subprocess as sprtspUrl = 'rtsp://192.168.144.112:8554/main.264' #这里改成本地ip,端口号不变,文件夹自定义# 视频来源 地址需要替换自己的可识别文件地址# filePath=''camera = cv2.VideoCapture('ccat.mp4') # 从文件读取视频# 视频属性size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)), int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))sizeStr = str(size[0]) + 'x' + str(size[1])fps = camera.get(cv2.CAP_PROP_FPS) # 30p/selffps = int(fps)hz = int(1000.0 / fps)print('size:'+ sizeStr + ' fps:' + str(fps) + ' hz:' + str(hz))# 视频文件输出fourcc = cv2.VideoWriter_fourcc(*'XVID')#out = cv2.VideoWriter('res_mv.avi',fourcc, fps, size)# 直播管道输出# ffmpeg推送rtmp 重点 : 通过管道 共享数据的方式command = ['ffmpeg',# 're',## '-y', # 无需询问即可覆盖输出文件'-f', 'rawvideo', # 强制输入或输出文件格式'-vcodec','rawvideo', # 设置视频编解码器。这是-codec:v的别名'-pix_fmt', 'bgr24', # 设置像素格式'-s', sizeStr, # 设置图像大小'-r', str(fps), # 设置帧率'-b:v','2M',#'maxrate','2048k','-i', '-', # 输入#'-bufsize','2000k','-c:v', 'libx264','-pix_fmt', 'yuv420p','-preset', 'ultrafast','-rtsp_transport','tcp','-f', 'rtsp',# 强制输入或输出文件格式rtspUrl]#管道特性配置# pipe = sp.Popen(command, stdout = sp.PIPE, bufsize=10**8)pipe = sp.Popen(command, stdin=sp.PIPE) #,shell=False# pipe.stdin.write(frame.tostring())while (camera.isOpened()):ret, frame = camera.read() # 逐帧采集视频流if not ret:break############################图片输出# 结果帧处理 存入文件 / 推流 / ffmpeg 再处理cv2.imshow('result',frame)cv2.waitKey(1)pipe.stdin.write(frame.tostring()) # 存入管道用于直播#out.write(frame) #同时 存入视频文件 记录直播帧数据camera.release()#out.release()
