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


11

私はこれを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フォンにストリーミングしたいのですが、レイテンシは十分でなければなりません。

編集 -これは大幅に機能します。私がこれを少し削ることができれば、私は幸せです:

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

1
リンクが切れています。基本的に、ビデオを変換して携帯電話にストリーミングしたいですか?Wi-Fiまたは外付けですか?
jiggunjer 2015年

私がやりたいことは、デバイスに接続されたカメラからストリーミングし、USB経由で接続されているAndroidタブレット(Nexus 10)に表示させることです。
David N. Welton、2015年

1
これらのコーデックについてはあまり知りませんが、可能であればハードウェアアクセラレーションされていることを確認しましたか?これが、1秒を超える遅延が発生する理由についての私の推測です。
snoopen 2015年

vpxはリアルタイムに近づくにはトリッキーになります。x264には「低遅延」またはそのようなFWIWのような曲があることを知っています
rogerdpack

回答:


1

問題は、ハードウェアトランスコーディングではなく、ソフトウェアトランスコーディングを使用していることが主な原因です。

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

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

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

一方、Google Chromeは、コンピューターとAndroidスマートフォンの両方で、VP8およびH264(利用可能な場合)ハードウェアのエンコード/デコードをサポートします。

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


1
ただし、ハードウェアアクセラレーションだけではありません...コーデックの構成は、レイテンシに大きな影響を与えます。品質と帯域幅を犠牲にして、レイテンシを低く保つようにコーデックを調整する必要があります。これは、ハードウェアアクセラレータコーデックを使用しているかどうかに関係なく実行できます。
ブラッド

このリンクでは、Chromeはデスクトップでのハードウェアエンコードをサポートしておらず、Androidでのみサポートされていることを具体的に示しています。
davr

申し訳ありませんが、ブラッドは正しいです。答えは完全に間違っています。同じコーデック設定を設定している限り、ハードウェアまたはソフトウェアのエンコーディングを実行しても、まったく違いはありません(リアルタイムエンコーディングを実行するのに十分なCPU能力がある限り)。コーデック設定)。正しいのは、ビデオコーデックの設定だけでなく、主にトランスポートの種類とデコーダーのバッファリング動作に関することです。WebRTCは、低レイテンシに調整されているため機能します。典型的なWebmデコーダーは低レイテンシを行うことを意図していません
Harry
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.