我从另一个终端启动ffmpeg以使用此命令进行流式传输 它有效:
sudo ffmpeg -re -f video4linux2 -i /dev/video0 -fflags nobuffer -an http://localhost:8090/feed1.ffm
在我的配置文件中,我有这个流:
<Stream test.webm>
Feed feed1.ffm
Format webm
NoAudio
VideoCodec libvpx
VideoSize 720x576
VideoFrameRate 25
# Video settings
VideoCodec libvpx
VideoSize 720x576 # Video resolution
VideoFrameRate 25 # Video FPS
AVOptionVideo flags +global_header # Parameters passed to encoder
# (same as ffmpeg command-line parameters)
AVOptionVideo cpu-used 0
AVOptionVideo qmin 10
AVOptionVideo qmax 42
#AVOptionVideo quality good
PreRoll 5
StartSendOnKey
VideoBitRate 400 # Video bitrate
</Stream>
我用
启动流ffplay http:// 192.168.1.2 :8090 / test.webm 它有效,但我有4秒的延迟,我会尽量减少这种延迟,因为这对我的应用程序至关重要。 感谢
答案 0 :(得分:14)
FFMpeg的流媒体指南有一个关于如何减少延迟的特定部分。我还没有尝试过他们所有的建议。 http://ffmpeg.org/trac/ffmpeg/wiki/StreamingGuide#Latency
他们特别注意了ffplay引入的延迟:
默认情况下,
ffplay
会引入自己的小延迟,mplayer
及其-nocache
用于测试延迟(或-benchmark
)也很有用。 使用SDL out也可以查看具有最小延迟的帧:ffmpeg ... -f sdl -
答案 1 :(得分:2)
您可以尝试此命令
ffplay -fflags nobuffer -rtsp_transport tcp rtsp://<host>:<port>
或更精心但实验性的:
ffplay -fflags nobuffer -flags low_delay -framedrop \
-strict experimental -rtsp_transport tcp rtsp://<host>:<port>
或hacky:
ffplay -probesize 32 -sync ext -rtsp_transport tcp rtsp://<host>:<port>
根据您的流式传输,-rtsp_transport
可以设置为udp
或tcp
。对于此示例,我使用的是tcp
。
答案 2 :(得分:0)
尝试将flags
中的AVFormatContext
设置为AVFMT_FLAG_NOBUFFER | AVFMT_FLAG_FLUSH_PACKETS
AVFormatContext *ctx;
...
ctx->flags = AVFMT_FLAG_NOBUFFER | AVFMT_FLAG_FLUSH_PACKETS;
然后尝试将解码器线程设置为1。似乎更多的线程会导致更多的延迟。
AVCodecContext *ctx;
...
ctx->thread_count = 1;