按需转码摄像机流

Transcoding camera stream on demand

我正在使用 VLC 通过以下命令将 rtsp 流从 IP 摄像机转码为 http mjpg 流:

cvlc -vvv -Idummy -q rtsp://user:password@hostname:554 --sout '#transcode{vcodec=MJPG,venc=ffmpeg{strict=1}}:standard{access=http{mime=multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=:8081/}'

这很好用。

我不需要一直对流进行转码,只需要对其中的一小部分进行转码。 即使没有连接客户端,VLC 也在转码。这一直在我的服务器上使用整个 CPU 核心。

是否可以只在至少一个客户端连接时开始转码,并在最后一个客户端断开连接时停止转码?

非常感谢!

我想你是在问你是否可以从你的服务器 运行 上面的命令行命令 - 如果可以,那么它确实取决于服务器和语言,但一般来说是的,你可以。

您的服务器逻辑类似于:

客户端连接时:

  • 如果是第一个客户端,运行开始转码的命令
  • 向客户端提供 link 流

当客户端断开连接时:

  • 如果这是最后一个客户端,停止转码

当流被缓冲时,第一个客户端会有延迟,但我猜你已经知道了。

运行 命令的方式取决于服务器,但您通常可以找到示例 - 例如对于节点:Execute a command line binary with Node.js

如果您正在使用 Java,还有一篇关于 运行ning cmd 行的非常有用的文章来自 Java - 即使您没有使用 Java 很好看:https://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html