web-dev-qa-db-ja.com

FFmpegビデオストリーミングのレイテンシーを減らす方法は?

Linuxサーバー(FFmpeg)とWindowsクライアント(VLCプレーヤー)の間のビデオストリーミングアプリケーションでは、約10秒の顕著な遅延があります。

FFmpegコマンド:

ffmpeg -re -f v4l2 -i /dev/video0 http://192.168.1.101:8090/feed1.ffm

VLCプレーヤー:

http://192.168.1.101:8090/test.swf

サーバーとクライアントの両方が同時に起動するという事実にもかかわらず、VLCプレーヤーはストリームを再生するために約10秒遅延し、サーバーがキャプチャした最初のフレームからストリームを再生します。このため、常に10秒の遅延があります。

私はこの待ち時間の原因を解明しようとしています:

  1. 私の最初の考えは、コーデックがエンコーディングで遅れるということです。この場合、ffserver構成ファイルにどのコーデックを含める必要がありますか?多くのビデオコーデック(rawvideo、flv、mjpeg)を試しましたが、同じ結果になりました。

  2. 第二に、レイテンシーを制御するためにffmpegコマンドに含めることができるパラメーターはありますか?

  3. 一方、この遅延はVLCプレーヤーが原因で発生する可能性がありますか?

この質問はちょっと一般的なものだと思います。ただし、同様の問題が発生した場合は、助けていただければ幸いです。

FFserver構成ファイル:

Port 8090
BindAddress 0.0.0.0
MaxClients 10
MaxBandwidth 40000  

<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 500M
ACL allow localhost
ACL allow 127.0.0.1
ACL allow 192.168.0.0 192.168.255.255
</Feed>

<Stream test.swf>
Feed feed1.ffm
Format swf
VideoCodec flv
VideoSize 640x480
VideoFrameRate 30
VideoBitRate 400 

AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 10
AVOptionVideo qmax 42

PreRoll 5
StartSendOnKey
NoAudio
</Stream>
3
dempap

オプションffmpeg-tune zerolatencyを追加し、x265コーデックを使用して最適なオプションを追加し、VideoSize640x480をVideoSize320x240に減らします。

最後に、プレーヤーをvlcからffplayに変更します

1
binaryCode