从 ffserver 中寻找并暂停视频流

Seek and pause video stream from ffserver

我成功地从 ffmpeg 提供了 ffserverffmpeg 将输入作为 PIPE:

ffmpeg -loglevel fatal -f image2pipe -re -vcodec png -i - -vcodec libx264 http://localhost:8090/%s.ffm

外部 java 进程生成 svg/png 图像并推送到 ffpmepg

我的 ffserver 配置允许我在 ffm 文件中缓冲实时提要,而无需定义文件的大小。

我的 stream 配置如下所示:

<Stream live2.mjpg>
   Feed feed2.ffm
   Format mpjpeg
   VideoFrameRate 25
   VideoSize 640x880
   VideoQMin 1
   VideoQMax 5
   NoAudio
   Strict -1
</Stream>

问题是,尽管我可以通过打开网络在 VLC 中观看流:

http://0.0.0.0:8090/live2.mjpg

但我无法通过已经缓冲的电影进行搜索。 有没有办法实现从“现在”开始的电影寻片、暂停、继续播放?我已经尝试过 rtsph264mpgsdp 但没有成功:

<Stream test1.mpg/sdp/h264>
   Format rtp
   Feed feed2.ffm
   VideoCodec libx264
   VideoSize 640x880
   VideoQMin 1
   VideoQMax 5
   NoAudio
   Strict -1
   VideoFrameRate 25
</Stream>

rtsp 是这个问题的解决方案,还是我需要其他东西?

因为我使用的是 PIPE,所以可以从 动态 文件实现吗?

  • RTSP

    ffserver 中的 RTSP 支持似乎有点粗略,您可以尝试 Darwin Streaming Server or the Live555 media server。至少对于 VOD,两者似乎都支持某种形式的特技播放。由于您使用的是管道,因此这可能无济于事。

  • RTMP

    一些 RTMP servers/clients 支持缓冲区内搜索(智能搜索)。

    About Smart Seek

    Adobe Media Server 3.5.3 and Flash Player 10.1 work together to support smart seeking in VOD streams and in live streams that have a buffer. [Source].

    ffserver 不支持 RTMP 输出,但您可以使用 ffmpeg 命令将流直接推送到服务器:

    ffmpeg -re -i <input> -f flv rtmp://...

    有一个Nginx RTMP module and a C++ RTMP服务器,虽然不太清楚他们是否支持智能搜索。 VLC 似乎可以在暂停时寻找一点,并且通常有修改客户端 RTMP 缓冲区大小的选项。