使用 ffmpeg 从网络摄像头生成 RTSP

mrm*_*ent 1 ffmpeg rtsp

我想获取摄像头视频流并在 Windows 上使用 RTSP 进行广播。

我可以播放相机视频

> ffplay -f dshow -i "HP HD Webcam"
Run Code Online (Sandbox Code Playgroud)

但如果我尝试启动流

> ffmpeg -f rtsp -i video="HP HD Webcam" rtsp://localhost:8888/live.sdp
Run Code Online (Sandbox Code Playgroud)

流不启动。控制台显示

ffmpeg version ...
configuration: ...
libavutil      55.  6.100 / 55.  6.100
libavcodec     57. 15.100 / 57. 15.100
libavformat    57. 14.100 / 57. 14.100
libavdevice    57.  0.100 / 57.  0.100
libavfilter     6. 15.100 /  6. 15.100
libswscale      4.  0.100 /  4.  0.100
libswresample   2.  0.101 /  2.  0.101
libpostproc    54.  0.100 / 54.  0.100
Run Code Online (Sandbox Code Playgroud)

如果我使用 ctrl+c 来破坏它,则会显示错误

video=HP HD Webcam: Immediate exit requested
Run Code Online (Sandbox Code Playgroud)

如何使用 ffmpeg 将摄像机正确流式传输到 RTSP?

Abh*_*til 10

首先,您必须创建一个 RTSP 服务器,然后将视频流从网络摄像头推送到 RTSP 服务器。服务器启动后,从 RTSP 服务器读取流。在Ubuntu中按照以下步骤操作:

打开终端并执行以下命令

$ sudo apt-get install ffmpeg
$ sudo apt-get install v4l-utils
Run Code Online (Sandbox Code Playgroud)

步骤1:打开一个新终端并下载SimpleRTSP服务器包:

 $ wget https://github.com/aler9/rtsp-simple-server/releases/download/v0.16.0/rtsp-simple-server_v0.16.0_linux_amd64.tar.gz
Run Code Online (Sandbox Code Playgroud)

解压下载的包:

$ tar -xzvf rtsp-simple-server_v0.16.0_linux_amd64.tar.gz
Run Code Online (Sandbox Code Playgroud)

步骤 2:使用以下命令检查您的内部IP 地址:

$ ifconfig
Run Code Online (Sandbox Code Playgroud)

复制 IP地址,例如。192.168.XXX.XXX

第 3 步:现在,启动 RTSP 服务器

$ rtspServer=192.168.XXX.XXX:rtsp://192.168.XXX.XXX:8554/webCamStream ./rtsp-simple-server
Run Code Online (Sandbox Code Playgroud)

(在上面的命令中添加您的IP地址)

第 4 步:打开新终端

$ v4l2-ctl --list-devices
Run Code Online (Sandbox Code Playgroud)

(确保您已插入并安装了网络摄像头> sudo apt-get install v4l-utils)这将给出插入系统的所有摄像头设备的列表,例如。

UVC Camera (046d:0825) (usb-0000:00:14.0-1):
    /dev/video0
    /dev/video1
Run Code Online (Sandbox Code Playgroud)

第 5 步:您现在可以将视频流从网络摄像头推送到 RTSP 服务器:

$ sudo ffmpeg -f v4l2 -framerate 24 -video_size 480x480 -i /dev/video0 -f rtsp -rtsp_transport tcp rtsp://192.168.XXX.XXX:8554/webCamStream
Run Code Online (Sandbox Code Playgroud)

(在上面的命令中添加您的IP地址、端口和流名称)

第 6 步:最后一步是检查并查看您的 RTSP 源:打开一个新终端并使用以下命令进行检查

$ ffplay "rtsp://192.168.XXX.XXX:8554/webCamStream"
Run Code Online (Sandbox Code Playgroud)


aer*_*tal 6

ffmpeg不能替代 RTSP 服务器,它rtsp只是一个复用器/解复用器。当您使用它进行输出时,它会发送带有RTSP ANNOUNCE. 所以你需要一个支持在 8888 上运行的服务器。文档提到了Darwin Streaming Serverrevmischa/rtsp-server