2017-04-23 15 views
0

私はffmpeg経由でhlsストリーミングを使用しました。
ストリーミング遅延の開始が数秒間存在します。
非常に遅い間にストリーム内の4kビデオからのストリーミングをしたいとき。
私は何ができますか?HLSストリーミングFFMPEGのレイテンシを短縮

+0

ライブストリームの再生に対するエンコードの待ち時間を減らすことについて話していますか、またはビデオを再生する前に必要なバッファリングプロセスについて質問していますか?これは4kビデオのような高ビットレートビデオによってのみ長くなりますか? – Brad

+0

@ブラッド私はライブストリームの再生にエンコードの遅延を減らすことを話しています。しかし、あなたが私に尋ねたそれらの両方のために私を助けてください。 私はこのコードをストリーミングに使用しました。私の必要に応じてそれを良くするための勧告がありますか? 'ffmpegの-Re -i input.mp4 -s CGA -f HLS -hls_list_size 0 -g 48 -vcodec libx264 -c:AACの200P/out.m3u8 \t \t -s NHD -f HLS -hls_list_size 0 -g 48 -vcodec libx264 -c:aac 360p/out.m3u8 ' – parsa

答えて

1

4K映像

...

遅延をストリーミングの開始には数秒

のために存在しているはい、もちろんそれはありません。非常に高いビットレートの再生に十分なデータをバッファリングするには時間がかかります。それだけでなく、あなたのHLSプレイヤーは通常、開始をデコードする前に少数のセグメントを必要とします。 @iangetz氏によると、セグメントの長さを減らすことができますが、余分なHTTPリクエストのためにオーバーヘッドが増えます。

HLSを使用しないでくださいHLSストリーミング用

を待ち時間を短縮。 HLS、および他のセグメント化されたストリーミングプロトコル(DASHなど)は、低遅延のために最適化されています。これは、HTTP CDNの再利用、ネットワーク変更(WiFiからLTEへの移行時など)、クライアントが選択できる(しばしば動的に)品質に耐える再生用に最適化されています。

セグメント化されたプロトコルの本質は、チャンクアウトされてからサーバー/ CDNに個別にアップロードされる比較的大きなバッファを必要とします。これは本当に便利ですが、レイテンシが低い場合は良いトレードオフではありません。

遅延が問題になる場合は、全く異なる技術が必要です。 WebRTCを見てください。この技術により、ビデオストリームはリアルタイムで、コーデックは品質よりもレイテンシに最適化され、信頼性はレイテンシを優先して低減されます。また、流通インフラへの多額の投資が必要です。

4kのビデオを気にしている人が、品質の低下が低い待ち時間のトレードオフに値すると考えている状況を想像することはできません。あなたはあなたが望むものすべてを手に入れることはできません。あなたにとって本当に重要なことを選択し、そこから最適化する必要があります。レイテンシを短くしたい場合は、品質を低下させ、その努力をサポートするためにインフラストラクチャに多くの時間と費用をかけなければなりません。高品質で信頼性の高いストリームが必要な場合は、既存のHTTPベースのCDNでDASH(またはHLS)を使用して、優れたエンコードパラメータを維持できます。

+0

ありがとう、質問、私はこのリンクについて何も知らない[​​https://trac.ffmpeg.org/wiki/HWAccelIntro](https:/ /trac.ffmpeg.org/wiki/HWAccelIntro) しかし、知っておきたいことは、hlsのライブストリーミングで待ち時間が短くて助けてくれるということですか? – parsa

+0

@parsaいいえ。ハードウェアアクセラレーションでは、CPUで実行するのではなく、エンコード作業をGPUにオフロードすることができます。 – Brad

2

再生を開始する前に、十分な量のコンテンツをバッファに入れている可能性があります。

'hls_time'でビデオセグメントのサイズを小さくすると、各セグメントのダウンロードが高速になりますが、これによりサーバーへのHTTP要求が増えます。さらに、最初のセグメントを 'hls_init_time'で減らし、他のセグメントをそのまま残すことができます。

http://ffmpeg.org/ffmpeg-all.html#hls-1

hls_init_time秒 秒で最初のターゲットセグメントの長さを設定します。デフォルト値は0です。この時間が最初のm3u8リストを通過した後、次のキーフレーム でセグメントが切断されます。 プレイリストがいっぱいになると、ffmpegは、期間が に等しいセグメントを切断します。hls_time

hls_time secondsターゲットセグメントの長さを秒単位で設定します。デフォルト の値は2です。 が経過した後、次のキーフレームでセグメントが切断されます。

もう1つの方法は、再生を開始する前にプレーヤーが必要とするバッファ量を減らすことです。私はどのプレイヤーを使っているのかよく分かりませんが、ほとんどの人はこのオプションを持っています。

関連する問題