web-dev-qa-db-ja.com

ffmpegでwebrtcのような遅延を取得しますか?

私はこれをChromeと私の電話の間で使用しています:

http://www.webrtc.org/demo

そしてレイテンシは本当に良いです-1秒未満。

私はそれを自分のコンピューターに複製しようとして成功しませんでした。

ffmpeg -f video4linux2 -i /dev/video0  -s 320x200 -r 50 -deadline realtime -vcodec libvpx -f webm -fflags nobuffer udp://10.0.0.55:9002

そして反対側でffplayを使用します。

まだ数秒の遅れがあります。

結局、自分のコンピューターからAndroid電話)にストリーミングしたいのですが、レイテンシは十分でなければなりません。

Edit-これは非常によく機能します。私がこれを少し削ることができれば、私は幸せです:

ffmpeg -vcodec rawvideo -f video4linux2 -i /dev/video0  -s 320x200 -r 25 -vcodec libvpx -f rtp -deadline realtime rtp://10.0.0.55:9002
11
David N. Welton

問題は主に、ハードウェアトランスコーディングの代わりにソフトウェアトランスコーディングを使用しているという事実にあります。

経験則として、変換でハードウェアアクセラレーションを使用する場合、レイテンシは1秒未満のオーダー(通常はミリ秒)になります。ソフトウェアで行われる場合、レイテンシは1秒以上のオーダーになります。

FFmpegはハードウェアアクセラレーションをサポートしていますが、それを機能させるのは通常難しいです。

https://trac.ffmpeg.org/wiki/HWAccelIntro

一方、Google ChromeはVP8とH264(利用可能な場合)のハードウェアエンコーディング/デコーディングをサポートし、コンピュータとAndroid電話:

http://code.google.com/p/chromium/issues/detail?id=42822

1
Ho1