0.背景:
调试rtsp视频流时,没有网络摄像头怎么办,只需要在同一个局域网下,用windows推送rtsp流,就可以在linux进行接收。
1.下载资源包
资源包链接:https://pan.baidu.com/s/1008I7TKazE4JgFiozhtekg?pwd=7oll
提取码:7oll
2.解压
解压后,以管理员运行cmd终端,进入rstp文件夹中,运行命令:
meidamtx.exe
运行如下:
3.推流
3.1 查看电脑现有的设备:
在cmd终端输入:
ffmpeg -list_devices true -f dshow -i dummy
可以看到我有两个摄像头设备,一个是笔记本自带的,一个是usb免驱摄像头
3.2 查看自己电脑的ip地址
在cmd终端输入
ipconfig
如果不确定哪个是IP地址,可以在电脑右下角,找到连接的wifi,点击属性可以查看IPV4地址。
3.3 推流
还是以管理员的方式运行cmd终端,进入到解压后的rstp文件夹,运行以下命令
ffmpeg -f dshow -i video="你的摄像头名称" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://你的IP地址:8554/video -thread_queue_size 50
需要改摄像头名称和IP地址,以我的设备为例,命令为:
ffmpeg -f dshow -i video="SY 1080P camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://192.168.1.6:8554/video -thread_queue_size 50
这里要记住我们推流的地址是这个,一会订阅的也是这个: rtsp://192.168.1.6:8554/video
推流成功:
这里有个小问题,推流选择笔记本自带的摄像头时会报错,不知道什么原因,所以我推流的是USB免驱摄像头的。
3.4 验证推流成功
新建一个Python文件填入以下内容,把rtsp流地址替换为你自己的,然后运行,就可以看到推过来的视频了。
这个脚本可以在windows上跑,也可以在其他电脑上跑,但是要注意必须连接同一个wifi。
import cv2
# RTSP视频流地址
rtsp_url = "rtsp://192.168.1.6:8554/video"
# 创建VideoCapture对象,指定RTSP流地址
cap = cv2.VideoCapture(rtsp_url)
while True:
# 读取一帧图像
ret, frame = cap.read()
if not ret:
print("Failed to read frame from RTSP stream. Check the stream URL and connectivity.")
break
# 如果成功读取到帧,则显示图像
cv2.imshow("RTSP Video Stream", frame)
# 按'q'键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放VideoCapture资源
cap.release()
# 关闭所有OpenCV窗口
cv2.destroyAllWindows()
这里我在另一台Ubuntu主机上运行一下这个脚本,可以看到接收rtsp流成功了:
参考:windows&&linux环境下实现ffmpeg&&vlc rtsp本地视频、摄像头推流,VLC推拉流