我设法从 ffmpeg 成功提供 ffserver 。 ffmpeg 将输入视为PIPE:
ffmpeg -loglevel fatal -f image2pipe -re -vcodec png -i - -vcodec libx264 http://localhost:8090/%s.ffm
外部 java 进程生成 svg / png 图片并推送到 ffpmepg
我的 ffserver 配置允许我在 ffm 文件中缓冲实时Feed,而不定义文件的大小。
我的流配置如下所示:
<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
但我不能通过已经缓冲的电影来寻求。 有没有办法通过电影,暂停和从“现在”恢复播放?我已经尝试 rtsp h264 , mpg 和 sdp ,但没有成功:
<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吗?
答案 0 :(得分:1)
<强> RTSP 强>
ffserver
中的RTSP支持似乎有点粗略,您可以尝试Darwin Streaming Server或Live555 media server。这两个似乎至少对VOD支持某种形式的技巧游戏。由于您使用的是管道,因此无法提供帮助。
<强> RTMP 强>
某些RTMP服务器/客户端支持缓冲区内搜索(智能搜索)。
关于Smart Seek
Adobe Media Server 3.5.3和Flash Player 10.1一起工作 支持在VOD视频流和具有视频流的直播视频中进行智能搜索 缓冲。 [Source]。
ffserver
不支持RTMP输出,但您可以使用ffmpeg
命令将流直接推送到服务器:
ffmpeg -re -i <input> -f flv rtmp://...
有一个Nginx RTMP module和一个C++ RTMP服务器虽然不太清楚它们是否支持智能搜索。 VLC似乎能够在暂停时寻找一点,并且通常有选项来修改客户端RTMP缓冲区的大小。